RECHERCHE MOT SUIVANT DANS UN TEXTE...

surfzoid Messages postés 463 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 21 avril 2010 - 10 mars 2004 à 20:55
surfzoid Messages postés 463 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 21 avril 2010 - 12 mars 2004 à 23:00
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/21104-recherche-mot-suivant-dans-un-texte

surfzoid Messages postés 463 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 21 avril 2010
12 mars 2004 à 23:00
allez ma derniere tournée lol:
' ici c avec la méthode instruc que je trouve + long Lol
'If trouve "" Then: trouve 1
'While trouve > nbre
'trouve = InStr(trouve, rt1.Text, Instruction)
'If trouve = 0 Then: GoTo fin
'rt1.SelStart = trouve - 1
'If Instruction = "J" Then
'rt1.SelLength = 3
'Else
'rt1.SelLength = Len(Instruction)
'End If
'rt1.SelColor = couleur
'trouve = trouve + Len(Instruction)
'If nbre > trouve Then
'Exit Sub
'Else
'nbre = nbre + 1
'End If
'If annul = 0 Then: GoTo fin
'DoEvents
'Wend
'nbre = 0
'trouve = 0
'rt1.SelStart = 0

en fait je recherche tjr le suivant mé avec le mem mot et jusqua la fin du file et apré chaque ocurence je decalle le point de depart de la longueur de l ocurence
surfzoid Messages postés 463 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 21 avril 2010
12 mars 2004 à 22:56
allez garçon la meme chose :
celle est tjr issue de ma source (patcheur) mé en fait je ne propose pas a l utilisateur de cherché un mot ,c plutot moi qui cherche une serie de mot pour ensuite les colorié en différente couleur
Public Function ColorWord(Word As String, Color As Long, txtCode As RichTextBox, Optional Style As String, Optional ByVal lCursor As Long, Optional ByVal Length As Long)
Dim Arguments As Boolean
Dim Cursor As Long
Cursor = lCursor
Cursor = txtCode.find(Word, Cursor - 1, , rtfWholeWord) '- 1
While IIf(Length > 0, (Cursor < lCursor + Length) And (Cursor > -1), Cursor > -1)
txtCode.SelColor = Color
txtCode.SelBold = IIf(UCase(Style) Like "*/B/*", True, False)
txtCode.SelItalic = IIf(UCase(Style) Like "*/I/*", True, False)
txtCode.SelUnderline = IIf(UCase(Style) Like "*/U/*", True, False)
Cursor = txtCode.find(Word, Cursor + 1, , rtfWholeWord)
DoEvents
Wend
End Function

il fo ensuite appelé cette fonction comme ca par ex:
ColorWord "BYTE", vbBlue, rt1, , StartFind + 1, LengthFind
ColorWord "DUP", vbBlue, rt1, , StartFind + 1, LengthFind
ColorWord "NOP", vbRed, rt1, , StartFind + 1, LengthFind
ColorWord "POP", vbRed, rt1, "/I/", StartFind + 1, LengthFind
ColorWord "CALL", vbRed, rt1, "/I/", StartFind + 1, LengthFind
ColorWord "JUMP", vbRed, rt1, "/I/", StartFind + 1, LengthFind
ColorWord "XOR", vbRed, rt1, "/I/", StartFind + 1, LengthFind
ColorWord "ADD", vbRed, rt1, "/I/", StartFind + 1, LengthFind
ColorWord "ADC", vbRed, rt1, , StartFind + 1, LengthFind
ColorWord "CMP", vbRed, rt1, , StartFind + 1, LengthFind
ColorWord "OR", vbRed, rt1, , StartFind + 1, LengthFind
ColorWord "INC", vbYellow, rt1, , StartFind + 1, LengthFind
ColorWord "MOV", vbYellow, rt1, , StartFind + 1, LengthFind
ColorWord "MOVS", vbYellow, rt1, , StartFind + 1, LengthFind
ColorWord "DEC", vbYellow, rt1, , StartFind + 1, LengthFind
ColorWord "40", vbMagenta, rt1, , StartFind + 1, LengthFind
ColorWord "DWORD", vbCyan, rt1, , StartFind + 1, LengthFind
ColorWord "ECX", vbCyan, rt1, , StartFind + 1, LengthFind
tu y met ce que tu veu comme mot
cs_fjohn Messages postés 11 Date d'inscription lundi 5 janvier 2004 Statut Membre Dernière intervention 17 août 2005
12 mars 2004 à 21:28
Bah, c'est juste une recherche du mot suivant, tout court, vraiment comme je l'ai dis précédement, c'est pas sensé cassez des briques...

tu tape ton mot et tu recherche ds tout le texte. point.
sibi12 Messages postés 337 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 15 avril 2006
12 mars 2004 à 18:57
J'ai du effetivement mal comprendre le but de la source...Autant pour moi..

L'utilisateur n'as aucun contrôle sur le curseur en fait si j'ai bien compris....
dionysos6868 Messages postés 310 Date d'inscription jeudi 4 septembre 2003 Statut Membre Dernière intervention 9 juin 2005 1
11 mars 2004 à 20:52
Perso je connais les deux technique lui find qui est rapide l'autre un recherche meme si elle reste simple pour la plupart des developpeur mais il ne faut pas oublier que les debutant recherche je style de code pour comprendre et je la trouve tres bien .

voila
cs_fjohn Messages postés 11 Date d'inscription lundi 5 janvier 2004 Statut Membre Dernière intervention 17 août 2005
11 mars 2004 à 19:45
Impossible, je crois que tu as mal compris mon code. Position, c'est une variable, personne peut la toucher. le fais que tu touche le curseur n'entre pas en compte dans l'algorithme.

Test la, tu verras...
sibi12 Messages postés 337 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 15 avril 2006
11 mars 2004 à 19:30
Imagine que le curseur soit déplacer par l'utilisateur entre 2 recherche, le comprotement de ton code devient erroner puisqu'il continuera la ou tu la laisser au lieu de chercher a partir de la position actuel du curseur.

ce code tel quel n'est en fait qu'une petite astuce et pas une source reutilisable. tu devrait creer une fonction qui prend comme argument, la chaine recherché, le textbox et le sens de la recherche de faç on que n'importe qui puisse reutiliser ton code tel quel...
cs_fjohn Messages postés 11 Date d'inscription lundi 5 janvier 2004 Statut Membre Dernière intervention 17 août 2005
11 mars 2004 à 19:18
@surfzoid : Merci du copier coller, ton fichier etait trop volumineux, c cool de me le mettre là. Par contre je suis en train de me documenter sur find parceque je le connait pas bien et je comprends pas tout ce que tu fais. Je te fais ma critique apres ;)


@xby : - "on peut utiliser la propriété Texte.Text.SelStart au lieu de position pour avoir un comportment similaire au bloc-note.", ca j'ai pas trop compris ce que tu veux dire, vu que j'utilise selstart et que je suis obligé de prendre une variable position pour aller a la position suivante à l'appel suivant. Donne plutot ton code alors, parceque là, c'est un peu vague...

Sinon d'accord avec tes améliorations et merci du tuyau pour reverse je n'y avais pas pensé, même si c'est du plus, pas l'algo fondamental que tout un chacun peu améliorer à sa guise.
surfzoid Messages postés 463 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 21 avril 2010
11 mars 2004 à 19:06
bon finalement je me tappe un copier collé se sera peut etre plus simple lol

Function next_asm()
Dim FoundPos As Double 'offset de l ocurence
Dim FoundLine As Double 'N° de ligne de l occurence
public strFindMe 'contient l ocurence recherché

rt1.SelLength = 0 ' pour etre sur de partir a 0
On Error GoTo fin
' Recherche le texte spécifié dans le contrôle TextBox.
FoundPos = rt1.find(strFindMe, rt1.SelStart + 1, , 0)

If FoundPos <> -1 Then 'que si on a trouvé
' Renvoie le numéro de la ligne où le texte a été
' retrouvé.
FoundLine = rt1.GetLineFromChar(FoundPos)
rt1.SelColor = vbWhite 'com find select l ocurence auto je la mé en blanc

Else
MsgBox "Fin de l'espace de recherche ,au reprend au debut.!!"
rt1.SelStart = 0
End If
fin:
If Err.Number = 6 Then
MsgBox "Le fichier est trop gros ,dsl !!"
rt1.SelStart = 0
End If
End Function
surfzoid Messages postés 463 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 21 avril 2010
11 mars 2004 à 19:00
fjohn :: voyons a tu jetté un coup d oeil a ma source , si tel est le cas tu verrais que je gere largement le "suivant" avec mon instruc find de plus il n y a rien d extraordinaire de deplacer le point de depart dynamiquement ds une fonction quelqu elle soit find,instrc,mid,lenth,right,left etc ..
je t assure jette y un coup d oeil
@++
sibi12 Messages postés 337 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 15 avril 2006
11 mars 2004 à 18:46
salut,

le code peut assez facilement être améliorrer :

- on peut utiliser la propriété Texte.Text.SelStart au lieu de position pour avoir un comportment similaire au bloc-note.

- la fonction instr renvoi 0 si la chaine est introuvable donc on peut faire un petit msgbox pour informar l'utilisateur.

- on peut également faire une recherche vers le bas, vers le haut ou dans tout les sens dans le dernier cas, on part d'ou on est, qd on est à la fin on recommence au debut et on s'arrete qd on arrive ou on a commencer. Pour la recherche vers le haut, il existe la fct InStrRev

pour info : SetFocus "n'execute" pas la selection, elle ne fait que donner le focus au TextBox, ce qui permet d'afficher la selection

bonne prog @+
cs_fjohn Messages postés 11 Date d'inscription lundi 5 janvier 2004 Statut Membre Dernière intervention 17 août 2005
10 mars 2004 à 21:04
Arf, merci du tuyau, je connaissais pas cette fonction Find, ca me sera utile d'ailleurs, mais pour une autre raison, c'est la présence de l'end point que la fonction instr() n'a pas.

Sinon, bah non, ma fonction à moi est plus portable qu'en utilisant find et cette fonction ne résout en rien le problème du "suivant" ;)

Merci pour le commentaire et bonne prog à toi aussi :)
surfzoid Messages postés 463 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 21 avril 2010
10 mars 2004 à 20:55
c pas mal mais avait tu la possibilité d utilisé un rtfbox plutot qu un textbox ? Car si rien ne t en empeché le rtfbox a dejas une "fonction" de recherche (find.....) lol
pour en avoir un exemple voli http://www.vbfrance.com/code.aspx?ID=19199
je l ai utilisé un peut partout
Bonne prog
Rejoignez-nous