Térence Utilisateur confirmé: Rang *****
Messages : 2213 Localisation : Oui
| Sujet: explode / split - permet de découper un chaine en sous-segments Mar 1 Avr 2014 - 20:56 | |
| Bonsoir, Comme à chaque fois j'ai besoin de cette fonction avec GM et que je la retrouve jamais, bah je la poste ici 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 - 20:03, édité 4 fois |
|
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: explode / split - permet de découper un chaine en sous-segments Mar 1 Avr 2014 - 21:03 | |
| Héhé, ou split pour les intimes :p |
|
Térence Utilisateur confirmé: Rang *****
Messages : 2213 Localisation : Oui
| Sujet: Re: explode / split - permet de découper un chaine en sous-segments Jeu 3 Avr 2014 - 18: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.
|
|
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: explode / split - permet de découper un chaine en sous-segments Jeu 3 Avr 2014 - 19: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. |
|
Térence Utilisateur confirmé: Rang *****
Messages : 2213 Localisation : Oui
| Sujet: Re: explode / split - permet de découper un chaine en sous-segments Jeu 3 Avr 2014 - 19: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.
|
|
Contenu sponsorisé
| Sujet: Re: explode / split - permet de découper un chaine en sous-segments | |
| |
|