OVH Cloud OVH Cloud

recherche dans un texte riche

4 réponses
Avatar
sam
bonjour,
comment rechercher et mettre en =E9vidence toutes les=20
occurences d'une chaine dans un richtextbox ?
en utilisant la methode find tour =E0 tour pout trouver la=20
prochaine occurence, et en mettant ensuite le texte en=20
gras par exemple, =E7a marche bien sauf sur de gros fichier=20
texte dans lesquels il y a beaucoup d'occurences=20
trouv=E9es.dans ce ca c'est tr=E8s long on a l'impression que=20
le traitement se fait ligne par ligne.....

existe-t-il un composant texte disposant de plus de=20
methodes ou bien mon alogorithme est-il mauvais ?

merci

4 réponses

Avatar
jean-marc
>"sam" wrote in message


news:02de01c3bd80$98ec6a80$
bonjour,



Hello,

comment rechercher et mettre en évidence toutes les
occurences d'une chaine dans un richtextbox ?
en utilisant la methode find tour à tour pout trouver la
prochaine occurence, et en mettant ensuite le texte en
gras par exemple, ça marche bien sauf sur de gros fichier
texte dans lesquels il y a beaucoup d'occurences
trouvées.dans ce ca c'est très long on a l'impression que
le traitement se fait ligne par ligne.....



existe-t-il un composant texte disposant de plus de
methodes ou bien mon alogorithme est-il mauvais ?



Et bien il faudrait:
1) Voir ton algorithme pour dire si il est mauvais (pas le programme, juste
le principe en gros)
2) Qu'appelles tu un "GROS" fichier texte ? 10 Ko ? 100 Ko ? plusieurs Mo ?

Il y a de nombreuses méthodes, et on utilise l'une plutot que l'autre en
fonction de la taille moyenne des choses que l'on doit traiter.

merci


Avatar
François Picalausa
"sam" a écrit dans le message de
news:02de01c3bd80$98ec6a80$
en utilisant la methode find tour à tour pout trouver la
prochaine occurence, et en mettant ensuite le texte en
gras par exemple, ça marche bien sauf sur de gros fichier
texte dans lesquels il y a beaucoup d'occurences
trouvées.dans ce ca c'est très long on a l'impression que
le traitement se fait ligne par ligne.....



Bonjour/soir,
Tu peux essayer en utilisant directement le message EM_FINDTEXT:
http://msdn.microsoft.com/library/en-us/shellcc/platform/commctls/richedit/richeditcontrols/richeditcontrolreference/richeditmessages/em_findtext.asp

Masquer le richtext pendant les changements peut accélerer le traitement.

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com
Avatar
jean-marc
"François Picalausa" wrote in message
news:#
"sam" a écrit dans le message de
news:02de01c3bd80$98ec6a80$
> en utilisant la methode find tour à tour pout trouver la
> prochaine occurence, et en mettant ensuite le texte en
> gras par exemple, ça marche bien sauf sur de gros fichier
> texte dans lesquels il y a beaucoup d'occurences
> trouvées.dans ce ca c'est très long on a l'impression que
> le traitement se fait ligne par ligne.....

Bonjour/soir,
Tu peux essayer en utilisant directement le message EM_FINDTEXT:



http://msdn.microsoft.com/library/en-us/shellcc/platform/commctls/richedit/r
icheditcontrols/richeditcontrolreference/richeditmessages/em_findtext.asp

Masquer le richtext pendant les changements peut accélerer le traitement.




Voici un petit bout de code:
Il trouve et highlight 1872 occurences dans un texte de 188 Ko (5824 lignes)
en 1 seconde (sur une vieille machine)
Comme le dit François, masquer le controle accélère énormément les choses.

RT1 est le nom du rich text box. Text2 est le text box dans lequel tu saisis
ton pattern.

Private Sub Command2_Click()
Dim start As Long
Dim s As String
Dim pos As Long
Dim pat As String
Dim l As Long
Dim n As Long
Dim colred As Long

pat = Text2.Text ' le pattern à trouver
l = Len(pat) ' longueur du pattern
s = rt1.Text ' on stocke dans s une copie de travail

start = 1 ' on commence au premier caractere
colred = RGB(255, 0, 0) ' calcul une fois pour toute de la couleur de
highlighting (rouge)
rt1.Visible = False ' masquer le controle
pos = InStr(start, s, pat) ' trouve la premiere occurence

While pos <> 0 ' tant que il y a des occurences
rt1.SelStart = pos - 1 ' selectionne la zone
rt1.SelLength = l
rt1.SelColor = colred ' highlight
rt1.SelBold = True ' et en gras
start = pos + l ' on ajuste la position de depart
pos = InStr(start, s, pat) ' et on cherche l'occurence suivante
Wend
rt1.SelStart = 1 ' on se remet au debut
rt1.Visible = True ' et on raffiche le composant
End Sub

Jean-Marc
Avatar
Jean-Marc
j'ai oublié qu'on confond facilement la lettre L et le chiffre 1 avec
certaines fonts.
revoici le programme, j'ai remplacé ma variable l (lettre L) par
LongueurPattern ...

Private Sub Command2_Click()
Dim start As Long
Dim s As String
Dim pos As Long
Dim pat As String
Dim LongueurPattern As Long
Dim n As Long
Dim colred As Long

pat = Text2.Text ' le pattern à trouver
LongueurPattern = Len(pat) ' longueur du pattern
s = rt1.Text ' on stocke dans s une copie de travail

start = 1 ' on commence au premier caractere
colred = RGB(255, 0, 0) ' calcul une fois pour toute de la couleur de
highlighting (rouge)
rt1.Visible = False ' masquer le controle
pos = InStr(start, s, pat) ' trouve la premiere occurence

While pos <> 0 ' tant que il y a des occurences
rt1.SelStart = pos - 1 ' selectionne la zone
rt1.SelLength = LongueurPattern
rt1.SelColor = colred ' highlight
rt1.SelBold = True ' et en gras
start = pos + LongueurPattern ' on ajuste la position de depart
pos = InStr(start, s, pat) ' et on cherche l'occurence suivante
Wend
rt1.SelStart = 1 ' on se remet au debut
rt1.Visible = True ' et on raffiche le composant
End Sub

voili voila


"jean-marc" a écrit dans le message de
news:3fd47710$0$295$
"François Picalausa" wrote in message
news:#
> "sam" a écrit dans le message de
> news:02de01c3bd80$98ec6a80$
> > en utilisant la methode find tour à tour pout trouver la
> > prochaine occurence, et en mettant ensuite le texte en
> > gras par exemple, ça marche bien sauf sur de gros fichier
> > texte dans lesquels il y a beaucoup d'occurences
> > trouvées.dans ce ca c'est très long on a l'impression que
> > le traitement se fait ligne par ligne.....
>
> Bonjour/soir,
> Tu peux essayer en utilisant directement le message EM_FINDTEXT:
>



http://msdn.microsoft.com/library/en-us/shellcc/platform/commctls/richedit/r
icheditcontrols/richeditcontrolreference/richeditmessages/em_findtext.asp
>
> Masquer le richtext pendant les changements peut accélerer le


traitement.
>

Voici un petit bout de code:
Il trouve et highlight 1872 occurences dans un texte de 188 Ko (5824


lignes)
en 1 seconde (sur une vieille machine)
Comme le dit François, masquer le controle accélère énormément les choses.

RT1 est le nom du rich text box. Text2 est le text box dans lequel tu


saisis
ton pattern.

Private Sub Command2_Click()
Dim start As Long
Dim s As String
Dim pos As Long
Dim pat As String
Dim l As Long
Dim n As Long
Dim colred As Long

pat = Text2.Text ' le pattern à trouver
l = Len(pat) ' longueur du pattern
s = rt1.Text ' on stocke dans s une copie de travail

start = 1 ' on commence au premier caractere
colred = RGB(255, 0, 0) ' calcul une fois pour toute de la couleur de
highlighting (rouge)
rt1.Visible = False ' masquer le controle
pos = InStr(start, s, pat) ' trouve la premiere occurence

While pos <> 0 ' tant que il y a des occurences
rt1.SelStart = pos - 1 ' selectionne la zone
rt1.SelLength = l
rt1.SelColor = colred ' highlight
rt1.SelBold = True ' et en gras
start = pos + l ' on ajuste la position de depart
pos = InStr(start, s, pat) ' et on cherche l'occurence suivante
Wend
rt1.SelStart = 1 ' on se remet au debut
rt1.Visible = True ' et on raffiche le composant
End Sub

Jean-Marc