Question 208

Comment comparer deux chaînes de caractères en VB ?

La comparaison de chaînes de caractères est une opération courante. Elle se fait trivialement en utilisant l'opérateur de comparaison "=".

La comparaison effectuée par "=" est une comparaison stricte, caractère par caractère. Cependant, il est fréquent de devoir effectuer une comparaison qui ne tienne pas compte de la casse, c'est à dire de la présence de minuscules ou de majuscules.

Visual Basic dispose d'une fonction adaptée à la comparaison de chaînes de caractères indépendamment de la casse : StrComp.

Cette fonction permet de comparer 2 chaînes de caractères, en spécifiant le type de comparaison souhaitée :

  • Comparaison binaire (vbBinaryCompare) : effectue une comparaison stricte, comme l'opérateur "égal"
  • Comparaison textuelle (vbTextCompare) : effectue une comparaison ne tenant pas compte de la casse

Le petit exemple suivant illustre le fonctionnement de StrComp :

Private Sub Command1_Click()

    Dim str1    As String
    Dim str2    As String
    
    str1 = "hello"
    str2 = "HELLO"
    
    If StrComp(str1, str2, vbTextCompare) = 0 Then
        Debug.Print "Les chaines sont égales (option : vbTextCompare)"
    End If
    
    If StrComp(str1, str2, vbBinaryCompare) = 0 Then
        Debug.Print "Les chaines sont égales (option : vbBinaryCompare)"
    End If
    
End Sub

On notera que la fonction retourne 0 (zéro) si les chaînes sont considérées égales. En cas d'inégalité, la fonction retourne -1 si le premier caractère différent entre str1 et str2 est "plus grand" dans str1, ou 1 sinon.

Un exemple classique d'utilisation est le test d'une valeur écrite dans un fichier de configuration éditable manuellement. On pourrait écrire :


    ' ReadValueFromConfigFile
    ' Value = ReadFromConfig(...)
    
    If StrComp(Value, "yes") = 0 Then
        ' do something
    End If

Ce code permet de traiter en une seule ligne les cas "yes", "YES", "Yes", etc.

Performances

Cette fonction est très performante; l'ordre de grandeur est de 1000 comparaisons en une milliseconde. En mode "vbBinaryCompare", elle est aussi rapide qu'un simple "égal".

Pour tester si une chaine est vide (empty string), le plus rapide est toujours l'utilisation de la fonction LenB : If LenB(str) = 0 then ...

Pour aller plus loin

Voir aussi :

Date de publication : 24 janvier 2009
Dernière modification : 24 janvier 2009
Rubriques : Texte & strings
Mots-clés : comparer, comparaison, chaînes, chaines, caractères, StrComp, vbBinaryCompare, vbTextCompare, minuscules, majuscules, accents