Like: recherche d'un seul mot

Résolu
cs_lacomm Messages postés 298 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 5 juillet 2013 - 1 août 2005 à 12:51
cs_lacomm Messages postés 298 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 5 juillet 2013 - 2 août 2005 à 12:41
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

PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
1 août 2005 à 19:37
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
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 18
1 août 2005 à 19:37
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
cs_toto1980 Messages postés 81 Date d'inscription lundi 13 janvier 2003 Statut Membre Dernière intervention 15 février 2008 1
1 août 2005 à 13:35
Pourquoi tu n'utilise pas InStr(1,phrase,"bien"). Si le résultat est différent de 0 alors ta chaine est présente.
0
cs_lacomm Messages postés 298 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 5 juillet 2013 1
1 août 2005 à 14:36
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".
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_toto1980 Messages postés 81 Date d'inscription lundi 13 janvier 2003 Statut Membre Dernière intervention 15 février 2008 1
1 août 2005 à 16:28
Comptes les espaces
0
cs_lacomm Messages postés 298 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 5 juillet 2013 1
1 août 2005 à 16:49
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.
0
cs_lacomm Messages postés 298 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 5 juillet 2013 1
2 août 2005 à 09:10
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
0
cs_lacomm Messages postés 298 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 5 juillet 2013 1
2 août 2005 à 12:10
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
0
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
2 août 2005 à 12:27
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
0
cs_lacomm Messages postés 298 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 5 juillet 2013 1
2 août 2005 à 12:41
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.
0