Mi serviva un modo per splittare una stringa attraverso un divisore e raccogliere i valori su un array.
In pratica la funzione restituisce il numero di elementi contenuti nell'array e nel mentre suddivide la stringa ed è presente in altri linguaggi di programmazione tipo PHP o VB, ma noi siamo ganzi e ci piace fare le funzioni bypassando pure la storia del passaggio array tramite reference.
Esempio:
stringa="a,b,c,d";
numeroelementi=split("array1",stringa,",");
Con questo codice l'array -array1- conterrà nella posizione 1 la stringa "a", nella pos 2 la stringa "b" e via dicendo.
Come divisore (",") si può usare anche una stringa con più di un carattere per esempio:
stringa="a<br>b<br>c<br>d";
numeroelementi=split("array1",stringa,"<br>");
Ecco qui il codice, create uno script chiamato
split.
Codice: Seleziona tutto
USO:
//numeroelementi=split(nomearray,stringa,divisore);
numeroelementi=split("arrayprova",str_sorgente,"<ab>");
Sotto spoiler perchè deforma il layout
Spoiler
Codice: Seleziona tutto
{
//Split
//by maz85
//divide una stringa sorgente attraverso un divisore e salva le vari parti
//in un array indicato (in questo caso LOCALE, ma basta cambiare funzione di SET)
//split(nomearray,stringa,divisore);
//divisore può essere anche una stringa tipo "<br>", ":::", "." ecc...
//init array 0-"" cominciamo dall'1 (si, consumiamo indirizzi in memoria)
variable_local_array_set(string(argument0),0,"");
var stringadadividere;
stringadadividere=argument1;
var divisore;
divisore=argument2;
var ottenibili;
ottenibili=string_count(divisore,stringadadividere)+1;
//Otteniamo quanti valori dobbiamo ottere in un testo tipo
var stringatemp;
stringatemp=stringadadividere;
for(i=1; i<=ottenibili; i+=1){
//prima occorrenza del divisore
var occ;
occ=string_pos(divisore,stringatemp);
var valuetemp;
if(occ==0){
//no occorrenze
valuetemp=stringatemp;
}else{
valuetemp=string_copy(stringatemp,0,occ-1);
}
if(valuetemp!=""){
variable_local_array_set(string(argument0),i,valuetemp);
//ridefinizione
stringatemp=string_copy(stringatemp,occ+string_length(divisore),string_length(stringatemp)-string_length(variable_local_array_get(string(argument0),i)));
}
}
return ottenibili; //restituisco il numero di elementi trovati
}
Lo aggiungo più tardi su Snippet.