IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Access Discussion :

Ordre caractères dans une chaîne


Sujet :

Access

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 27
    Points : 24
    Points
    24
    Par défaut Ordre caractères dans une chaîne
    Bonjour,

    j'ai un champ de type texte dont le contenu est un ensemble de chiffres séparés par des tirets dans un ordre aléatoire. exemple : -175-200-28-9-300-

    est-ce possible à partir d'une commande de donner un ordre croissant à ces chiffres tout en maintenant les séparations par les tirets ?

    merci d'avance

  2. #2
    seb92400
    Invité(e)
    Par défaut
    Hello,

    Perso, je ne connais pas une commande qui réalise ceci... Par contre, tu peux écrire une petite fonction à base de boucles et de la fonction split...

    Je pense que dans l'ordre, je ferai :
    1. Séparer tous les nombres à chaque tiret (boucle + split + trim) dans un tableau
    2. Trier
    3. Refaire la chaine de caractères avec une boucle en ajoutant un tiret entre chaque nombre...

    C'est une idée... Bon courage...

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour,

    vous pouvez essayer ce type de fonction pour des integer ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    Public Function SortChaine(ByVal s As Variant) As Variant
       Const csDelim As String = "-"
       Dim asTab() As String
       Dim bLeft As Boolean, bRight As Boolean
       If Nz(Len(s)) Then
          If Left(s, 1) = csDelim Then
             s = Mid(s, 2)
             bLeft = True
          End If
          If Right(s, 1) = csDelim Then
             s = Mid(s, 1, Len(s) - 1)
             bRight = True
          End If
          asTab = Split(s, csDelim)
          ShellTri asTab
          s = Join(asTab, csDelim)
          If bLeft Then s = csDelim & s
          If bRight Then s = s & csDelim
       End If
       SortChaine = s
    End Function
     
    Public Sub ShellTri(ByRef atab() As String)
       Dim i As Long, j As Long, inc As Long, n As Long, lb As Long
       Dim v As String
       lb = LBound(atab)
       inc = lb * 3 + 1
       n = UBound(atab)
       While inc < n
          inc = inc * 3 + 1
       Wend
       Do
          inc = inc / 3
          For i = inc + lb To n - 1
             v = atab(i)
             j = i
             Do While CInt(atab(j - inc)) > CInt(v)
                atab(j) = atab(j - inc)
                j = j - inc
                If j < inc + lb Then Exit Do
             Loop
             atab(j) = v
          Next i
       Loop While inc > lb
    End Sub
    utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
       Dim s As Variant
       s = "175-200-28-9-300-"
       s = SortChaine(s)
       Debug.Print s
    cordialement,

    philippe

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 345
    Points : 23 805
    Points
    23 805
    Par défaut
    Solution pour les faignants :

    1) Tu split ta chaîne sur les tirets
    2) Tu enregistre les morceaux dans une table indéxée (pour ne pas avoir à réécrire un algo de tri)
    3) Tu fait une concaténation de tes enr en parcourant ta table enr par enr.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    public function TrierChaine(prmTexte) as string
     
      docmd.runSQL("Delete * from MaTableTriee")
     
      dim t as variant : t=split(prmTexte,"-")
      dim db as database:set db=currentdb
      dim r as recorset: set r=db.openRecordset("MaTableTriee")
     
      dim i as integer : for i=lbound(t) to ubound(t)
        r.addnew
        r![MonChamp]=t(i)
        r.update
      next i
     
      r.movefirst()
      dim result as string
      do while not r.eof()
     
        if result<>"" then
          result= result & "-"
        end if
     
        result=result & r![MonChamp]
        r.movenext
      loop
     
      db.close:set db=nothing
     
      TrierChaine(prmTexte)=result
     
    end function
    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/09/2006, 12h07
  2. Comment remplacer plusieurs caractères dans une chaîne?
    Par Antigonos Ier Gonatas dans le forum Général Python
    Réponses: 5
    Dernier message: 16/06/2006, 16h04
  3. Réponses: 5
    Dernier message: 08/03/2006, 22h20
  4. Réponses: 5
    Dernier message: 03/02/2006, 18h47
  5. [String] Remplacement caractères dans une chaîne
    Par Crazyblinkgirl dans le forum Langage
    Réponses: 4
    Dernier message: 19/07/2004, 11h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo