scr_StringField

Scripts e snippets scritti in GameMaker Language (gml)
Rispondi
Will
Newbie
Messaggi: 27
Iscritto il: 14/10/2013, 18:01
Specialità: Programmazione
Uso: GM:Studio 1.4 Master
Contatta:

scr_StringField

Messaggio da Will »

Salve, lo script che segue estrai sotto stringhe da una data stringa in base alla presenza di marcatori char.

scr_StringField( string, real );

Codice: Seleziona tutto

///scr_StringField(String, Real);
///     String = <STRING1 + stopchar + STRING2 + stopchar... STRINGn + stopchar>    ( String = stringa contenente le sotto stringhe ed i loro marcatori )
///     Real = Unsigned Integer                                                     ( Real = numero intero senza segno indicante la posizione della sottostringa che vogliamo sia estratta )

var str=argument0, pos=argument1, field="";      // 
var sep=string_char_at(str, string_length(str));    // Dichiarazione variabili
var rbound=string_pos(sep, str);                    // 

repeat(pos)                                         // inizio ciclo di decurtazione ((se pos = 0 il ciclo sarà saltato)
{
    str=string_delete(str,1,rbound);                    // taglio della coda dati
    rbound=string_pos(sep, str);                        // calcolo prossima posizione
}

field=string_copy(str,1,rbound-1);                  // estrazione stringa richiesta
return field;                                       // ritorno al codice con output String
Download: http://www.datafilehost.com/d/66e212a1 (2Kb)

Occorre passare obbligatoriamente tutti e due gli argomenti (uno di tipo String e l'altro Real) allo script; in particolare, dovrete fornire, nel primo argomento, una stringa formattata con tanti marcatori quante sono le sottostringhe incluse; i marcatori devono essere posti alla fine di ogni sottostringa e devono essere tutti rappresentati dallo stesso carattere. Ecco un esempio:

String = "Menu#Modifica#Visualizza#Strumenti#Help#";

La stringa qui sopra contiene le sottostringhe (in grassetto) e i rispettivi marcatori (#) alla fine di ognuna di esse.
Potete usare qualsiasi carattere volete per rappresenzare i marcatori. Altro esempio:

String = "Start.Options.Highscore.Credits.";

Se il secondo argomento viene posto al zero ( pos = 0 ) allora verrà restituita la prima stringa incontrata.

Potete annidare lo script per estrarre dati come in un array 2D o 3D (anche oltre se siete disposti a perdere performance) purchè usiate un carattere marcatore diverso per ogni dimensione.

String = "Spada ad una mano#Spada a due mani#Spada lunga#Spada corta#*Ascia ad una mano#Ascia a due mani#Ascia bipenne#Scure#*Bastone corto#Bastone Lungo#Verga#Staffile#*"

scr_StringField( scr_StringField( String, 0 ), 2) restituirà "Spada lunga"

Gli usi sono molti, spero vi sia utile.

N.B: Ho aggiornato lo script sostituendo il ciclo FOR con un REPEAT ed eliminando la variabile n.
Ultima modifica di Will il 10/03/2014, 15:00, modificato 1 volta in totale.

BotaniciTraffici
Membro attivo
Messaggi: 348
Iscritto il: 31/01/2014, 12:38
Specialità: Programmazione
Uso: GM:Studio 1.4 Master
Contatta:

Re: scr_StringField

Messaggio da BotaniciTraffici »

Molto utile ;)

Will
Newbie
Messaggi: 27
Iscritto il: 14/10/2013, 18:01
Specialità: Programmazione
Uso: GM:Studio 1.4 Master
Contatta:

Re: scr_StringField

Messaggio da Will »

BotaniciTraffici ha scritto:Molto utile ;)
Per me lo è davvero: con una sola variabile stringa riesco a gestire tutti i miei menu e sottomenu.

Ps: ho alleggerito lo script.

BotaniciTraffici
Membro attivo
Messaggi: 348
Iscritto il: 31/01/2014, 12:38
Specialità: Programmazione
Uso: GM:Studio 1.4 Master
Contatta:

Re: scr_StringField

Messaggio da BotaniciTraffici »

Dicevo sul serio, non era ironico.

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 6 ospiti