voila j'ai crée sa et j'aimerais votre avis et votre aide pour l'améliorer encore
Code : Tout sélectionner
;{ crée par Mr Dieppedalle David le mardi 6 juillet 2010
; cette commande sert a rechercher ce que l'ont veut et d'où l'on veut
; celle-ci est assez souple puisqu'elle permet par exemple de rechercher a partir
; du début ou de la fin de la chaine, elle permet entre autre de préciser la longueur
; de la recherche en précisant la position de recherche de départ et celle de la fin
; il est de même possible de préciser si la case est conserver ou non
; et pour finir de préciser si l'ont veut chercher un mot uniquement
; Chaine$ = la chaine dans la quel doit chercher le programme
; ChaineChercher$ = ce que doit chercher la commande
; PositionDepart = la position de départ de la recherche:
; si le nombre entrée est inférieur a -1
; alors -1 sera envoyer a la commande
; de même que si le nombre est supérieur a la longueur de la chaine
; alors longueur de la chaine sera envoyer a la commande
; -1 signifie rechercher a partir de la fin de la chaine
; PositionFin = la position d'arrêt de la recherche, cella veut dire que
; une fois que la commande arrivera a cette position, elle arrêtera la recherche:
; si le nombre entrée est inférieur a -1
; alors -1 sera envoyer a la commande
; de même que si le nombre est supérieur a la longueur de la chaine
; alors longueur de la chaine sera envoyer a la commande
; -1 signifie rechercher dans la totalité de la chaine
; MotEntierSeullement = le mode de la recherche
; si ce mode est inférieur à 0, alors 0 sera retourner a la commande
; sinon si le mode est supérieur à 1, alors 1 sera retourner a la commande
; sinon si le mode est égale à 1, alors le mode "mot entier seullement" sera activé
; ce mode permet de rechercher uniquement les termes qui forment un mot
; les termes qui contiennent le mot recherché ne seront pas retenus
; par exemple si vous rechercher "anti" et que il y a par exemple "antitrust"
; la commande retournera 0 car "anti" n'aura pas été trouvé en tans que mot entier
; cette commande (LimitedFindString) peut être très utile par exemple pour
; rechercher du texte dans un fichier texte par exemple
;}
; le programme:
Procedure.l LimitedFindString(Chaine$, ChaineChercher$, PositionDepart, PositionFin, ModeCase, MotEntierSeullement)
LongueurChaine = Len(chaine$)
If ModeCase <= 0
ModeCase = 0
Chaine$ = LCase(Chaine$)
ChaineChercher$ = LCase(ChaineChercher$)
ElseIf ModeCase >= 1
ModeCase = 1
EndIf
PositionFin - 1
If MotEntierSeullement < 0
MotEntierSeullement = 0
ElseIf MotEntierSeullement > 1
MotEntierSeullement > 0
EndIf
If PositionDepart = 0
; la position de depart de recherche 0 n'éxiste pas donc ont la remet a 1
PositionDepart = 1
EndIf
If PositionDepart > LongueurChaine
; la position de depart de recherche 0 n'éxiste pas donc ont la remet a 1
PositionDepart = LongueurChaine + 1
EndIf
If PositionDepart <= -1
; si la position de depart est inférieur ou égale à -1, cella veut dire
; que l'ont commence la recherche a partir de la fin de la chaine
PositionDepart = LongueurChaine
EndIf
If PositionFin = 0
; la position d'arriver de recherche 0 n'éxiste pas donc ont la remet a 1
PositionFin = 1
EndIf
If PositionFin > LongueurChaine
; la position d'arriver de recherche 0 n'éxiste pas donc ont la remet a 1
If PositionDepart = LongueurChaine
PositionFin = 1
Else
PositionFin = LongueurChaine + 1
EndIf
EndIf
If PositionFin <= -1
; si la position de fin est inférieur ou égale à -1, cella veut dire
; que l'ont arrêtte la recherche une fois la fin de la chaine trouvé
If PositionDepart = LongueurChaine
PositionFin = 1
Else
PositionFin = LongueurChaine + 1
EndIf
EndIf
If PositionDepart = LongueurChaine And PositionFin = 1
PositionFin = LongueurChaine - 1
EndIf
If PositionDepart > PositionFin
; cella veut dire que la recherche s'éfféctue de droite à gauche
PositionExtraction = LongueurChaine
While PositionExtraction <> LongueurChaine - PositionFin
ExtractionCaractere$ = Mid(Chaine$, PositionExtraction, 1)
If ExtractionChaine$ = ""
ExtractionChaine$ = " "
EndIf
ExtractionChaine$ = InsertString(ExtractionChaine$, ExtractionCaractere$, 1)
If FindString(ExtractionChaine$, ChaineChercher$, 1)
Extraction = LongueurChaine - PositionExtraction + 2
If MotEntierSeullement = 1
Extraction = PositionExtraction
DebutChaine = PositionExtraction
Repeat
caracteres$ = Mid(Chaine$, Extraction, 1)
If caracteres$ <> " " And caracteres$ <> Chr(9)
Extraction + 1
Continue
Else
FinChaine = Extraction
If Mid(Chaine$, DebutChaine, FinChaine - DebutChaine) = ChaineChercher$
ProcedureReturn LongueurChaine - PositionExtraction + 2
Else
ProcedureReturn 0
EndIf
EndIf
ForEver
Else
ProcedureReturn LongueurChaine - PositionExtraction + 2
EndIf
Else
PositionExtraction - 1
EndIf
Wend
ElseIf PositionFin > PositionDepart
; cella veut dire que la recherche s'éfféctue de gauche à droite
PositionExtraction = PositionDepart
While PositionExtraction <> PositionFin
ExtractionCaractere$ = Mid(Chaine$, PositionExtraction, 1)
ExtractionChaine$ + ExtractionCaractere$
If FindString(ExtractionChaine$, ChaineChercher$, 1)
PositionExtraction = FindString(ExtractionChaine$, ChaineChercher$, 1)
If MotEntierSeullement = 1
Extraction = PositionExtraction
DebutChaine = PositionExtraction
Repeat
caracteres$ = Mid(Chaine$, Extraction, 1)
If caracteres$ <> " " And caracteres$ <> Chr(9)
Extraction + 1
Continue
Else
FinChaine = Extraction
If Mid(Chaine$, DebutChaine, FinChaine - DebutChaine) = ChaineChercher$
ProcedureReturn PositionExtraction = FindString(ExtractionChaine$, ChaineChercher$, 1)
Else
ProcedureReturn 0
EndIf
EndIf
ForEver
Else
ProcedureReturn PositionExtraction
EndIf
Else
PositionExtraction + 1
EndIf
Wend
Else
EndIf
EndProcedure
; exemple:
recherche = LimitedFindString("il étais une fois un petit garçon qui étais vraiment tout petit", "tout", -1, -1, 0, 0)
Debug recherche
par contre j'ai essayer divers chose dons certaine qui n'ont pas fonctionné comme
je l'aurais voulue donc je les ais enlever et puis j'en est r'ajouté d'autre
c'est déja asser complet mais pas très optimiser je supose mais sa marche, c'est le principale non ?
j'aimerais bien r'ajouté une fonction pour que quand il rencontre une chaine de caractères
qu'il l'igniore si le paramètre est a 1, et une pour igniorer les commantaires
évidement, il faut que l'ont puisse aussie choisir le caractère qui defini une chaine
et le caractère qui définie le commantaire, voila voila a plus
