Forum Liberty Basic France
• Index
J'ai reprogrammé les fonctions PHP en LB, j'espère que ça vous plaira et que ça vous sera utile
Il y a au dessus de chaque fonction un 'petit programme' de démonstration.
Code VB :

Code VB :
'Created by William N. Havard aka Nephthys 'Distributed under the CC BY-NA 3.0 licence (http://creativecommons.org/licenses/by-sa/3.0/) let true = 1 let false = 0 '//Vérifie que la variable contient quelque chose 'notice empty(test$) 'if empty(test$) then ' notice "Variable vide" 'else ' notice "Variable pleine" 'end if function empty(string$) if (string$="NULL") or (string$="")then empty=1 else empty=0 end if end function '//Récupère la chaine située après (0) ou avant (1) needle 'test$="USER@EXAMPLE.com" 'print strstr$(test$, "E", 0) function strstr$(string$, needle$, val) lenString=len(string$) posFirstOcc=instr(string$, needle$) if val=0 then strstr$=right$(string$, lenString-posFirstOcc+1-len(needle$)) else strstr$=left$(string$, posFirstOcc) end if end function '//Met chaque caractère d'un chaine dans un array '/!\ Ne pas oublié d'utilisé STA dans la boucle while (pour lire le tabelau que ça soit ici ou ailleurs) et non i/p/z/etc. sinon bug. 'Utilisé STAi$ pour lire le tableau 'STA$=STA$("William") 'while empty(STAi$(STA))=false 'print STAi$(STA) 'STA=STA+1 'wend function STA$(string$) GLOBAL STA lenS=len(string$) let STA=0 redim STAi$(lenS) while (i<>lenS) STAi$(i)=left$(right$(string$,lenS-i),1) i=i+1 wend STA$=STAi$ end function '//Shuffle. Permet de mélanger les lettres à l'intérieur d'une chaine. Supp Espace (1) 'machin$="Je suis à la plage avec ma mère" 'print strShuffle$(machin$, 0) function strShuffle$(string$, val) STA$=STA$(string$) lenS=len(string$) while (p<>lenS) rand=rand(0, lenS) if empty(STAi$(rand)) then p=p else if val=1 then chaine$=trim$(chaine$;STAi$(rand)) else chaine$=chaine$;STAi$(rand) end if STAi$(rand)="" p=p+1 end if wend strShuffle$=chaine$ end function '//Première lettre d'une chaine en minuscule function lcFirst$(string$) lenM=len(string$) lcFirst$=lower$(left$(string$,1));right$(string$, lenM-1) end function '//Première lettre d'une chaine en majuscule function ucFirst$(string$) lenM=len(string$) ucFirst$=upper$(left$(string$,1));right$(string$, lenM-1) end function '//Première lettre de chaque mot en majuscule function ucWords$(string$) STA$=STA$(string$) lenS=len(string$) while (p<>lenS) if p = 0 then chaine$=chaine$;upper$(STAi$(p)) end if if p>0 then if STAi$(p-1)=chr$(32) then chaine$=chaine$;upper$(STAi$(p)) else chaine$=chaine$;STAi$(p) end if end if p=p+1 wend ucWords$=chaine$ end function '//Supprime les espace à gauche de la chaine function ltrim$(string$) STA$=STA$(string$) lenS=len(string$) while (p<>lenS) if empty(STAi$(p))=false then number=p exit while end if p=p+1 wend ltrim$=right$(string$, lenS-number) end function '//Supprime les espace à droite de la chaine function rtrim$(string$) STA$=STA$(string$) lenS=len(string$) while (p<>lenS) if empty(STAi$(p))=false then while (p+i<>lenS) if empty(STAi$(p+i)) then number=p+i exit while end if i=i+1 wend exit while end if p=p+1 wend rtrim$=left$(string$, number) end function 'Inverse l'ordre d'une chaine. Supp Espace (1) function strrev$(string$, val) STA$=STA$(string$) while empty(STAi$(STA))=false STA=STA+1 wend while STA<>-1 chaine$=chaine$;STAi$(STA) STA=STA-1 wend if val = 1 then strrev$=trim$(chaine$) else strrev$=chaine$ end if end function '//Permet de répéter val fois string$ function strrepeat$(string$, val) for i=0 to val chaine$=chaine$;string$ next i strrepeat$=chaine$ end function '//Retourne string$ complétée à droite (0) ou à gauche (1) par padString$ jusqu'à ce que sa longueur soit égale à val function strpad$(string$, padString$, val, pos) while lenS<>val chaine$=chaine$;padString$ lenS=len(chaine$) wend if pos=1 then '//on remplit à gauche strpad$=chaine$;string$ else '//on remplit à droite strpad$=string$;chaine$ end if end function '//Function explode 'a$=" test1-test2-test3&test4&test5&test6&test7&test8&test9&test10&test11&test12&test13" 'explode$ = explode$(a$, "&") 'while i<explodei ' if parametre$(i)<>"" then ' print i;")";parametre$(i) ' end if ' i=i+1 'wend function explode$(chaineSansSigne$, modifier$) GLOBAL explodei explodei=10 dim parametre$(explodei) chaineSansSigne$=trim$(chaineSansSigne$;modifier$;"foo") chaineO$=chaineSansSigne$ [loop] iP=0 while instr(chaineSansSigne$, modifier$)<>0 if iP=explodei then explodei=explodei+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$(explodei) 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 function function rand(min,max) rand = int(rnd(1)*(max-min+1))+min end function
Bonjour,
Cette fonction permet de compter le nombre d’occurrence d'une chaîne dans une autre.
Code VB :
Il faut encore que je l'améliore pour connaitre la position des chaînes recherchées par rapport à la chaîne principale
Cette fonction permet de compter le nombre d’occurrence d'une chaîne dans une autre.
Code VB :
'input "Entrez une phrase : ";string$ 'input "Entrez la chaîne à compter : ";word$ 'print "La chaîne '";word$;"' apparaît "; searchWord(string$, word$);" fois dans la chaîne '";string$;"'." function searchWord(string$, word$) lenC=len(string$) i=0 while i<lenC if instr(string$, word$, i)=0 then i=i+1 else i=1+instr(string$, word$, i) a=a+1 end if wend searchWord=a end function
Il faut encore que je l'améliore pour connaitre la position des chaînes recherchées par rapport à la chaîne principale

Houla ! word$ est un mot clef, tu l'utilise pour nommer la chaine à détecter.
C'est pas bon pour les newbees ça...confusage assuré.
je propose: thechain$, thischain$, mychain$, ou: theword$, thisword$, myword$
Tu a de la chance que string$ ne soit pas un mot clef.....t'aurais eu double dose .
A part ça, pas mal, ça peut servir.;
Edité par Roland Le 03/08/2012 à 14h20
C'est pas bon pour les newbees ça...confusage assuré.
je propose: thechain$, thischain$, mychain$, ou: theword$, thisword$, myword$
Tu a de la chance que string$ ne soit pas un mot clef.....t'aurais eu double dose .

A part ça, pas mal, ça peut servir.;
Edité par Roland Le 03/08/2012 à 14h20
____________________
Roro
Roro
Effectivement word$() est une fonction réservée par LB, mais pas la variable word$ donc normalement ça n'engendre pas de problème. Mais effectivement ça peut perturber les newbies, je changerai ça

Qui est motivé pour faire une fonction inArray et not ?
L'homme au chapeau mou. lol!

____________________
Roro
Roro
en fait la fonction not existe déjà j'avais oublié ! C'est drôlement pratique en vrai couplé à une la fonction empty 
Code VB :

Code VB :
string$ = "e" if not(empty(string$)) then print "String is not null" else print "String is null" end if end function empty(string$) if (string$="NULL") or (string$="")then empty=1 else empty=0 end if end function
je recherche une fonction REMPLACE$ §()
print remplace$ (chaine$, a$, b$)
... qui remplacerait la chaine a$ par b$ à l'intérier de chaine$
print remplace$ (chaine$, a$, b$)
... qui remplacerait la chaine a$ par b$ à l'intérier de chaine$

____________________
"L'urgent c'est fait ! L'impossible est en cours... pour les miracles, merci de prévoir un délai supplémentaire !"
"L'urgent c'est fait ! L'impossible est en cours... pour les miracles, merci de prévoir un délai supplémentaire !"
joan74:
Avant de constituer ta chaine$; a$ et b$ existent
Fait ton remplacement d'abord et constitue la chaine$ après.
Tu peut faire tourner les contenus dans une sub ou un gosub
Si tu expose un cas précis, ça sera plus précis.
je recherche une fonction REMPLACE$ §()
print remplace$ (chaine$, a$, b$)
... qui remplacerait la chaine a$ par b$ à l'intérier de chaine$
print remplace$ (chaine$, a$, b$)
... qui remplacerait la chaine a$ par b$ à l'intérier de chaine$

Avant de constituer ta chaine$; a$ et b$ existent
Fait ton remplacement d'abord et constitue la chaine$ après.
Tu peut faire tourner les contenus dans une sub ou un gosub
Si tu expose un cas précis, ça sera plus précis.
____________________
Roro
Roro
Y'a qu'à demander
Quelques manips de chaines plus loin, je propose ceci :
Code VB :

Code VB :
a$="789" b$="---" chaine$="123456789" print "voici la chaine : ";chaine$ print "on y recherche ";a$ print "qu'on va remplacer par ";b$ chaine$=REMPLACE$(chaine$,a$,b$) print "ce qui nous donne ";chaine$ end '*********************** function REMPLACE$(chaine$,enlever$,remplacer$) enl=len(enlever$) cha=len(chaine$) tour=1 while tour<cha if mid$(chaine$,tour,enl)=enlever$ then deb$=left$(chaine$,tour-1) fin$=right$(chaine$,cha-tour-enl+1) REMPLACE$=deb$+remplacer$+fin$ end if tour=tour+1 wend end function
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Une version un peu plus légère, parce que j'étais parti sur une boucle WHILE/WEND alors que dans notre cas un FOR/NEXT convient parfaitement et est plus bref et plus simple à mettre en oeuvre
Cette version remplace toutes les occurences de a$ trouvées dans chaine$
Code VB :
J'ai ajouté une variable "dercar", dernier caractère, après avoir constaté qu'avec le FOR/NEXT on avait deux utilisations différentes de la somme cha-enl+1
Edité par Christophe Le 10/04/2021 à 13h26
Cette version remplace toutes les occurences de a$ trouvées dans chaine$
Code VB :
a$="345" b$="---" chaine$="123456789123456789" print "En remplaçant ";a$;" par ";b$;" dans ";chaine$ print " on obtient ";REMPLACE$(chaine$,a$,b$) end '*********************** function REMPLACE$(chain$,enlever$,remplacer$) enl=len(enlever$) cha=len(chain$) dercar=cha-enl+1 for tour=1 to dercar if mid$(chain$,tour,enl)=enlever$ then deb$=left$(chain$,tour-1) fin$=right$(chain$,dercar-tour) chain$=deb$+remplacer$+fin$ end if next REMPLACE$=chain$ end function
J'ai ajouté une variable "dercar", dernier caractère, après avoir constaté qu'avec le FOR/NEXT on avait deux utilisations différentes de la somme cha-enl+1
Edité par Christophe Le 10/04/2021 à 13h26
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Génial ! Merci
A noter que a$ et b$ doivent être de même longueur sinon ...
A noter que a$ et b$ doivent être de même longueur sinon ...
En remplaçant 3 par --- dans 123456789123456789
on obtient 12---45678912---6789
ou
En remplaçant 345 par - dans 123456789123456789
on obtient 12-678912-456789
on obtient 12---45678912---6789
ou
En remplaçant 345 par - dans 123456789123456789
on obtient 12-678912-456789

____________________
"L'urgent c'est fait ! L'impossible est en cours... pour les miracles, merci de prévoir un délai supplémentaire !"
"L'urgent c'est fait ! L'impossible est en cours... pour les miracles, merci de prévoir un délai supplémentaire !"
c bon, j'ai corrigé :
Code VB :
[edit]
Houston, on a encore un problème :
Edité par joan74 Le 11/04/2021 à 14h17
Code VB :
a$="345" b$="-" chaine$="123456789123456789" print "En remplaçant ";a$;" par ";b$;" dans ";chaine$ print " on obtient ";REMPLACE$(chaine$,a$,b$) end '*********************** function REMPLACE$(chain$,enlever$,remplacer$) enl=len(enlever$) 'cha=len(chain$) 'pas utile dercar=len(chain$)-enl+1 for tour=1 to dercar if mid$(chain$,tour,enl)=enlever$ then deb$=left$(chain$,tour-1) fin$=right$(chain$,dercar-tour) chain$=deb$+remplacer$+fin$ dercar=len(chain$)-enl+1 'il manquait cette maj end if next REMPLACE$=chain$ end function
[edit]
Houston, on a encore un problème :
En remplaçant 9 par -- dans 123456789123456789
on obtient 12345678--123456789
on obtient 12345678--123456789
Edité par joan74 Le 11/04/2021 à 14h17
____________________
"L'urgent c'est fait ! L'impossible est en cours... pour les miracles, merci de prévoir un délai supplémentaire !"
"L'urgent c'est fait ! L'impossible est en cours... pour les miracles, merci de prévoir un délai supplémentaire !"
Ma contribution, pour toutes longueurs:
Code VB :
Code VB :
a$="abc": b$="defghij" print "a$: ";a$ print "b$: ";b$ aa$="1234567abc8910111213141516" print "aa$: ";aa$ c=instr(aa$, a$) for x=1 to c-1 bb$=bb$+mid$(aa$,x,1) next x for x=1 to len(b$) bb$=bb$+mid$(b$,x,1) next x for x=c+len(a$) to len(aa$) bb$=bb$+mid$(aa$,x,1) next x print "bb$: ";bb$
____________________
Roro
Roro
Caché:
Merci Roland, mais ta version donne :
... dans chacun des cas, seul la première portion de chaine est trouvé et remplacé.
Edité par joan74 Le 13/04/2021 à 04h56
Ma contribution, pour toutes longueurs:
Code VB :
Code VB :
a$="abc": b$="defghij" print "a$: ";a$ print "b$: ";b$ aa$="1234567abc8910111213141516" print "aa$: ";aa$ c=instr(aa$, a$) for x=1 to c-1 bb$=bb$+mid$(aa$,x,1) next x for x=1 to len(b$) bb$=bb$+mid$(b$,x,1) next x for x=c+len(a$) to len(aa$) bb$=bb$+mid$(aa$,x,1) next x print "bb$: ";bb$
Merci Roland, mais ta version donne :
a$: 1
b$: -
aa$: 012345678901234567890123456789
bb$: 0-2345678901234567890123456789
b$: -
aa$: 012345678901234567890123456789
bb$: 0-2345678901234567890123456789
a$: 2
b$: --
aa$: 012345678901234567890123456789
bb$: 01--345678901234567890123456789
b$: --
aa$: 012345678901234567890123456789
bb$: 01--345678901234567890123456789
a$: 12
b$: -
aa$: 012345678901234567890123456789
bb$: 0-345678901234567890123456789
b$: -
aa$: 012345678901234567890123456789
bb$: 0-345678901234567890123456789
... dans chacun des cas, seul la première portion de chaine est trouvé et remplacé.
Edité par joan74 Le 13/04/2021 à 04h56
____________________
"L'urgent c'est fait ! L'impossible est en cours... pour les miracles, merci de prévoir un délai supplémentaire !"
"L'urgent c'est fait ! L'impossible est en cours... pour les miracles, merci de prévoir un délai supplémentaire !"
Eh bien ça n'a pas l'air si simple que ça... Je propose une version à base de "while" qui devrait fonctionner quelle que soit la taille et le nombre d'occurences dans la chaine. Et je travaille sur une version avec des FOR/NEXT, qui me donne bien du fil à retordre.
La version "while" :
Code VB :
La version "while" :
Code VB :
a$="567" b$="--" chaine$="123456789123456789" print "En remplaçant ";a$;" par ";b$;" dans ";chaine$ print " on obtient ";REMPLACE$(chaine$,a$,b$) end '*********************** function REMPLACE$(chain$,enlever$,remplacer$) enl=len(enlever$) cha=len(chain$) tour=1 fini=0 while fini=0 dercar=cha-enl+1 if mid$(chain$,tour,enl)=enlever$ then deb$=left$(chain$,tour-1) fin$=right$(chain$,dercar-tour) chain$=deb$+remplacer$+fin$ cha=len(chain$) end if if tour>=cha then fini=1 else tour=tour+1 wend REMPLACE$=chain$ end function
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Citation:
On doit pouvoir trouver plus "tordu" comme situation.
a$: 1: b$: -: a$: 2: b$: --
On doit pouvoir trouver plus "tordu" comme situation.
____________________
Roro
Roro
Caché:
Merci,c parfait ! [edit] Finalement non :/[/edit]
Edité par joan74 Le 13/04/2021 à 19h07
Christophe:
Eh bien ça n'a pas l'air si simple que ça... Je propose une version à base de "while" qui devrait fonctionner quelle que soit la taille et le nombre d'occurences dans la chaine. Et je travaille sur une version avec des FOR/NEXT, qui me donne bien du fil à retordre.
La version "while" :
Code VB :
La version "while" :
Code VB :
a$="567" b$="--" chaine$="123456789123456789" print "En remplaçant ";a$;" par ";b$;" dans ";chaine$ print " on obtient ";REMPLACE$(chaine$,a$,b$) end '*********************** function REMPLACE$(chain$,enlever$,remplacer$) enl=len(enlever$) cha=len(chain$) tour=1 fini=0 while fini=0 dercar=cha-enl+1 if mid$(chain$,tour,enl)=enlever$ then deb$=left$(chain$,tour-1) fin$=right$(chain$,dercar-tour) chain$=deb$+remplacer$+fin$ cha=len(chain$) end if if tour>=cha then fini=1 else tour=tour+1 wend REMPLACE$=chain$ end function
Merci,
Edité par joan74 Le 13/04/2021 à 19h07
____________________
"L'urgent c'est fait ! L'impossible est en cours... pour les miracles, merci de prévoir un délai supplémentaire !"
"L'urgent c'est fait ! L'impossible est en cours... pour les miracles, merci de prévoir un délai supplémentaire !"
Roland:
Y'a qu'à demander ! essai sa :
Code VB :
On doit pouvoir trouver plus "tordu" comme situation.
Y'a qu'à demander ! essai sa :
Code VB :
a$="1" b$="11" chaine$="123456789123456789" print "En remplaçant ";a$;" par ";b$;" dans ";chaine$ print " on obtient ";REMPLACE$(chaine$,a$,b$) end '*********************** function REMPLACE$(chain$,enlever$,remplacer$) enl=len(enlever$) cha=len(chain$) tour=1 fini=0 while fini=0 dercar=cha-enl+1 if mid$(chain$,tour,enl)=enlever$ then deb$=left$(chain$,tour-1) fin$=right$(chain$,dercar-tour) chain$=deb$+remplacer$+fin$ cha=len(chain$) end if if tour>=cha then fini=1 else tour=tour+1 wend REMPLACE$=chain$ end function
____________________
"L'urgent c'est fait ! L'impossible est en cours... pour les miracles, merci de prévoir un délai supplémentaire !"
"L'urgent c'est fait ! L'impossible est en cours... pour les miracles, merci de prévoir un délai supplémentaire !"
Citation:
Pfff... J'suis dèg'..
Y'a qu'à demander ! essai sa :
Pfff... J'suis dèg'..

____________________
Roro
Roro
• 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