Like: recherche d'un seul mot

Résolu
Signaler
Messages postés
298
Date d'inscription
lundi 14 juin 2004
Statut
Membre
Dernière intervention
5 juillet 2013
-
Messages postés
298
Date d'inscription
lundi 14 juin 2004
Statut
Membre
Dernière intervention
5 juillet 2013
-
Salut à tous
Comment faire pour que les phrases suivantes soient reconnues et la dernière exclue:
1) tu vois ?
2) tu vois clair ?
3) tu vois bien clair ?
Je fais un modèle avec Like:
resultat1= phrase1 like "tu vois" & " " & "[?]"
resultat2= phrase2 like "tu vois" & " " & "*" & " " & "[?]"

Le premier modèle doit reconnaitre les phrases avec "tu vois" un espace et un ?; comme la phrase 1, c'est OK.
Le deuxième modéle doit reconnaitre les phrases avec "tu vois", un espace, un SEUL mot, un espace, et un ?, comme la phrase 2
Or, ce modèle reconnait aussi la phrase 3.
J'ai remplacé la séquence " " & "*" & " " & "[?]" par:
" * ?" = KO
" " & "! " & " " & "[?]" = KO
et d'autres variantes, masi rien ne marche.
Quelqu'un aurait une idée ? merci

10 réponses

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
47
salut,
bon, on va supposer VB6....

qu'est-ce que tu penses de çà :

Dim DebutFixe as String, FinFixe as String
Dim Test as String, Pos as Integer


DebutFixe "tu vois ": FinFixe " ?"



resultat2= phrase2 like DebutFixe & "*" & FinFixe
Test = Replace(phrase2, DebutFixe, "")
Test = Replace(Test, FinFixe, "")
Pos = Instr(Test, " ")
if Pos <> 0 Then MsgBox "Il y a plus d'un mot trouvé", 32, "Invalide"

demande précision si besoin
++
PCPT
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 109 internautes nous ont dit merci ce mois-ci

Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
18
Salut,
As-tu essayé avec la fonction split() ?
Par ex :

dim resultat2() as string
resultat2= split(phrase2," ")
resultat2(0) contiendra "tu"
resultat2(1) contiendra "vois"
resultat2(2) contiendra "clair"
resultat2(3) contiendra "?"

dim resultat2() as string
resultat2= split(phrase3," ")
resultat2(0) contiendra "tu"
resultat2(1) contiendra "vois"
resultat2(2) contiendra "bien"
resultat2(3) contiendra "clair"
resultat2(4) contiendra "?"

etc ...

A partir de là, tu peux tester le nb de mots : ubound(resultat2)+1
et/ou tester les mots eux même à la place qu'ils occupent dans le tableau.

Je ne vois pas trop d'autre solution.

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 109 internautes nous ont dit merci ce mois-ci

Messages postés
81
Date d'inscription
lundi 13 janvier 2003
Statut
Membre
Dernière intervention
15 février 2008
1
Pourquoi tu n'utilise pas InStr(1,phrase,"bien"). Si le résultat est différent de 0 alors ta chaine est présente.
Messages postés
298
Date d'inscription
lundi 14 juin 2004
Statut
Membre
Dernière intervention
5 juillet 2013
1
Merci de ta réposne, mais je dois absolument garder le modèle tel quel, et en plus ce n'est pas le mot "bien" qui compte, mais n'importe quel mot: en fait je dois repérer les phrases avec un seul mot en plus que "tu vois".
Messages postés
81
Date d'inscription
lundi 13 janvier 2003
Statut
Membre
Dernière intervention
15 février 2008
1
Comptes les espaces
Messages postés
298
Date d'inscription
lundi 14 juin 2004
Statut
Membre
Dernière intervention
5 juillet 2013
1
les espaces sont dans le modèle puisque pour un mot il y a deux espaces:
" " & "*" & " "
en fait le "*" marche comme s'il était seul, alors que je demande tout caractère entouré de deux blancs une seule fois.
Messages postés
298
Date d'inscription
lundi 14 juin 2004
Statut
Membre
Dernière intervention
5 juillet 2013
1
Merci pour vos réponses, je vais tester ça.
En fait, le modèle que je proposais ici marche tout à fait bien quand on découpe au préalable avec SPLIT, en prenant la ponctuation comme séparateur. Malheureusement, dans mon cas, la fonction split , qui traitait l'énoncé comme un tout, amenait des difficultés de traitement (notemment, le séparateur est rejeté du tableau) et donc j'ai dû traiter caractère par caractère pour repèrer la ponctuation; et c'est depuis que ce modèle ne marche plus.

Split(phrase, "?")
modèle " " & "*" & " " OK

For h = 1 to Len (phrase(I))
c= Mid$(phrase(I), h, 1)
if c = "?" then
h = h +1
phrase= Mid$(Lcase(phrase(I), j, h-j)
modèle KO
etc
Messages postés
298
Date d'inscription
lundi 14 juin 2004
Statut
Membre
Dernière intervention
5 juillet 2013
1
Désolé pour la mise en page, il n'y a pas de règles sous mac, je passe alors par mon PC.
Merci pcpt ta solution marche parfaitement si on a toujours bien un espace entre deux mots (sinon, on doit faire un replace(phrase2, " ", " ") par ex.)
CanisLupus, je comprends ta solution mais elle est longue à mettre en oeuvre dans mon cas, car les mots à vérifier doivent d'abord être présent dans une base de données et dans un certain ordre avant de vérifier s'il n'y a qu'un mot en plus.Sinon, j'aurais pu faire:
resultat() = Split(phrase, " ")
For f = 0 To UBound(resultat)
res1 = InStr(resultat(4), "")
If res = 1 Then MsgBox "ok"
Next f

Merci encore
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
47
en effet, mais ce n'est d'ailleurs pa le seul test :
*pas de majuscule "Tu vois"
*espace avant le "?"
et sans doute d'autres, genre pas d'espace après une apostrophe..

tu peux d'ailleurs raccourcir mon instruction :

Test = Replace(Replace(resultat2, DebutFixe, ""), FinFixe, "")

PCPT
Messages postés
298
Date d'inscription
lundi 14 juin 2004
Statut
Membre
Dernière intervention
5 juillet 2013
1
J'ai déjà intégré ce genre de problèmes de style dans le programme car ca gêne souvent la comparaison avec des bases de données, donc dans mon cas, ta solution est bien la meilleure mais si quelqu'un d'autre souhaite l'utiliser il devrait penser à tout ça.
Ceci dit, à la réflexion la solution de CanisLupus est j'uilise les conditions existantes. Je continue à tester et merci à tous les deux encore.