
Je sais, je sais tout le monde se dit, si KCC y sait encore pas faire un "FindString" on est pas sorti des haricots

Et bah figurez vous que ça fait "seulement" deux heures que je tourne en rond et que je trouve pas.
Je voudrais faire un "MegaStringField", parce que natif est un peu court

J'aimerais en faire un qui aurait toutes ces fonctions que l'original n'a pas bien sur :
1/ Possibilité de mettre plusieurs caracteres separateurs
2/ Possibilité de mettre plusieurs separateurs de plusieurs caracteres
3/ Possibilité de retourner soit la valeur du champ comme le natif, mais aussi l'emplacement de ce dernier
Et c'est surtout sur la 3e fonction que je merdoie

J'arrive pas à faire remonter cette position de ¤$£ùù%*#=+ dans le cas ou bien sur il y a plusieurs champs identiques.
Car quand on fait un FindString on a le champ, mais comment retourner sa position a coup sur

On voit bien que dans mon exemple, que le champ LL est deux fois placé, et je n'arrive pas a avoir les deux positions (Normal dans les deux cas j'ai la derniere position, puisque la boucle en 34/37 me la donne, et si je l'enleve bah j'ai 2 fois la premiere position)
J'ai eu l'idée, de remplacer tous les separateurs par un unique, pour la facilité de comptage des champs, mais j'suis pas sur que ce soit la bonne methode

Si quinquin y connait une meilleure methode, ou peut modifier l'espece de pierre brute que j'ai extirpé de la terre boueuse, pour le tailler et en faire un diamant de 120 carats qu'on peux fourguer direct chez cartier,........... j'suis preneur ......et on partage

Code : Tout sélectionner
#Field_Valeur = 1
#Field_Position = 2
ProcedureDLL.s KCC_StringField(Phrase.s, Position, Separateurs.s, TypeRetour = 1) ; TypeRetour = #Field_Valeur / #Field_Position
; Decoupe des separateurs
Dim TabloSeparateur.s(100)
For NbreSeparateurs = 1 To CountString(Separateurs, "|") + 1
TabloSeparateur(NbreSeparateurs) = StringField(Separateurs, NbreSeparateurs, "|")
Next
; Tri du tableau afin de commencer par le separateur qui contient le plus de caracteres
SortArray(TabloSeparateur(), #PB_Sort_Descending)
; Remplacement des divers separateurs par un separateur unique
Temp$ = Phrase
For i = 0 To NbreSeparateurs
Temp$ = ReplaceString(Temp$, TabloSeparateur(i), "@")
Next
; Retrait du premier caractere pour eviter le decalage des champs de 1
If Left(Temp$, 1) = "@"
Temp$ = Mid(Temp$, 2)
EndIf
; Recuperateur du champ désiré
Champ$ = StringField(Temp$, Position, "@")
; Recherche du bon champs au cas ou il y en aurait plusieurs du meme nom
PositionChamp = 0
Repeat
DernierePosition = PositionChamp
PositionChamp = FindString(Phrase, Champ$, PositionChamp + 1)
Until Not PositionChamp
Select TypeRetour
Case #Field_Valeur
ProcedureReturn Champ$
Case #Field_Position
ProcedureReturn Str(DernierePosition)
EndSelect
EndProcedure
For i = 1 To 15
Debug KCC_StringField("[NL]Bal[LL][CR]Pro[LL]E:\MES DOCUMENTS\Dll et Modules[LL]Pro[Bien]Manger", i, "[|][|]",#Field_Valeur)
Debug KCC_StringField("[NL]Bal[LL][CR]Pro[LL]E:\MES DOCUMENTS\Dll et Modules[LL]Pro[Bien]Manger", i, "[|][|]",#Field_Position)
Debug ""
Next
Bonne journée et bon "Semaine fin" (Restont français
