Comment réaliser des manipulations complexes de chaînes de caracères ?
Cet article est la suite logique de l'article Comment réaliser des manipulations de chaînes de caractères ?, qui présentait les fonctions de base de VB dédiées à la manipulation de chaînes de caractères. Cet article propose d'aller plus loin, en proposant un ensemble de fonctions de manipulation de chaînes de caractères plus complexes, basées sur les fonctions de base évoquées précédemment. Le but de cet article est double : d'une part proposer un ensemble de fonctions de haut niveau prêtes à l'emploi, d'autre part illustrer par des exemples concrets l'utilisation des "briques de base" que sont les fonctions de VB, pour la réalisation de fonctions complexes. Comment déterminer si un caractère est une voyelle une consonne ?Principe : Conversion du caractère en majuscule, et recherche de ce caractère dans une chaîne contenant toutes les voyelles en majuscule. Pour déterminer si un caractère est une consonne, le principe est le même. Note : les deux fonctions retournent False si la chaîne de caractère est vide.
Private Function IsVowel(ByVal szString As String) As Boolean Const vowels As String = "AEIOUY" szString = Trim$(szString) If szString <> "" Then IsVowel = (InStr(vowels, Left$(UCase$(szString), 1)) > 0) End If End Function
Private Function IsConsonant(ByVal szString As String) As Boolean Const consonants As String = "BCDFGHJKLMNPQRSTVWXZ" szString = Trim$(szString) If szString <> "" Then IsConsonant = (InStr(consonants, Left$(UCase$(szString), 1)) > 0) End If End Function
Comment mettre en majuscule le premier caractère de chaque mot d'une chaîne de caractères ?Principe : on sépare les mots en recherchant les espaces, et on met en majuscule la première lettre de ce qui suit. A noter que cette fonction pourrait être remplacée par un simple appel à la fonction StrConv, dont la documentation est donnée dans la section "Aller plus loin".
Private Function UpperCamelCase(ByVal szString As String) As String Dim posspc As Long Dim length As Long Dim start As Long
length = Len(szString) If length > 0 Then Mid$(szString, 1, 1) = UCase(Mid$(szString, 1, 1)) start = 1 posspc = InStr(start, szString, " ") While (posspc > 0) And (posspc <> length) Mid$(szString, posspc + 1, 1) = UCase(Mid$(szString, posspc + 1, 1)) start = start + 1 posspc = InStr(start, szString, " ") Wend End If UpperCamelCase = szString End Function
Comment compter le nombre de mots d'une chaîne de caractères ?Principe : on recherche dans la chaîne les occurrences d'espaces ou d'équivalents. La méthode proposée ici permet de compter les mots et uniquement les mots, indépendamment du nombre ou du type de séparateurs.
Public Function CountWords(ByVal aText As String) As Long
Const Whitechars As String = " " & vbCr & vbLf & vbTab Dim i As Long
Dim ReadingWSP As Boolean Dim Result As Long
ReadingWSP = True Result = 0
For i = 1 To Len(aText) If (ReadingWSP) Then If (InStr(1, Whitechars, Mid$(aText, i, 1)) = 0) Then Result = Result + 1 ReadingWSP = False End If Else ReadingWSP = (InStr(1, Whitechars, Mid$(aText, i, 1)) <> 0) End If Next i
CountWords = Result End Function
Quand on ne doit pas prendre en compte la présence de multiples espaces, ou d'une manière générale pour compter le nombre d'éléments séparés par un séparateur dans une chaîne donnée, on peut utiliser la fonction Split ; Ceci peut être utile pour compter les champs dans un enregistrement de type "csv".
Public Function CountFields(ByVal aText As String, ByVal sep As String) As Long
Dim t() As String
t() = Split(aText, sep) CountFields = UBound(t()) + 1 End Function
Comment tester si une chaîne de caractères est alphabétique ou numérique ?Les fonctions suivantes permettent de tester si une chaîne de caractères est alphabétique, alphabétique majuscule, alphabétique minuscule ou constituée de chiffres uniquement.
Private Function IsLowerAlpha(szString As String) As Boolean Dim i As Long Dim Length As Long Dim car As String Length = Len(szString) If Length > 0 Then For i = 1 To Length car = Mid$(szString, i, 1) If Not ((car >= "a") And (car <= "z")) Then Exit Function End If Next i IsLowerAlpha = True End If End Function
Private Function IsUpperAlpha(szString As String) As Boolean Dim i As Long Dim Length As Long Dim car As String Length = Len(szString) If Length > 0 Then For i = 1 To Length car = Mid$(szString, i, 1) If Not ((car >= "A") And (car <= "Z")) Then Exit Function End If Next i IsLowerAlpha = True End If End Function
Private Function IsAlpha(szString As String) As Boolean Dim i As Long Dim Length As Long Dim car As String Length = Len(szString) If Length > 0 Then For i = 1 To Length car = Mid$(szString, i, 1) If Not (((car >= "A") And (car <= "Z")) Or _ ((car >= "a") And (car <= "z"))) Then Exit Function End If Next i IsLowerAlpha = True End If End Function
Private Function IsDigit(szString As String) As Boolean Dim i As Long Dim Length As Long Dim car As String Length = Len(szString) If Length > 0 Then For i = 1 To Length car = Mid$(szString, i, 1) If Not ((car >= "0") And (car <= "9")) Then Exit Function End If Next i IsLowerAlpha = True End If End Function
Pour savoir si une chaîne de caractères est un "nombre", on se référera à l'article très complet : Comment déterminer si ma chaine de caractères est un nombre ?. Pour aller plus loin
Voir aussi : |