ForEachField

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

ForEachField

Message 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()

;}
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Message 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)
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message 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.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

Ah okokok, superbe :)
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message par Droopy »

tout a fait thierry, ça peut servir à traiter chaque ligne d'un fichier csv :wink:
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message 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()

;}
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message 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
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message par Droopy »

bien vu Lionel :wink:
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message 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.
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message 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
Répondre