Page 1 sur 1

ForEachField

Publié : sam. 09/févr./2008 10:05
par Droopy
J'en avais besoin, désolé si ça a déjà été publié

Code : Tout sélectionner

Procedure ForEachField(String.s,Delimiter.s,*Function)
  Index=1
  While StringField(String,Index,Delimiter)<>""
    CallFunctionFast(*Function,StringField(String,Index,Delimiter))
    Index+1
  Wend
EndProcedure  

;{/ Example

Chaine.s="1,2,3"

Procedure Affiche(Chaine.s)
  PrintN(Chaine)
EndProcedure

OpenConsole()
ConsoleTitle("ForEachField")
ForEachField(Chaine,",",@Affiche())
Input()

;}

Publié : sam. 09/févr./2008 12:18
par Ar-S
Salut Droopy, tu peux m'expliquer à quoi ça sert exactement ?
parce que l'affichage des 1 2 3.. c'est pas très explicite (et surtout je suis encore une belle quiche)

Publié : sam. 09/févr./2008 13:38
par Chris
Ben sans avoir testé le code, ça doit afficher chaque champs d'une chaine délimitée par des virgules.

Ca peut servir à récupérer les données d'un fichiers .csv, par exemple.

Pas bête, comme code.

Publié : sam. 09/févr./2008 13:47
par Ar-S
Ah okokok, superbe :)

Publié : sam. 09/févr./2008 13:50
par Droopy
tout a fait thierry, ça peut servir à traiter chaque ligne d'un fichier csv :wink:

Publié : dim. 17/févr./2008 14:35
par lionel_om
Y'a un petit bug.
La boucle While n'est pas très adpatée (sauf si c'ets vraiment ce que tu as voulu faire) :

Code : Tout sélectionner

Procedure ForEachField(String.s,Delimiter.s,*Function)
  Nb = CountString(String,Delimiter) + 1
  For i = 1 To Nb
    CallFunctionFast(*Function,StringField(String,i,Delimiter))
  Next i
EndProcedure 

;{/ Example

Chaine.s="1,2,,3"

Procedure Affiche(Chaine.s)
  PrintN(Chaine)
EndProcedure

OpenConsole()
ConsoleTitle("ForEachField")
ForEachField(Chaine,",",@Affiche())
Input()

;}

Publié : dim. 17/févr./2008 15:05
par Backup
Chris a écrit :Ben sans avoir testé le code, ça doit afficher chaque champs d'une chaine délimitée par des virgules.

Ca peut servir à récupérer les données d'un fichiers .csv, par exemple.

Pas bête, comme code.
tu veux dire comme

Code : Tout sélectionner

Resultat$ = StringField(Chaine$, Index, ",")
???? 8O

Publié : dim. 17/févr./2008 17:02
par Droopy
bien vu Lionel :wink:

Publié : dim. 17/févr./2008 17:03
par Chris
Dobro a écrit :
Chris a écrit :Ben sans avoir testé le code, ça doit afficher chaque champs d'une chaine délimitée par des virgules.

Ca peut servir à récupérer les données d'un fichiers .csv, par exemple.

Pas bête, comme code.
tu veux dire comme

Code : Tout sélectionner

Resultat$ = StringField(Chaine$, Index, ",")
???? 8O
Oui, sauf que la fonction (enfin, si j'ai bien compris, vu que je l'ai pas encore testée), te renvoie le contenu de la totalité des champs en un seul appel.

Publié : dim. 17/févr./2008 22:34
par Droopy
Oui, sauf que la fonction te renvoie le contenu de la totalité des champs en un seul appel.
Non elle traite chaque champ avec la fonction appelée