...............
Publié : ven. 15/mai/2009 12:11
hum ..
Code : Tout sélectionner
Procedure.s Remplace_Mot(Texte.s, MotCherche.s, MotRemplace.s)
Protected Recherche, LongueurCherche, LongueurRemplace, Caractere.s
Longueur = Len(MotCherche)
LongueurRemplace = Len(MotRemplace)
Repeat
Recherche = FindString(Texte, MotCherche, Recherche)
If Recherche > 0
Caractere = Mid(Texte, Recherche + Longueur, 1)
Recherche - 1
If (Caractere < "0" Or Caractere > "9") And (Caractere < "A" Or Caractere > "Z") And (Caractere < "a" Or Caractere > "z")
If Recherche > 0
Caractere = Mid(Texte, Recherche, 1)
EndIf
If Recherche = 0 Or ((Caractere < "0" Or Caractere > "9") And (Caractere < "A" Or Caractere > "Z") And (Caractere < "a" Or Caractere > "z"))
Texte = Left(Texte, Recherche) + MotRemplace + Right(Texte, Len(Texte) - Recherche - Longueur)
Recherche + LongueurRemplace - Longueur
EndIf
EndIf
Recherche + 2
EndIf
Until Recherche = 0
ProcedureReturn Texte
EndProcedure
Texte.s ="Bonjour, je suis le bon bonbon contre les caries de suisse"
Texte = Remplace_Mot(Texte, "bon", "tres bon")
Texte = Remplace_Mot(Texte, "suis", "mange")
Debug Texte
Code : Tout sélectionner
Procedure.s Remplace_Mot(Texte.s, MotCherche.s, MotRemplace.s)
Protected Recherche, LongueurCherche, LongueurRemplace, Caractere.s
Longueur = Len(MotCherche)
LongueurRemplace = Len(MotRemplace)
Repeat
Recherche = FindString(Texte, MotCherche, Recherche)
If Recherche > 0
Caractere = Mid(Texte, Recherche + Longueur, 1)
Recherche - 1
If (Caractere < "0" Or Caractere > "9") And (Caractere < "A" Or Caractere > "Z") And (Caractere < "a" Or Caractere > "z")
If Recherche > 0
Caractere = Mid(Texte, Recherche, 1)
EndIf
If Recherche = 0 Or ((Caractere < "0" Or Caractere > "9") And (Caractere < "A" Or Caractere > "Z") And (Caractere < "a" Or Caractere > "z"))
Texte = Left(Texte, Recherche) + MotRemplace + Right(Texte, Len(Texte) - Recherche - Longueur)
Recherche + LongueurRemplace - Longueur
EndIf
EndIf
Recherche + 2
EndIf
Until Recherche = 0
ProcedureReturn Texte
EndProcedure
Procedure.s dobro_replace(chaine$,chaine_cherche$,chaine_remplace$)
; by Dobro
Static extrait1$,pos
If pos= Len (chaine$)
text2$=extrait1$
pos=0 :extrait1$= ""
ProcedureReturn text2$
EndIf
pos=pos+1
extrait1$=extrait1$+ Mid (chaine$,pos,1)
car_avant= Asc ( Mid (chaine$,pos-1,1)) ; le caractere avant
car_apres= Asc ( Mid (chaine$,pos+ Len (chaine_cherche$),1)) ; ) ; le caractere apres
extrait3$= Mid (chaine$,pos, Len (chaine_cherche$)) ; la chaine extraite
If extrait3$=chaine_cherche$
If (car_apres<48 Or (car_apres>57 And car_apres<65) Or (car_apres>90 And car_apres<97) Or car_apres>122 )
If pos>1
If (car_avant<48 Or (car_avant>57 And car_avant<65) Or (car_avant>90 And car_avant<97) Or car_avant>122 )
extrait1$= Left (extrait1$, Len (extrait1$)-1)
extrait1$=extrait1$+chaine_remplace$
pos=pos+ Len (chaine_cherche$)-1
EndIf
Else
extrait1$= Left (extrait1$, Len (extrait1$)-1)
extrait1$=extrait1$+chaine_remplace$
pos=pos+ Len (chaine_cherche$)-1
EndIf
EndIf
EndIf
text2$=dobro_replace(chaine$,chaine_cherche$,chaine_remplace$)
ProcedureReturn text2$
EndProcedure
ProcedureDLL.s dobro_replace2(chaine$,chaine_cherche$,chaine_remplace$)
; by Dobro
For pos=1 To Len (chaine$)
extrait1$=extrait1$+ Mid (chaine$,pos,1)
car_avant= Asc ( Mid (chaine$,pos-1,1)) ; le caractere avant
car_apres= Asc ( Mid (chaine$,pos+ Len (chaine_cherche$),1)) ; ) ; le caractere apres
extrait3$= Mid (chaine$,pos, Len (chaine_cherche$)) ; la chaine extraite
If extrait3$=chaine_cherche$
If (car_apres<48 Or (car_apres>57 And car_apres<65) Or (car_apres>90 And car_apres<97) Or car_apres>122 )
If pos>1
If (car_avant<48 Or (car_avant>57 And car_avant<65) Or (car_avant>90 And car_avant<97) Or car_avant>122 )
extrait1$= Left (extrait1$, Len (extrait1$)-1)
extrait1$=extrait1$+chaine_remplace$
pos=pos+ Len (chaine_cherche$)-1
EndIf
Else
extrait1$= Left (extrait1$, Len (extrait1$)-1)
extrait1$=extrait1$+chaine_remplace$
pos=pos+ Len (chaine_cherche$)-1
EndIf
EndIf
EndIf
Next pos
text2$=extrait1$
pos=0 :extrait1$= ""
ProcedureReturn text2$
EndProcedure
Texte.s ="Bonjour, je suis le bon bonbon contre les caries de suisse"
Temps = ElapsedMilliseconds()
For n = 1 To 50000
Texte_LSI.s = Remplace_Mot(Texte, "bon", "tres bon")
Texte_LSI = Remplace_Mot(Texte_LSI, "suis", "mange")
Next
Temps_LSI = ElapsedMilliseconds() - Temps
Temps = ElapsedMilliseconds()
For n = 1 To 50000
Texte_Dobro.s = dobro_replace(Texte, "bon", "tres bon")
Texte_Dobro = dobro_replace(Texte_Dobro, "suis", "mange")
Next
Temps_Dobro = ElapsedMilliseconds() - Temps
Temps = ElapsedMilliseconds()
For n = 1 To 50000
Texte_Dobro2.s = dobro_replace2(Texte, "bon", "tres bon")
Texte_Dobro2 = dobro_replace2(Texte_Dobro2, "suis", "mange")
Next
Temps_Dobro2 = ElapsedMilliseconds() - Temps
MessageRequester("Temps", Texte + Chr(10) + Texte_LSI + Chr(10) + "LSI = " + Str(Temps_LSI) + Chr(10) + Texte_Dobro + Chr(10) + "Dobro récursif = " + Str(Temps_Dobro) + Chr(10) + Texte_Dobro2 + Chr(10) + "Dobro non récursif = " + Str(Temps_Dobro2))
Code : Tout sélectionner
Structure MemoryArray
Byte.c[0]
EndStructure
Global Dim AllowedChar.c(255)
For i = '0' To '9'
AllowedChar(i) = 1
Next
For i = 'A' To 'Z'
AllowedChar(i) = 1
Next
For i = 'a' To 'z'
AllowedChar(i) = 1
Next
Procedure.s Remplace_Mot_Variante(Texte.s, MotCherche.s, MotRemplace.s)
Protected Recherche, LongueurCherche, LongueurRemplace
Protected *Texte.MemoryArray
Longueur = Len(MotCherche)
LongueurRemplace = Len(MotRemplace)
*Texte = @Texte
Repeat
Recherche = FindString(Texte, MotCherche, Recherche)
If Recherche
If AllowedChar(*Texte\Byte[Recherche + Longueur - 1]) = 0
If Recherche = 1 Or (AllowedChar(*Texte\Byte[Recherche - 2]) = 0)
Texte = Left(Texte, Recherche - 1) + MotRemplace + Right(Texte, Len(Texte) - Recherche - Longueur + 1)
Recherche + LongueurRemplace - Longueur
EndIf
EndIf
Recherche + 2
EndIf
Until Recherche = 0
ProcedureReturn Texte
EndProcedure
explication :
cette fonction remplace l'expression exacte par une autre
exemple :
Text$ = "aa Test_Procedure20(coucou) bb Test_Procedure205 (coucou) cc Test_Procedure20 (coucou) cc Test_Procedure20 totoProcedure20" + Chr (13)+ Chr (10)+ "(coucou)"
Debug dobro_replace(Text$, "Procedure20" , "xxx" )
Citation:
donnera :
aa Test_xxx(coucou) bb Test_Procedure205 (coucou) cc Test_xxx (coucou) cc Test_xxx totoProcedure20
(coucou)
seul le mot procedure20 a ete changé !!
cette procédure ne change pas le mot s'il est précédé ou suivi d'une lettre ou d'un chiffre , ce qui garanti la modification du mot exact seul !!
même si celui ci est précédé ou suivi d'un signe de ponctuation !!!
Code : Tout sélectionner
Bonjour, je suis le bon bonbon contre les caries de suisse
Bonjour, je mange le tres bon bonbon contre les caries de suisse
LSI = 694
Bonjour, je mange le tres bon bonbon contre les caries de suisse
Dobro récursif = 22205
Bonjour, je mange le tres bon bonbon contre les caries de suisse
Dobro non récursif = 7839
Bonjour, je mange le tres bon bonbon contre les caries de suisse
Gnozal = 536
Code : Tout sélectionner
Procedure.s Remplace_Mot(Texte.s, MotCherche.s, MotRemplace.s)
Protected Recherche, LongueurCherche, LongueurRemplace, Caractere.s
Longueur = Len(MotCherche)
LongueurRemplace = Len(MotRemplace)
Repeat
Recherche = FindString(Texte, MotCherche, Recherche)
If Recherche > 0
Caractere = Mid(Texte, Recherche + Longueur, 1)
Recherche - 1
If (Caractere < "0" Or Caractere > "9") And (Caractere < "A" Or Caractere > "Z") And (Caractere < "a" Or Caractere > "z")
If Recherche > 0
Caractere = Mid(Texte, Recherche, 1)
EndIf
If Recherche = 0 Or ((Caractere < "0" Or Caractere > "9") And (Caractere < "A" Or Caractere > "Z") And (Caractere < "a" Or Caractere > "z"))
Texte = Left(Texte, Recherche) + MotRemplace + Right(Texte, Len(Texte) - Recherche - Longueur)
Recherche + LongueurRemplace - Longueur
EndIf
EndIf
Recherche + 2
EndIf
Until Recherche = 0
ProcedureReturn Texte
EndProcedure
Procedure.s dobro_replace(chaine$,chaine_cherche$,chaine_remplace$)
; by Dobro
Static extrait1$,pos
If pos= Len (chaine$)
text2$=extrait1$
pos=0 :extrait1$= ""
ProcedureReturn text2$
EndIf
pos=pos+1
extrait1$=extrait1$+ Mid (chaine$,pos,1)
car_avant= Asc ( Mid (chaine$,pos-1,1)) ; le caractere avant
car_apres= Asc ( Mid (chaine$,pos+ Len (chaine_cherche$),1)) ; ) ; le caractere apres
extrait3$= Mid (chaine$,pos, Len (chaine_cherche$)) ; la chaine extraite
If extrait3$=chaine_cherche$
If (car_apres<48 Or (car_apres>57 And car_apres<65) Or (car_apres>90 And car_apres<97) Or car_apres>122 )
If pos>1
If (car_avant<48 Or (car_avant>57 And car_avant<65) Or (car_avant>90 And car_avant<97) Or car_avant>122 )
extrait1$= Left (extrait1$, Len (extrait1$)-1)
extrait1$=extrait1$+chaine_remplace$
pos=pos+ Len (chaine_cherche$)-1
EndIf
Else
extrait1$= Left (extrait1$, Len (extrait1$)-1)
extrait1$=extrait1$+chaine_remplace$
pos=pos+ Len (chaine_cherche$)-1
EndIf
EndIf
EndIf
text2$=dobro_replace(chaine$,chaine_cherche$,chaine_remplace$)
ProcedureReturn text2$
EndProcedure
ProcedureDLL.s dobro_replace2(chaine$,chaine_cherche$,chaine_remplace$)
; by Dobro
For pos=1 To Len (chaine$)
extrait1$=extrait1$+ Mid (chaine$,pos,1)
car_avant= Asc ( Mid (chaine$,pos-1,1)) ; le caractere avant
car_apres= Asc ( Mid (chaine$,pos+ Len (chaine_cherche$),1)) ; ) ; le caractere apres
extrait3$= Mid (chaine$,pos, Len (chaine_cherche$)) ; la chaine extraite
If extrait3$=chaine_cherche$
If (car_apres<48 Or (car_apres>57 And car_apres<65) Or (car_apres>90 And car_apres<97) Or car_apres>122 )
If pos>1
If (car_avant<48 Or (car_avant>57 And car_avant<65) Or (car_avant>90 And car_avant<97) Or car_avant>122 )
extrait1$= Left (extrait1$, Len (extrait1$)-1)
extrait1$=extrait1$+chaine_remplace$
pos=pos+ Len (chaine_cherche$)-1
EndIf
Else
extrait1$= Left (extrait1$, Len (extrait1$)-1)
extrait1$=extrait1$+chaine_remplace$
pos=pos+ Len (chaine_cherche$)-1
EndIf
EndIf
EndIf
Next pos
text2$=extrait1$
pos=0 :extrait1$= ""
ProcedureReturn text2$
EndProcedure
Structure MemoryArray
Byte.c[0]
EndStructure
Global Dim AllowedChar.c(255)
For i = '0' To '9'
AllowedChar(i) = 1
Next
For i = 'A' To 'Z'
AllowedChar(i) = 1
Next
For i = 'a' To 'z'
AllowedChar(i) = 1
Next
Procedure.s Remplace_Mot_Variante(Texte.s, MotCherche.s, MotRemplace.s)
Protected Recherche, LongueurCherche, LongueurRemplace
Protected *Texte.MemoryArray
Longueur = Len(MotCherche)
LongueurRemplace = Len(MotRemplace)
*Texte = @Texte
Repeat
Recherche = FindString(Texte, MotCherche, Recherche)
If Recherche
If AllowedChar(*Texte\Byte[Recherche + Longueur - 1]) = 0
If Recherche = 1 Or (AllowedChar(*Texte\Byte[Recherche - 2]) = 0)
Texte = Left(Texte, Recherche - 1) + MotRemplace + Right(Texte, Len(Texte) - Recherche - Longueur + 1)
Recherche + LongueurRemplace - Longueur
EndIf
EndIf
Recherche + 2
EndIf
Until Recherche = 0
ProcedureReturn Texte
EndProcedure
Texte.s ="Bonjour, je suis le bon bonbon contre les caries de suisse"
Temps = ElapsedMilliseconds()
For n = 1 To 50000
Texte_LSI.s = Remplace_Mot(Texte, "bon", "tres bon")
Texte_LSI = Remplace_Mot(Texte_LSI, "suis", "mange")
Next
Temps_LSI = ElapsedMilliseconds() - Temps
Temps = ElapsedMilliseconds()
For n = 1 To 50000
Texte_Dobro.s = dobro_replace(Texte, "bon", "tres bon")
Texte_Dobro = dobro_replace(Texte_Dobro, "suis", "mange")
Next
Temps_Dobro = ElapsedMilliseconds() - Temps
Temps = ElapsedMilliseconds()
For n = 1 To 50000
Texte_Dobro2.s = dobro_replace2(Texte, "bon", "tres bon")
Texte_Dobro2 = dobro_replace2(Texte_Dobro2, "suis", "mange")
Next
Temps_Dobro2 = ElapsedMilliseconds() - Temps
Temps = ElapsedMilliseconds()
For n = 1 To 50000
Texte_Gnozal.s = Remplace_Mot_Variante(Texte, "bon", "tres bon")
Texte_Gnozal = Remplace_Mot_Variante(Texte_Gnozal, "suis", "mange")
Next
Temps_Gnozal = ElapsedMilliseconds() - Temps
MessageRequester("Temps", Texte + Chr(10) + Texte_LSI + Chr(10) + "LSI = " + Str(Temps_LSI) + Chr(10) + Texte_Dobro + Chr(10) + "Dobro récursif = " + Str(Temps_Dobro) + Chr(10) + Texte_Dobro2 + Chr(10) + "Dobro non récursif = " + Str(Temps_Dobro2) + Chr(10) + Texte_Gnozal + Chr(10) + "Gnozal = " + Str(Temps_Gnozal))