Cette fonction n'est pas de moi. Je l'ai prise à partir d'un fichier VBS (re)trouvé sur le CD d'un vieux numéro de pcfun (dsl pour la pub). L'auteur d'origine anglaise (d'apres le peu de commentaire) est inconnu.
Cette fonction retourne VRAI si une chaine est comparable à un masque contenant les 'wilcards' (caractères joker) * et ?.
? équivaut UN caractère non nul (pas un espace)
- équivaut un ou plusieurs caractères
La fonction F_Match retourne VRAI si 'Chaine' ressemble au motif 'Masque'.
La fonction est sensible à la casse !
Exemples :
F_Match("MOTO","MOTO") retourne VRAI
F_Match("MOTO","????") retourne VRAI
F_Match("MOTO","???") retourne FAUX
F_Match("MOTO","?????") retourne VRAI
F_Match("MOTO","???M?O??") retourne VRAI
F_Match("MOTO","M*") retourne VRAI
F_Match("MOTO","*") retourne VRAI
F_Match("MOTO","O*") retourne FAUX
F_Match("MOTO","*O") retourne VRAI
A noter :
F_Match("ABCDEFGH.DAT","ABCDEF??.??T")
est plus rapide que
F_Match("ABCDEFGH.DAT","ABCDEF*.??T")
Source / Exemple :
'---------------------------------------------------------------------------------------
' Procedure : F_Match
' Auteur(Chaine) : ?
'---------------------------------------------------------------------------------------
' Retourne True si Chaine ressemble au motif Masque, case sensitive
' String Masque contient des caractères génériques "*" et "?"
'---------------------------------------------------------------------------------------
Function F_Match(ByVal Chaine As String, ByVal Masque As String) As Boolean
Dim I As Integer
I = 0
'
If (Chaine <> "") And (Masque = "") Then I = 2
While (Masque <> "") And (I <> 2)
If Chaine = Masque Then
I = 1
Masque = ""
Else
Select Case Left(Masque, 1)
Case "*"
While (Left(Masque, 1) = "*") Or (Left(Masque, 1) = "?")
Masque = Mid(Masque, 2)
Wend
If (Chaine = "") Then
If F_Match("", Masque) Then
I = 1
Masque = ""
Chaine = ""
Else
I = 2
End If
Else
If F_Match(Chaine, Masque) Or F_Match(Mid(Chaine, 2), "*" & Masque) Then
I = 1
Masque = ""
Chaine = ""
Else
I = 2
End If
End If
Case "?"
Masque = Mid(Masque, 2)
If F_Match(Chaine, Masque) Or F_Match(Mid(Chaine, 2), Masque) Then
I = 1
Masque = ""
Chaine = ""
Else
I = 2
End If
Case Else
If Chaine = "" Then
I = 2
ElseIf Left(Chaine, 1) = Left(Masque, 1) Then
Masque = Mid(Masque, 2)
Chaine = Mid(Chaine, 2)
Else
I = 2
End If
End Select
If (Chaine <> "") And (Masque = "") Then I = 2
End If
Wend
F_Match = (I <> 2)
End Function
Conclusion :
Test :
msgbox F_Match("MOTO","?O*")
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.