Forum Liberty Basic France

Le 04/03/2011 à 17h54

Administrateur

Groupe: Administrateur

Inscrit le: 24/09/2010
Messages: 238
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 :
 
''''''''''''''''''''''''''''''''''
'        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

____________________

MSN Yahoo Web    

 |  |

1 Utilisateur en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne : Aucun membre connecté
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie