AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  Connexion  

Partagez | 
 

 explode / split - permet de découper un chaine en sous-segments

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Térence
Utilisateur confirmé: Rang *****
avatar

Messages : 2213
Localisation : Oui

MessageSujet: explode / split - permet de découper un chaine en sous-segments   Mar 1 Avr 2014 - 18:56

Bonsoir,
Comme à chaque fois j'ai besoin de cette fonction avec GM et que je la retrouve jamais, bah je la poste ici  Yum! 

Version avec un séparateur de plusieurs caractères :

Code:
/*
    explode(str, sep, id);
   
    Coupe une chaîne en segments et retourne le segment id.
    Exemple : explode("Janvier||Février||Mars","||",2) retourne "Mars"
    
    str    la chaîne de départ
    sep    la séparateur
    id     l'index de la sous-chaine à retourner
*/
var str, sep, nb, idVal, lastVal, array;

str=argument0;
sep=argument1;

if(string_count(sep,str)==0){
    return str;
}

nb=string_count(sep, str);
for(i=0;i<nb;i+=1){
    array[i]="";
}

idVal=0;
lastVal="";
for(i=0;i<=string_length(str);i+=1){
    if(string_copy(str,i,string_length(sep))==sep){
        array[idVal]=lastVal;
        idVal+=1;
        lastVal="";
        i+=string_length(sep)-1;
    }else{
        lastVal+=string_char_at(str,i);
    }
}
array[idVal]=lastVal;
return array[argument2];

Version optimisée si le séparateur n'est que d'un seul caractère :
Code:

/*
    explode(str, sep, id);
   
    Coupe une chaîne en segments et retourne le segment id.
    Exemple : explode("Janvier||Février||Mars","||",2) retourne "Mars"
    
    str    la chaîne de départ
    sep    la séparateur
    id     l'index de la sous-chaine à retourner
*/
var str, sep, nb, idVal, lastVal, array;

str=argument0;
sep=argument1;

if(string_count(sep,str)==0){
    return str;
}

nb=string_count(sep, str);
for(i=0;i<nb;i+=1){
    array[i]="";
}

idVal=0;
lastVal="";
for(i=0;i<=string_length(str);i+=1){
    if(string_char_at(str,i)==sep){
        array[idVal]=lastVal;
        idVal+=1;
        lastVal="";
    }else{
        lastVal+=string_char_at(str,i);
    }
}
array[idVal]=lastVal;
return array[argument2];

En gros c'est la fonction explode en PHP, à quelques différences près. Puisqu'on peut pas retourner un tableau, bah faut spécifier l'index de la sous chaine à récupérer...
Exemple :
explode("Bonjour*/*Salut*/*Coucou","*/*",1) retourne "Salut".

Bon, c'est pas du tout optimisé, mais franchement j'ai la flemme, et je suis partie du principe que je pourrais renvoyer un tableau...

3ème version, on peut pas retourner de tableau, mais on peut utiliser une variable globale \o/ Alors certes c'est pas optimisé, mais ca l'est quand même beaucoup plus que de tout recalculer quand on veut faire une boucle par exemple.

Code:

/*
    explode(str, sep, id);
   
    Coupe une chaîne en segments et les retourne sous forme dans le tableau global.Explode[].
    Exemple : explode("Janvier||Février||Mars","||",2) retourne "Mars"
   
    str    la chaîne de départ
    sep    la séparateur
*/
var i, str, sep, nb, idVal, lastVal;

str=argument0;
sep=argument1;

nb=string_count(sep, str);
if(nb==0){
    global.Explode[0]=str;
    return 0;
}

for(i=0;i<nb;i+=1){
    global.Explode[i]="";
}

idVal=0;
lastVal="";
for(i=1;i<=string_length(str);i+=1){
    if(string_copy(str,i,string_length(sep))==sep){
        global.Explode[idVal]=lastVal;
        idVal+=1;
        lastVal="";
        i+=string_length(sep)-1;
    }else{
        lastVal+=string_char_at(str,i);
    }
}
global.Explode[idVal]=lastVal;

Pas besoin de spécifier l'index maintenant, on récupère tout dans le tableau global.Explode[].

_________________
Je suis partie sur les ailes du vent et la tempête m'a ramenée.


Dernière édition par Térence68 le Ven 4 Avr 2014 - 18:03, édité 4 fois
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

Messages : 8926
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Re: explode / split - permet de découper un chaine en sous-segments   Mar 1 Avr 2014 - 19:03

Héhé, ou split pour les intimes :p

_________________
                 
Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
avatar

Messages : 2213
Localisation : Oui

MessageSujet: Re: explode / split - permet de découper un chaine en sous-segments   Jeu 3 Avr 2014 - 16:42

Effectivement, je l'avais mis dans le titre pour qu'on puisse facilement le trouver en faisant une recherche.
Sinon c'est juste pour signaler que j'ai modifié le code : j'ai résolu un bug qui empêchait de récupérer le dernier index du tableau, et si la chaine ne contient pas du tout le séparateur, il retourne la chaîne entière.

_________________
Je suis partie sur les ailes du vent et la tempête m'a ramenée.
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

Messages : 8926
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Re: explode / split - permet de découper un chaine en sous-segments   Jeu 3 Avr 2014 - 17:13

Ce serait peut être cool aussi d'avoir une version ou le séparateur fait un seul char non? Car avec ces string_copy a tout va je suis presque certain que pour un gros tableau, ça doit être un peu mou :b
Fin y a juste a ajouter un if + une copie modifiée de la loop dans ton code et y a moyen d'avoir une bonne opti je pense.

_________________
                 
Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
avatar

Messages : 2213
Localisation : Oui

MessageSujet: Re: explode / split - permet de découper un chaine en sous-segments   Jeu 3 Avr 2014 - 17:22

C'est fait, par contre vu que GM est incapable d'arrêter un if quand la condition n'est de toute façon pas vérifié et que je suis une feignasse, j'ai pas 'fusionnées' les deux fonctions ^^'

_________________
Je suis partie sur les ailes du vent et la tempête m'a ramenée.
Revenir en haut Aller en bas
Contenu sponsorisé




MessageSujet: Re: explode / split - permet de découper un chaine en sous-segments   

Revenir en haut Aller en bas
 
explode / split - permet de découper un chaine en sous-segments
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» VITE un truc pour couper le lait...
» LCN : La Chaine Normande.
» Trouver un nom pour sa chaine/blog beauté
» couper les cheveux ( + photo)
» couper son écharpe

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Développement :: Scripts GML-
Sauter vers: