Recherche d'une chaine de caractere [Résolu]

Signaler
Messages postés
107
Date d'inscription
dimanche 27 juin 2004
Statut
Membre
Dernière intervention
12 novembre 2006
-
Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
-
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

Messages postés
107
Date d'inscription
dimanche 27 juin 2004
Statut
Membre
Dernière intervention
12 novembre 2006

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
Merci

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

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

Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
17
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
Merci

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

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

Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
17
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
Messages postés
107
Date d'inscription
dimanche 27 juin 2004
Statut
Membre
Dernière intervention
12 novembre 2006

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

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
Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
17
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
Messages postés
107
Date d'inscription
dimanche 27 juin 2004
Statut
Membre
Dernière intervention
12 novembre 2006

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
Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
17
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