Comparer deux chaines

cs_lacomm Messages postés 298 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 5 juillet 2013 - 24 août 2004 à 16:28
Zigarn Messages postés 106 Date d'inscription mardi 13 juillet 2004 Statut Membre Dernière intervention 26 janvier 2005 - 25 août 2004 à 15:33
LaComm
Je suis un peu perdu. Je dois comparer deux chaines, du genre:
Je suis le docteur (stringacomparer)
qui est dans un richtextbox
avec des chaines qui sont dans un fichier texte cible, du genre:
Je suis le docteur (stringcible)
Tu es le docteur

J'emploie ceci:
stringacomparer=richtextbox1.text
open "c:/fichiercible.txt" for input as #2
do while not EOF #2
monresul = Instr(1, stringacomparer, stringcible,1)
'j'affiche le résultat dans un deuxième txtbox:
if monresul <>0 then richtextbox2.text = stringcible
'je print dans un fichier
print # 1, stringacomparer
loop
Ca marche bien tant qu'il n'y a qu'une string à comparer, mais dès qu'il y en deux, seul le deuxième stringcible apparaît dans le textbox2, alors que dans le fichier, les deux string apparaissent deux fois.

J'ai également tenté l'objet find, mais là j'ai des reconnaissances fausses.
D'autre part, je voudrais aussi 'paramétrer' le degré de reconnaissance en indiquant dans le fichier texte cible des string comme "je suis le doc***", un peu comme des REGEX.
Merci de votre patience

17 réponses

true_picpic Messages postés 34 Date d'inscription mercredi 26 novembre 2003 Statut Membre Dernière intervention 24 août 2004
24 août 2004 à 16:35
Pour comparer deux chaines utilise Like

ex:
IF String1 Like String2 Then
.....

voili voilou
0
Zigarn Messages postés 106 Date d'inscription mardi 13 juillet 2004 Statut Membre Dernière intervention 26 janvier 2005
24 août 2004 à 16:42
Cela me semble normal que seule la dernière valeur soit dans ton controle RichTextBox2 puisque tu l'écrase à chaque coup !
-------------------------------------------------
Débutant ... mais pas pour longtemps !
0
cs_lacomm Messages postés 298 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 5 juillet 2013 1
24 août 2004 à 16:49
LaComm
Beuh.. j'ai de nouveau les deux strings en double dans mon fichier # 2
et cette fois, plus rien dans le textbox. En fait, je voudrais comparer la stringàcomparer1 avec tous les stringcibles, puis passer à la stringacomparer2 et de nouveau tous les stringcibles.. Et puis, j'aimerais autant l'objet Find, pour colorer les stringcibles qui apparaissent dans le etxbox2, bon enfin, allez c'est pas obligé..
0
cs_ITALIA Messages postés 2169 Date d'inscription vendredi 20 avril 2001 Statut Membre Dernière intervention 30 juin 2009 9
24 août 2004 à 17:54
Tu ne peux pas avoir plusieurs Lignes avec ton Code..car avec richtextbox2.text = tu ecrase son contenu pour le remplacer..

Essayes plutot :

If monresul <>0 then richtextbox2.text = richtextbox2.text & Chr$(13) & stringcible

It@li@
0

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

Posez votre question
cs_ITALIA Messages postés 2169 Date d'inscription vendredi 20 avril 2001 Statut Membre Dernière intervention 30 juin 2009 9
24 août 2004 à 17:55
donnes plus d'exemple

It@li@
0
cs_lacomm Messages postés 298 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 5 juillet 2013 1
25 août 2004 à 09:50
LaComm
Le code d'italia marche mais j'ai fait une erreur de conception. D'accord, j'avais pas précisé, donc je précise:
Dans un TextBox, l'utilisateur saisit du texte :
ex 1 : Je suis le docteur
Tu es le patient
mais il pourrait saisir ceci:
ex 2: Tu es le patient
Je suis le docteur
Dans le fichier texte, qui sert de cible ou de DB, on a:
Je suis le docteur (commentaire 1
Tu es le patient (commentaire 2

Dans le deuxième TextBox, je voudrais qu'apparaissent, et là je me suis planté dans la conception, d'abord les stringàcomparer pour avoir le même ordre (et pas les cibles comme j'avais dit) et ensuite si possible en couleur, un commentaire qui correspond à la stringcible matchée:
ex 1: Je suis le docteur (commentaire 1
Tu es le patient (commentaire 2
ex 2: Tu es le patient (commentaire 2
Je suis le docteur (commentaire 1
J'imagine que je dois créer maintenant la variable commentaire et faire un truc du style
If monresul <>0 then richtextbox2.text = richtextbox1.text & Chr$(13) & commentaire

J'essaie ça, mais j'ai d'autres questions:
- Find ne permet-t-il pas une recherche plus élaborée, notemment avec les REGEX?
- faut-il plutôt utiliser des bases de données plutôt qu'un ficheir texte ?

A bientôt et merci
0
Zigarn Messages postés 106 Date d'inscription mardi 13 juillet 2004 Statut Membre Dernière intervention 26 janvier 2005
25 août 2004 à 09:57
Ici aussi tu va écraser ce que tu as déjà écris !Dans tout les cas, si tu veux rajouter une ligne à ton RichTextBox, il faut faire
 RichTextBox2.Text RichTextBox2.Text & vbCrLf & Text
où Text est une chaîne contenant le texte à rajouter, dans ton cas Text RichTextBox1.Text & Commentaire.

-------------------------------------------------
Débutant ... mais pas pour longtemps !
0
Zigarn Messages postés 106 Date d'inscription mardi 13 juillet 2004 Statut Membre Dernière intervention 26 janvier 2005
25 août 2004 à 10:00
Sinon pour utiliser l'équivalent des regexpr je pense que c'est Like, comme l'a dit true_picpic. MSDN :
Permet de comparer deux chaînes.
Syntaxe : result = string Like pattern
Exemples :
Dim MyCheck
MyCheck = "aBBBa" Like "a*a" ' Renvoie True.
MyCheck = "F" Like "[A-Z]" ' Renvoie True.
MyCheck = "F" Like "[!A-Z]" ' Renvoie False.
MyCheck = "a2a" Like "a#a" ' Renvoie True.
MyCheck = "aM5b" Like "a[L-P]#[!c-e]" ' Renvoie True.
MyCheck = "BAT123khg" Like "B?T*" ' Renvoie True.
MyCheck = "CAT123khg" Like "B?T*" ' Renvoie False.

-------------------------------------------------
Débutant ... mais pas pour longtemps !
0
cs_lacomm Messages postés 298 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 5 juillet 2013 1
25 août 2004 à 10:24
Sorry, Zigarn, j'ai enfin compris l'écrasement ! Le code marche sauf que maintenant, j'ai des commentaires du genre :/rtf1/ansi/ansicpg1252/deflang2060/fontb/../MS sans Serif// textsource /blabla/ commentaire.
J'ai la même chose sans les commentaires, j'imagine que ca vient plutôt du fichier que du code.
Merci aussi pour Like, je n'ai que de la docu générale sur VB6 mais pas MSDN
0
Zigarn Messages postés 106 Date d'inscription mardi 13 juillet 2004 Statut Membre Dernière intervention 26 janvier 2005
25 août 2004 à 10:33
Pour un peu plus d'info sur les pattern de vb :
? <-> Tout caractère unique.
* <-> Aucun ou plusieurs caractères.
# <-> Tout chiffre unique (de 0 à 9).
[charlist] <-> Tout caractère unique compris dans l'argument charlist.
[!charlist] <-> Tout caractère unique non compris dans l'argument charlist.
Plus ensuite le - pour les intervalles
Et pour matcher un de ces caractères, tu le mets entre crochet [*] ou [[] par exemple.

Après, pour tes /rtf1/..., je sais pas. Ca vient peut-être d'un problème de formatage (ANSI, MS sans Serif, ...) ?

-------------------------------------------------
Débutant ... mais pas pour longtemps !
0
cs_ITALIA Messages postés 2169 Date d'inscription vendredi 20 avril 2001 Statut Membre Dernière intervention 30 juin 2009 9
25 août 2004 à 12:01
Essayes .textRTF

RichTextBox2.TextRTF = RichTextBox2.TextRTF & vbCrLf & Text

It@li@
0
cs_lacomm Messages postés 298 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 5 juillet 2013 1
25 août 2004 à 12:34
Honte sur moi ! après avoir renommé, reformaté et modifié le fichier dans tous les sens, je me rends compte que j'ai oublié le .text dans richtextbox2.
Par contre, TextRTF ne marche pas
Et à chaque reconnaissance, j'ai tout le textbox2 qui apparaît:

textbox de saisie:
Je suis le docteur
Tu es le patient

textbox de sortie:
Je suis le docteur
Tu es le patient (commentaire 1

Je suis le docteur
Tu es le patient (commentaire 2

J'envisage de passer par un fichier intermédiaire qui splitte les saisies
et donc je mettrais dans le TextBox le numéro de la chaine splittée et son commentaire.

Merci encore à vous
0
Zigarn Messages postés 106 Date d'inscription mardi 13 juillet 2004 Statut Membre Dernière intervention 26 janvier 2005
25 août 2004 à 12:43
En y réfléchissant, cela me semble normal que toute la TextBox de saisie (RichTextBox1 si j'ai bien compris) soit affichée si Text = RicTextBox1.Text & Commentaire .
Il faudrait plutot mettre ChaineTrouvée & Commentaire où ChaineTrouvée est la sous chaine de RichTextBox qui correspond à ton pattern.

-------------------------------------------------
Débutant ... mais pas pour longtemps !
0
cs_lacomm Messages postés 298 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 5 juillet 2013 1
25 août 2004 à 15:01
Ca marche bien quand le textbox de saisie est dans l'ordre du fichier cible. Par contre, dans un autre ordre, j'obtiens le fichier-cible. Je dois absolument splitter le textbox de saisie, je crois.
0
Zigarn Messages postés 106 Date d'inscription mardi 13 juillet 2004 Statut Membre Dernière intervention 26 janvier 2005
25 août 2004 à 15:05
Je pense que si échangeait tes deux paramètre de chaines dans ton InStr tu pourrais du coup les avoir dans l'ordre du TextBox de saisie.
-------------------------------------------------
Débutant ... mais pas pour longtemps !
0
cs_lacomm Messages postés 298 Date d'inscription lundi 14 juin 2004 Statut Membre Dernière intervention 5 juillet 2013 1
25 août 2004 à 15:26
Je n'obtiens plus rien du tout, ni dans le textbox de sortie, ni dans le fichier de sortie (print #1, texte), sauf avec une seule saisie.
0
Zigarn Messages postés 106 Date d'inscription mardi 13 juillet 2004 Statut Membre Dernière intervention 26 janvier 2005
25 août 2004 à 15:33
C'était juste une suggestion.
Sinon, si tu veux afficher les chaines trouvé dans 1 qui son dans 2 masi dans l'ordre où elle sont dans 1, il faudrait essayer de verifier pour chaque chaine de 1 si elle est dans 2 et alors l'afficher avec son commentaire.
Parce que si tu vérifie pour chaque chaine de 2 si elle est dans 1 et l'affiche alors, tu les mets dans l'ordre de 2.
(Je sais pas si je suis très clair ...)

-------------------------------------------------
Débutant ... mais pas pour longtemps !
0
Rejoignez-nous