Extraire un ou plusieurs Mot (conditionnel)
Publié : mar. 03/mai/2011 12:55
Salut a tous, je vous propose un petit code non optimiser pour extraire
un ou plusieurs mots suivent les divers paramètre conditionnel
dite-moi ce que vous en pensez, je pense que c’est loin d’être optimiser
mais c’est je pense mieux que rien
Je vous propose égallement une procedure pour extraire seullement le premier mot
un ou plusieurs mots suivent les divers paramètre conditionnel
dite-moi ce que vous en pensez, je pense que c’est loin d’être optimiser
mais c’est je pense mieux que rien
Code : Tout sélectionner
Procedure.s ExtraireMot(Chaine$, PositionDepart = 1, CaractereDepart$ = "", ModPosExtCarDep = 0, Positionfin = 0, CaractereFin$ = "", ModPosExtCarFin = 0, RespecterCase = 0, TerSiNomCar = -1, TerSiNomMot = -1, TerSiNomCarIde = -1, CarIde$ = "")
; bien, comment sa marche ?!:
; Chaine$ est la chaine de caractère
; PositionDepart est position de recherche de départ (igniorer si CaractereDepart$ est > "")
; CaractereDepart$, définie la position de départ automatiquement en recherchent les caractères CaractereDepart$
; ModPosExtCarDep est un ajustement de la position de départ d'éxtraction
; par exemple si CaractereDepart$ = [ et bien ce caractère sera pris en compte dans cette recherche car
; ont commence l'éxtraction a partir de ce cacartère la, mais grace a cette variable ModPosExtCarDep
; ont peut ajuster la position d'éxtraction de départ, exemple: '1' = + 1, '-1' = -1, etc.
; Positionfin est pareil que pour PositionDepart, sauf que la des qu'on atteint cette position, on stop l'éxtraction (igniorer si CaractereFin$ est > "")
; CaractereFin$ est pareil que pour CaractereDepart$ a la différence que ici ont définie la position de fin automatiquement en recherchent les caractères CaractereFin$
; ModPosExtCarFin est pareil que ModPosExtCarDep sauf que ici ont ajuste la position de fin d'extraction
; RespecterCase est pour réspécter la case, recherchera éxactement les caractères donner dans la chaine, 0 = prend pas en compte la case, 1 = prend en compte la case
; TerSiNomMot est pour détèrminer l'extraction a partire du momment ou ont as éxtrait le nombre de mots voulue, ce paramètre prends parfois le dessue sur:
; Positionfin, CaractereFin$, ModPosExtCarFin
; prend le dessue si: Positionfin et CaractereFin$ n'ont pas été atteint et trouvé
; TerSiNomCar est pour détèrminer l'extraction a partire du momment ou ont as éxtrait le nombre de caractere voulue, ce paramètre prends parfois le dessue sur:
; Positionfin, CaractereFin$, ModPosExtCarFin, TerSiNomMot
; prend le dessue si: Positionfin et CaractereFin$ n'ont pas été atteint et trouvé et si TerSiNomMot n'as pas été atteind
; TerSiNomCarIde est pour stoper l'extraction quand le nombre de caractère identique a atteind un certain nombre, ce paramètre commence a partire de 2
; a utiliser conjointement avec Caractere$ qui définie le caractère en question
; si ses paramètre sont corecte alors ModPosExtCarDep et ModPosExtCarFin seron mis automatiquement à 0
; d'ailleur il est égallement a noté que le dernier caractère identique ne sera pas pris en compte dans la chaine
ChaineSauvagarde$ = Chaine$
If TerSiNomCar < -1
TerSiNomCar = -1 ; = extrait tous les caracteres
ElseIf TerSiNomCar = 0
TerSiNomCar = -1
EndIf
If TerSiNomMot < -1
TerSiNomMot = -1 ; = extrait tous les mots
ElseIf TerSiNomMot = 0
TerSiNomMot = -1
EndIf
If TerSiNomCarIde < -1
TerSiNomCarIde = -1 ; = extrait tous les mots
ElseIf TerSiNomCarIde = 0
TerSiNomCarIde = -1
ElseIf TerSiNomCarIde = 1
TerSiNomCarIde = -1
EndIf
If TerSiNomCarIde > CountString(Chaine$, CarIde$)
TerSiNomCarIde = CountString(Chaine$, CarIde$)
EndIf
If TerSiNomCarIde > 1 And CarIde$ > ""
ModPosExtCarDep = 0
ModPosExtCarFin = 0
EndIf
If PositionDepart = -1 Or PositionDepart > Len(Chaine$)
PositionDepart = Len(Chaine$)
ElseIf PositionDepart < -1
PositionDepart = -1
ElseIf PositionDepart = 0
PositionDepart = 1
EndIf
If Positionfin = -1 Or Positionfin > Len(Chaine$)
Positionfin = Len(Chaine$)
ElseIf Positionfin < -1
Positionfin = -1
EndIf
If RespecterCase <= 0
RespecterCase = 0
ElseIf RespecterCase > 1
RespecterCase = 1
EndIf
If RespecterCase = 0 ; on ne respecte pas la case, 1 on respecte la case
Chaine$ = LCase(Chaine$)
CaractereDepart$ = LCase(CaractereDepart$)
CaractereFin$ = LCase(CaractereFin$)
EndIf
If CaractereDepart$ > ""
PositionDepart = FindString(Chaine$, CaractereDepart$, 1)
If PositionDepart > 0
PositionDepart - 1
ElseIf PositionDepart = 0
ProcedureReturn ""
EndIf
EndIf
If CaractereFin$ > ""
Chaine$ = Mid(ChaineSauvagarde$, 1)
Positionfin = FindString(Chaine$, CaractereFin$, 1)
If Positionfin > 0
Positionfin + Len(CaractereFin$)
ElseIf Positionfin = 0
Positionfin = Len(Chaine$)
EndIf
EndIf
PositionDepart + ModPosExtCarDep
Positionfin + ModPosExtCarFin
PositionExtraction = PositionDepart - 1
Chaine$ = ChaineSauvagarde$
Repeat
Repeat
PositionExtraction + 1
caractere$ = Mid(Chaine$, PositionExtraction, 1)
BufferCarIde$ = Mid(Chaine$, PositionExtraction, Len(CarIde$))
If CarIde$ > "" And BufferCarIde$ = CarIde$
CaractereIdentique + 1
EndIf
If TerSiNomCarIde > 0 And CaractereIdentique = TerSiNomCarIde
Terminer = 1
EndIf
If TerSiNomCar <> -1 And TerSiNomCar = nombre_de_caractere
Break
EndIf
If NombreMot <> -1 And NombreMot = TerSiNomMot
Terminer = 1
EndIf
If Positionfin <> 0
If PositionExtraction => Positionfin
Break
EndIf
EndIf
If caractere$ = " " And Mot$ = ""
nombre_de_caractere + 1
Continue
ElseIf caractere$ <> "" And caractere$ <> " "
Mot$ = Mot$ + caractere$ ; ont enregistre le caractère
nombre_de_caractere + 1
Continue
ElseIf caractere$ = " " And Mot$ > " "
nombre_de_caractere + 1
Break ; ont quitte la boucle car l'éxtraction du Mot$ clée est tèrminer
ElseIf caractere$ = "" And Mot$ > " "
nombre_de_caractere + 1
Break ; ont quitte aussie la boucle car l'éxtraction du Mot$ clée est tèrminer
ElseIf caractere$ = "" And Mot$ = ""
Break ; ont quitte la boucle car ya rien
EndIf
ForEver
If Mot$ > ""
ChaineMot$ + Mot$ + "|"
NombreMot + 1
Mot$ = ""
EndIf
If Terminer = 1
ChaineMot$ = Mid(ChaineMot$, 1, Len(ChaineMot$) - 2)
ChaineMot$ + "|"
Break
EndIf
Until PositionExtraction => Len(Chaine$)
ProcedureReturn ChaineMot$
EndProcedure
Debug ExtraireMot(" Le: tigre: à: [L'éléphant est gris] rouge ", 0, "", 0, 0, "", 0, 0, 0, 0, 2, ":")Code : Tout sélectionner
Procedure.s ExtrairePremierMot(Chaine$)
Repeat
PositionExtraction + 1
caractere$ = Mid(Chaine$, PositionExtraction, 1)
If caractere$ = " " And Mot$ = ""
nombre_de_caractere + 1
Continue
ElseIf caractere$ <> "" And caractere$ <> " "
Mot$ = Mot$ + caractere$ ; ont enregistre le caractère
nombre_de_caractere + 1
Continue
ElseIf caractere$ = " " And Mot$ > " "
nombre_de_caractere + 1
Break ; ont quitte la boucle car l'éxtraction du Mot$ clée est tèrminer
ElseIf caractere$ = "" And Mot$ > " "
nombre_de_caractere + 1
Break ; ont quitte aussie la boucle car l'éxtraction du Mot$ clée est tèrminer
ElseIf caractere$ = "" And Mot$ = ""
Break ; ont quitte la boucle car ya rien
EndIf
ForEver
ProcedureReturn Mot$
EndProcedure
Debug ExtrairePremierMot(" Le tigre rouge ")