Forum Liberty Basic France
• Index
Bonjour,
J'ai tenté de recréer la fonction 'explode' de PHP. Le code est fonctionnel, mais ça ressemble à mon goût plus à du bricolage qu'à autre chose, je n'aime pas trop mon GOSUB dans la WHILE, mais je n'entrevois aucun autre moyen.
Donc pour s'en servir : call explode$ string NomDeLaChaine$, string Separateur$
Le résultat est donné sous forme d'un tableau nommé parametre$(x).
Je vais vous expliquer l'utilité du GOSUB. En fait il faut que le tableau puisse s'adapter au nombre d'entrées qu'il aura. J'ai donc utilisé REDIM. Mais REDIM efface toutes les entrées qu'il y avait. Je dois donc "reparser" l'intégralité de la chaîne, donc sortir de la WHILE et y re-rentrer.
Je vous laisse examiner le code :P
Code VB :
Et le code de test :
Code VB :
J'ai tenté de recréer la fonction 'explode' de PHP. Le code est fonctionnel, mais ça ressemble à mon goût plus à du bricolage qu'à autre chose, je n'aime pas trop mon GOSUB dans la WHILE, mais je n'entrevois aucun autre moyen.
Donc pour s'en servir : call explode$ string NomDeLaChaine$, string Separateur$
Le résultat est donné sous forme d'un tableau nommé parametre$(x).
Je vais vous expliquer l'utilité du GOSUB. En fait il faut que le tableau puisse s'adapter au nombre d'entrées qu'il aura. J'ai donc utilisé REDIM. Mais REDIM efface toutes les entrées qu'il y avait. Je dois donc "reparser" l'intégralité de la chaîne, donc sortir de la WHILE et y re-rentrer.
Je vous laisse examiner le code :P
Code VB :
'''''''''''''''''''''''''''''''''' ' Fonction explode ' ' Crée par Nephthys - 2011 ' ' Public domain ' '''''''''''''''''''''''''''''''''' sub explode$ chaineSansSigne$, modifier$ GLOBAL tailletab tailletab=10 dim parametre$(tailletab) chaineSansSigne$=trim$(chaineSansSigne$;modifier$;"foo") chaineO$=chaineSansSigne$ [loop] iP=0 while instr(chaineSansSigne$, modifier$)<>0 if iP=tailletab then tailletab=tailletab+10 'Je rajoute par 10 et non 1 par 1 sinon ça ferait ramer le programme. 'Faites le test en faisant une 20ene de c/c de a$ et en changant le 10 par un 1 chaineSansSigne$=chaineO$ redim parametre$(tailletab) gosub [loop] end if a=instr(chaineSansSigne$, modifier$) b$=trim$(left$(chaineSansSigne$,a-1)) c=len(b$)+1 totallen=len(chaineSansSigne$) d$=right$(chaineSansSigne$,totallen-c) e$=trim$(d$) parametre$(iP)=b$ chaineSansSigne$=e$ iP=iP+1 wend end sub
Et le code de test :
Code VB :
a$=" test1-test2-test3&test4&test5&test6&test7&test8&test9&test10&test11&test12&test13" call explode$ a$, "&" while i<tailletab if parametre$(i)<>"" then print i;")";parametre$(i) end if i=i+1 wend '''''''''''''''''''''''''''''''''' ' Fonction explode ' ' Crée par Nephthys - 2011 ' ' Public domain ' '''''''''''''''''''''''''''''''''' sub explode$ chaineSansSigne$, modifier$ GLOBAL tailletab tailletab=10 dim parametre$(tailletab) chaineSansSigne$=trim$(chaineSansSigne$;modifier$;"foo") chaineO$=chaineSansSigne$ [loop] iP=0 while instr(chaineSansSigne$, modifier$)<>0 if iP=tailletab then tailletab=tailletab+10 'Je rajoute par 10 et non 1 par 1 sinon ça ferait ramer le programme. 'Faites le test en faisant une 20ene de c/c de a$ et en changant le 10 par un 1 chaineSansSigne$=chaineO$ redim parametre$(tailletab) gosub [loop] end if a=instr(chaineSansSigne$, modifier$) b$=trim$(left$(chaineSansSigne$,a-1)) c=len(b$)+1 totallen=len(chaineSansSigne$) d$=right$(chaineSansSigne$,totallen-c) e$=trim$(d$) parametre$(iP)=b$ chaineSansSigne$=e$ iP=iP+1 wend end sub
• Index
1 Utilisateur en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne : Aucun membre connecté
Utilisateur en ligne : Aucun membre connecté
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie