Forum Liberty Basic France

Le 29/05/2012 à 18h19

Administrateur

Groupe: Administrateur

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

MSN Yahoo Web    
Le 03/08/2012 à 13h34

Administrateur

Groupe: Administrateur

Inscrit le: 24/09/2010
Messages: 238
Bonjour,

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 :)
____________________

MSN Yahoo Web    
Le 03/08/2012 à 14h19

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2406
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
____________________
Roro

   
Le 03/08/2012 à 14h50

Administrateur

Groupe: Administrateur

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

MSN Yahoo Web    
Le 24/03/2014 à 22h16

Administrateur

Groupe: Administrateur

Inscrit le: 24/09/2010
Messages: 238
Qui est motivé pour faire une fonction inArray et not ?
____________________

MSN Yahoo Web    
Le 25/03/2014 à 09h40

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2406
L'homme au chapeau mou. lol! :p
____________________
Roro

   
Le 25/03/2014 à 22h32

Administrateur

Groupe: Administrateur

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

MSN Yahoo Web    
Le 19/03/2021 à 15h19

Libertynaute Actif

Groupe: Membre

Inscrit le: 17/12/2010
Messages: 107
je recherche une fonction REMPLACE$ §()

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 !"

   
Le 19/03/2021 à 23h15

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2406
joan74:
je recherche une fonction REMPLACE$ §()

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

   
Le 29/03/2021 à 09h45

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 738
Y'a qu'à demander ;) Quelques manips de chaines plus loin, je propose ceci :
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 courante avec GNU/Linux Mageia7+ Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 10/04/2021 à 12h11

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 738
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 :
Code VB :
 
a$="234"
b$="---"
'pour un "vrai" remplacement il faut que a$ et b$ aient même nombre de caractères
chaine$="123456789"
print "En remplaçant ";a$;" par ";b$;" dans ";chaine$;" on obtient ";REMPLACE$(chaine$,a$,b$)
 
end
 
'***********************
function REMPLACE$(chaine$,enlever$,remplacer$)
    enl=len(enlever$)
    cha=len(chaine$)
    dercar=cha-enl+1
 
    for tour=1 to dercar
        if mid$(chaine$,tour,enl)=enlever$ then
            deb$=left$(chaine$,tour-1)
            fin$=right$(chaine$,dercar-tour)
            REMPLACE$=deb$+remplacer$+fin$
        end if
    next
 
    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
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia7+ Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   

 |  |

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