guilleto
Messages postés256Date d'inscriptionjeudi 23 octobre 2003StatutMembreDernière intervention20 mars 2013
-
12 sept. 2005 à 12:13
guilleto
Messages postés256Date d'inscriptionjeudi 23 octobre 2003StatutMembreDernière intervention20 mars 2013
-
13 sept. 2005 à 09:14
Bonjour à toutes et à tous,
J'ai une longue série d'instructions du type :
if toto Like "?????A????" Then
endif
if toto Like "?????G????" Then
endif
if toto Like "?????R????" Then
endif
if toto Like "?????TU???" Then
endif
etc...
Est-il possible de faire une instruction qui ressemblerait à ça :
Select case toto
Case Like "?????A????" :
.....
end select
Si ce n'est pas possible mais que vous avez une idée approchante merci de me la transmettre !
Public Function phrase_ok(ByVal chaine1 As String, ByVal chaine2 As String) As Boolean
Dim table() As String
Dim table_inter() As String
Dim ii As Integer
Dim posarg As Integer
Dim posarg2 As Integer
Dim oldposarg As Integer
Dim donnee As String
Dim donnee_len As Integer
phrase_ok = True
If InStr(1, chaine2, "*") 0 And InStr(1, chaine2, "?") 0 Then
'si pas de carac speciaux
If InStr(1, UCase(chaine1), UCase(chaine2)) = 0 Then
'c pas bon
phrase_ok = False
Else
'c bon
Exit Function
End If
End If
'd'abort les etoile
oldposarg = 0
table = Split(chaine2, "*")
If UBound(table) = 0 Then GoTo pasetoile
For ii = 0 To UBound(table)
If table(ii) = "" Then Exit For
table_inter = Split(table(ii), "?")
If UBound(table_inter) > 0 Then
'y'a des ?
donnee = table_inter(UBound(table_inter))
Else
donnee = table(ii)
End If
posarg = InStr(oldposarg + 1, UCase(chaine1), UCase(donnee))
If posarg > 0 Then
If posarg < oldposarg Then
'c pas bon
phrase_ok = False
Exit Function
End If
oldposarg = posarg
Else
'c pas bon
phrase_ok = False
Exit Function
End If
Next ii
pasetoile:
oldposarg = -1
'puis les ?
table = Split(chaine2, "?")
For ii = 0 To UBound(table)
If table(ii) = "" Then Exit For
table_inter = Split(table(ii), "*")
If UBound(table_inter) > 0 Then
'y'a des *
donnee = table_inter(UBound(table_inter))
Else
donnee = table(ii)
End If
donnee_len = Len(donnee)
posarg = InStr(1, UCase(chaine1), UCase(donnee))
'si on é pas au bout du tablo
If ii < UBound(table) Then
table_inter = Split(table(ii + 1), "*")
If UBound(table_inter) > 0 Then
'y'a des *
donnee = table_inter(0)
Else
donnee = table(ii + 1)
End If
posarg2 = InStr(posarg + 1, UCase(chaine1), UCase(donnee))
Else
'sinon y é ce quer tout é bon
Exit Function
End If
If posarg > 0 And posarg2 > 0 Then
If posarg < oldposarg Then
'c pas bon
phrase_ok = False
Exit Function
ElseIf posarg + donnee_len = posarg2 - 1 Then
'c bon
Else
'c pas bon
phrase_ok = False
Exit Function
End If
oldposarg = posarg
Else
'c pas bon
phrase_ok = False
Exit Function
End If
Next ii
Neo.balastik
Messages postés796Date d'inscriptionjeudi 17 mai 2001StatutMembreDernière intervention 5 mai 20097 12 sept. 2005 à 16:28
Pour info, ce qui est plus long n'est pas forcément plus mauvais.
Certaines fonctions en VB s'avèrent très lentes même si elles sont pratiques à l'emploi.
Par contre, je ne sais pas si un Select Case est plus lent qu'une succession de IF. A tester donc !
Guy
Vous n’avez pas trouvé la réponse que vous recherchez ?
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 12 sept. 2005 à 16:50
re,
tiens, çà peut peut-être t'aider.
testé et fonctionnel, mais pas tout à fait ta demande...
Private Sub Command1_Click()
Dim MySearch As String, MonMot As String
MySearch = "A"
'MonMot = "test" & MySearch & "okoko"
MonMot = "testBokoko"
Select Case MonMot Like "????" & MySearch & "?????"
Case True: MsgBox "oui, " & MySearch & " en 5e position"
Case False: MsgBox "non"
End Select
End Sub
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 12 sept. 2005 à 20:37
Salut
Avec le LIKE de VB6, on peut aussi utiliser la syntaxe propre au SQL et bien pratique :
If maChaine Like "____[AGRT]____" Then
Dans cette syntaxe, le symbole _ remplace une seule lettre (alors que % remplacerait toute quantité de lettres) et [AGRT] est la liste des caractères que l'on poiurra rencontrer en 5ème position.
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
guilleto
Messages postés256Date d'inscriptionjeudi 23 octobre 2003StatutMembreDernière intervention20 mars 20131 13 sept. 2005 à 09:14
Merci à tous,
Je pense que je vais malheureusement conserver la série de test avec les if !
En effet la solution qui se rapprochait le plus de ce que je cherche c'est celle de PCPT (même si j'ai pas tout compris concernant celle de Jack ).
Mais étant donné le nombre de tests que j'ai à faire je pense que je vais réfléchir à un système de fichier Access dans lequel il y aura en première colonne le test à effectuer et dans les autres les valeurs à attribuer !