+ Rispondi alla Discussione
Risultati da 1 a 6 di 6

Discussione: String tokenizer

  1. #1
    Data Registrazione
    Jan 2006
    Località
    Roma
    Messaggi
    2

    Smile String tokenizer

    Ho scritto una funzione che sarà molto utile agli sviluppatori flash, non sò se già la conoscete, si chiama string tokenizer.
    Grazie a questa funzione potete creare un'array da una variabile.
    Ad esempio: avete una variabile tipo:
    hello="hello,world,ciccio,pippo,claudio,sergio,fra nco"
    e vorreste un array contenente tutte le parti (tokens) ordinate, niente di più semplice basterà copiare ed incollare queste righe di codice:


    //-----------------------------------------------------------------------------


    function setIndexes(phrase:String, sep:String) {
    for (i=0; i<phrase.lastIndexOf(sep); i++) {
    index = (phrase.indexOf(sep, i));
    if (index != index_arr[index_arr.length-1]) {
    index_arr.push(index);
    }
    }
    return (index_arr);
    }
    stringTokenizer = function (phrase:String, sep:String) {
    index = 0;
    if (sep.length>0) {
    index_arr = new Array("0");
    } else {
    index_arr = new Array();
    }
    var indexNames_arr:Array = new Array();
    setIndexes(phrase, sep);
    for (i=0; i<index_arr.length; i++) {
    if (i == 0) {
    indexNames_arr.push(phrase.slice(index_arr[i], index_arr[i+1]));
    } else {
    indexNames_arr.push(phrase.slice(index_arr[i]+sep.length, index_arr[i+1]));
    }
    }
    return (indexNames_arr);
    };


    //--------------------------------------------------------------------------


    poi semplicemente richiamando la funzione e passandogli come parametri (nome variabile,separatore) ricaverete un array completo
    esempio
    hello="hello,world,ciccio,pippo,claudio,sergio,fra nco";
    world=new Array();
    world=stringTokenizer(hello,",")
    //Risultato=hello,world,ciccio,pippo,claudio,sergio, franco

    per domande contattatemi o qui sul forum o
    all'email ciampini.fabrizio@gmail.com

  2. #2
    Data Registrazione
    Jan 2005
    Località
    Delta del Po
    Messaggi
    1,608

    Predefinito

    ciao,

    dai un'occhiata a String.split()



    Jaco

  3. #3
    Data Registrazione
    Jan 2006
    Località
    Roma
    Messaggi
    2

    Predefinito Prova questa funzione

    Grazie a questa in 2 secondi ti crei un array fatto per bene.

    Ora te ne spiego l'utilità, quando si caricano le variabili da un file esterno come ad esempio un xml fa comodo inserire valori tutti in una stessa stringa
    es:

    <xml.........
    <bla bla bla.......
    <param name="lang" value="it,en,es,fr,de,ecc.ecc."/>

    quando lo vado a caricare io ho una stringa intera, ma mi serve un array per poter usare le variabili, così grazie a stringTokenizer creo un array
    es:
    lingue=new Array();
    lingue=stringTokenizer(xml.firstChild.childNodes[0].attributes.value
    ("per esempio.. ndr"),",")

    così se mi serve la lingua numero 1 nell'ordine non devo fare altro che scrivere

    trace(lingua[0])

    e mi restituirà it

    adesso ne capisci l'utilità!

    Funziona bene è già testato, l'ho voluto postare se tante volte servisse a qualcuno

    a me è molto utile

  4. #4
    Data Registrazione
    Feb 2006
    Località
    Udine
    Messaggi
    7

    Predefinito

    Scusa ma nemmeno io come Jaco non capisco.
    Forse mi sfugge qualcosa ma modificando il tuo esempio ottengo la stessa cosa:

    hello="hello,world,ciccio,pippo,claudio,sergio,fra nco";
    world=new Array();
    world=hello.split(',');
    trace(world.length);

  5. #5
    Data Registrazione
    Feb 2004
    Località
    Milano
    Messaggi
    1,002

    Question

    Citazione Originariamente Scritto da lateonight
    Scusa ma nemmeno io come Jaco non capisco.
    Forse mi sfugge qualcosa ma modificando il tuo esempio ottengo la stessa cosa:
    o sono fuso pure io o non capisco la differenza con lo split...

    bizio preferisci usare una funzione piuttosto che una caratteristica intrinseca nelle funzionalità dell'array (vedi split)?

  6. #6
    Data Registrazione
    Jan 2005
    Località
    Delta del Po
    Messaggi
    1,608

    Predefinito

    ciao,

    non voglio togliere nulla al tuo lavoro, ma ancora mi sfugge il vantaggio di usare questo codice rispetto a split. Tieni anche presente che una function come la tua ha bisogno di essere referenziata, mentre split e' un metodo di array, oggetto built-in, che puo' essere usato senza problemi di scoping.

    In passato mi sono occupato dei tempi di esecuzione di split, che col player 5 erano veramente alti, cosi' proposi un mio codice che faceva le stesse cose in meta' tempo.
    Il vantaggio consisteva proprio in quello: risparmiare tempo.
    Era il 2001, sono passati quasi cinque anni da allora e in MM non sono stati a guardare, hanno migliorato il player fino a rendere split la scelta principale per scopi come quelli presi in esame in questo topic.

    Fai una cosa, crea un'unita' di test del tuo codice, eseguilo almeno un migliaio di volte prendendo i tempi iniziale e finale, poi confrontalo con codice basato su split e vedi quanto ti conviene. Ti dico subito che la presenza di statement condizionali penalizzera' fortemente le prestazioni.

    Un'altra cosa che potresti fare (in tema di codice mx) e' p.e. visitare questo sito:

    http://www.layer51.com/proto/



    Jaco

+ Rispondi alla Discussione

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  • Il codice BB è Attivato
  • Le faccine sono Attivato
  • Il codice [IMG] è Attivato
  • Il codice HTML è Disattivato