Donc voici un code qui permet de récupérer des champs en ayant des séparateurs de plusieurs caractères.
J'avais le possibilité de faire une seule et unique procédure claire et nette. Seulement, j'ai préféré la vitesse de calcul au confort du simplissime.
Pour procéder:
1) Définir la structure avec Define
2) Initialiser la recherche avec FieldSetting()
Arg1 Pointeur de structure
Arg2 Chaîne à explorer
Arg3 Position initiale (0)
Arg4 Chaîne de séparation
3) Effectuer la recherche avec NextField()
>> L'argument est le pointeur de la structure STRINGFIELDEX
Code : Tout sélectionner
Structure STRINGFIELDEX
String.S
Separator.S
SepLength.L
Cursor.L
EndStructure
Procedure.S NextField(*Ptr.STRINGFIELDEX)
Protected Result.S
Protected i.L
Protected OldCursor.L
OldCursor = *Ptr\Cursor
*Ptr\Cursor = FindString(*Ptr\String, *Ptr\Separator, *Ptr\Cursor + 1)
If OldCursor = 0
Result = Mid(*Ptr\String, 1, *Ptr\Cursor - 1)
Else
Result = Mid(*Ptr\String, OldCursor + *Ptr\SepLength, *Ptr\Cursor - OldCursor - *Ptr\SepLength)
EndIf
ProcedureReturn Result
EndProcedure
Procedure FieldSetting(*Ptr.STRINGFIELDEX, String.S, Cursor, Separator.S)
*Ptr\String = String
*Ptr\Cursor = Cursor
*Ptr\Separator = Separator
*Ptr\SepLength = Len(*Ptr\Separator)
EndProcedure
;*************************
;- Un petit exemple...
;*************************
Define SFE.STRINGFIELDEX ; (1)
Define x.S
x.s = "gtabonjourgtaau revoirgtaah bon?gta"
FieldSetting(SFE, x, 0, "gta") ; (2)
For i = 1 To 6
Debug "«" + NextField(SFE) + "»" ; (3)
Next i