Recherche d'une chaine de caractere

Résolu
cs_bobo91 Messages postés 107 Date d'inscription dimanche 27 juin 2004 Statut Membre Dernière intervention 12 novembre 2006 - 25 juil. 2004 à 01:44
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 - 26 juil. 2004 à 10:10
bonjour tous le monde merci encore a ceux qui pourrons m'aider . pour le moment j'esaye de faire un editeur hexadecimal cela dit.
je voudrai faire un systeme de recherche de chaine hexadecimale
dans un textbox.la recherche terminer me converti en rouge la chaine trouver.

ex: 3030 3030 3132 3226 2525 1311 5656 8212
3131 2059 2859 5681 2523 2228 1415 1212
etc...

recherche = 82123131

8 réponses

cs_bobo91 Messages postés 107 Date d'inscription dimanche 27 juin 2004 Statut Membre Dernière intervention 12 novembre 2006
25 juil. 2004 à 14:32
slt tous le monde.
donc j'ai essayer ton code vbshare mais c'a ne fonctionnai
pas pour toute les solution donc je met en evidence ma source pour que les autre qui voudrais faire exactement la meme chose.
j'ai tester de mon coter et ca fonctionne.
j'espere que je me suis pas trop pris la tete.
mais si vous trouver plus simple n'estiter a poster vos sources.
merci d'avance.
et merci vbshare pour l'idee du richtext.

Dim pos As Long
rtb.Text = "1234 5678"
rtb.SelStart = 0
rtb.SelLength = Len(rtb.Text)
rtb.SelColor = vbBlack
rtb.SelLength = 0
pos = InStr(Replace(rtb.Text, " ", vbNullString), Text1) - 1
Debug.Print pos
If pos >= 0 Then
perte = Int((pos + Len(Text1)) / 4) 'Pour la perte de 1 caractere tous les 4 caracteres'
rtb.SelStart = pos
rtb.SelLength = Len(Text1) + perte
rtb.SelColor = vbRed
rtb.SelLength = 0
End If
3
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
25 juil. 2004 à 19:02
salut

désolé mais ton code ne marche pas sauf pour les 4 premiers chiffres (et encore) :
j'ai corrigé deux erreurs dans mon code et j'ai testé :

rtb.SelStart = 0
rtb.SelLength = Len(rtb.Text)
rtb.SelColor = vbBlack
rtb.SelLength = 0
'on trouve la texte
pos = InStr(Replace(rtb.Text, " ", vbNullString), Text1) - 1
'1 erreur
If pos >= 0 Then
rtb.SelStart = pos + pos \ 4
'2nde erreur
rtb.SelLength = Len(Text1) + ((pos Mod 4) + Len(Text1)) \ 4
rtb.SelColor = vbRed
rtb.SelLength = 0
End If

et la ca marche pour tous les cas...

voilà

ShareVB
3
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
25 juil. 2004 à 09:21
salut

dans ce cas il faut utiliser un RichTextBox : (projet/Composants/Microsoft Rich Text ...)

et ce code :

Private Sub Search(ta_recherche As String)
Dim pos As Long

'on réinitialise la couleur
rtb.SelStart = 0
rtb.SelLength = Len(rtb.Text)
rtb.SelColor = vbBlack
rtb.SelLength = 0
'on trouve la texte
pos = InStr(Replace(rtb.Text, " ", vbNullString), ta_recherche) - 1
If pos > 0 Then
rtb.SelStart = pos + pos \ 4
rtb.SelLength = Len(ta_recherche) + ((rtb.SelStart Mod 4) + Len(ta_recherche)) \ 4
rtb.SelColor = vbRed
rtb.SelLength = 0
End If
End Sub

voilà

ShareVB
0
cs_bobo91 Messages postés 107 Date d'inscription dimanche 27 juin 2004 Statut Membre Dernière intervention 12 novembre 2006
25 juil. 2004 à 11:27
merci a toi share vb je vais essayer ta source.
0

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

Posez votre question
cs_bobo91 Messages postés 107 Date d'inscription dimanche 27 juin 2004 Statut Membre Dernière intervention 12 novembre 2006
25 juil. 2004 à 19:42
oui tu as raison share vb (lol) j'ai modifier le mien et ca semble fonctionner aussi.le tien fonctionne parfaitement mais dis moi com mem si le mien fonctionne pour toute solution merci beaucoup a toi.j'aurai deux exemple comme ca.

Dim pos As Long
rtb.Text = "2021 2223 2425 2627 2829 3031 3233"
rtb.SelStart = 0
rtb.SelLength = Len(rtb.Text)
rtb.SelColor = vbBlack
rtb.SelLength = 0
pos = InStr(Replace(rtb.Text, " ", vbNullString), Text1) - 1
Debug.Print pos
If pos >= 0 Then
perte = Int((pos / 4)) 'Pour la perte de 1 caractere tous les 4 caracteres
Debug.Print perte
rtb.SelStart = pos + perte
rtb.SelLength = Len(Text1) + Int((Len(Text1) / 4))
rtb.SelColor = vbRed
rtb.SelLength = 0
End If
0
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
25 juil. 2004 à 20:23
salut

rtb.SelLength = Len(Text1) + Int((Len(Text1) / 4)) ne marche pas :
exemple : "1111 2222 3333" et je cherche "12" ou "23"
Len(Text1) = 2
Len(Text1)/4=0.5
Int(0.5)=0
rtb.SelLength = 2 or devrait être 3 "1 2"

voilà

ShareVB
0
cs_bobo91 Messages postés 107 Date d'inscription dimanche 27 juin 2004 Statut Membre Dernière intervention 12 novembre 2006
25 juil. 2004 à 23:03
je sais que je vais peu etre t'embeter un peu mais je comprend pas un truc.

rtb.SelLength = Len(Text1) + ((pos Mod 4) + Len(Text1)) \ 4

peu tu me la detaille car je ne comprend pas pourquoi
calculer le reste d'une division.

mathematiquement c'est flou pour moi mais je sais bien que tu as raison. merci a toi
0
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
26 juil. 2004 à 10:10
salut

déjà \ est la division entière contrairement à /... (ca évite Int(machin/4) et c plus rapide niveau cycle processeur)

pos mod 4 : ca calcule à combien de caractères la chaîne trouvée est de l'espace le plus proche :exemple "1234 5678 9123 4567" et "891234567", pos 7, donc pos mod 4 3(4ème caractère après l'espace) donc (2+9)\4 = 2 espaces dedans

pour savoir le nombre d'espaces dans la chaîne, il faut rajouter la position relative de la chaîne par rapport à l'espace précédant : une recherche de 4 carac peut avoir 0 ou 1 espace suivant sa place. Il faut se placer comme si on recherchait une chaine qui commencait toujours après un espace de sorte que sa longueur est significative du nombre d'espaces qu'elle contient. Depuis un espace, une chaine de 1,2,3 ou 4 caractères n'a pas d'espace, une chaine de 5,6,7,8 carac à 1 espace...
en rajoutant la position relative, on se retrouve dans ce cas : une chaine de 4c à 3c d'un espace <=> une chaine de 7c <=> un espace...une chaine de 4c à 0c <=> 0 espace...

j'espère que je suis clair parce que c'est vrai que ce n'est pas forcèment évident

voilà

ShareVB
0
Rejoignez-nous