Carte du site
 Remerciements
 Netiquette
 Bugs
 Tables
 Requêtes
 Formulaires
 États (rapports)
 Modules
 APIs
 Chaînes
 Date/Time
 Général
 Ressources
 Téléchargeables

 Termes d'usage

Strings: Segmenter une chaîne de caractères en ses composantes individuelles

Author(s)
Dev Ashish

Segmenter une chaîne de caractères en ses composantes individuelles.

(Q) J'ai une chaîne de caractères séparées par un séparateur (virgule, point, point virgule, espace). Comment extraire chaque valeur de cette chaîne?

(A) Vous pouvez utiliser ces deux fonctions fournies par Microsoft pour retrouver chaque valeur. Noter que ces fonctions sont écrites pour un cas où la virgule est utilisée comme séparateur, mais qu'elles peuvent être aisément être modifiées pour accommoder tout autre séparateur. Utiliser la procédure comme exemple.

'******************* Code Start ****************
Function CountCSWords(ByVal s) As Integer
'Compte le nombre de mots dans une chaîne avec virgules comme séparateur
Dim WC As Integer, Pos As Integer
    If VarType(s) <> 8 Or Len(s) = 0 Then
        CountCSWords = 0
        Exit Function
    End If
    WC = 1
    Pos = InStr(s, ",")
    Do While Pos > 0
        WC = WC + 1
        Pos = InStr(Pos + 1, s, ",")
    Loop
    CountCSWords = WC
End Function

Function GetCSWord(ByVal s, Indx As Integer)
'Retourne le n-ième mot d'une chaîne spécifiée
Dim WC As Integer, Count As Integer
Dim SPos As Integer, EPos As Integer

    WC = CountCSWords(s)
    If Indx < 1 Or Indx > WC Then
        GetCSWord = Null
        Exit Function
    End If
    Count = 1
    SPos = 1
    For Count = 2 To Indx
        SPos = InStr(SPos, s, ",") + 1
    Next Count
    EPos = InStr(SPos, s, ",") - 1
    If EPos <= 0 Then EPos = Len(s)
    GetCSWord = Trim(Mid(s, SPos, EPos - SPos + 1))
End Function

Sub Test()

Dim strAString As String
Dim I As Integer
Dim intCnt As Integer

    strAString = "This,calls,the,two,functions,listed,above"

    'Trouver combien de virgules sont présentes
    intCnt = CountCSWords(strAString)
    

    'Appeler la fonction pour retrouver les mots, un à un.
    For I = 1 To intCnt
        Debug.Print GetCSWord(strAString, I)
    Next
End Sub

'******************* Code End ****************

© 1998-2001, Dev Ashish, All rights reserved. Optimized for Microsoft Internet Explorer