Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    44

    Dati in array con LoadVars

    Leggo una serie di dati da un file esterno e vorrei inserirli in un array:

    dataLV = new LoadVars();
    dataLV.path = this;
    dataLV.onLoad = function(ok){
    if (ok) {
    var arrData=new Array();
    for (var prop in this) {
    arrData.Push({codice: this.path[code], prezzo: this.path[code+”prezzo”], desc: this.path[code+”desc”]})
    }
    } else {
    [.....not found]
    }
    };
    dataLV.load("temp.txt");


    Questa è la funzione richiamata dall'evento onRollOver:

    function getData(codice){
    for(i=0;i<100;i++){
    if (arrData[i].codice==codice) {
    indice=i;
    }
    }
    txtCodice.text=arrData[indice].codice
    txtDescrizione.text=arrData[indice].desc
    txtPrezzo.text=arrData[indice].prezzo
    }

    E' la prima volta che lavoro con AC è devo aver fatto un pò di casino sul ciclo for. Credo.

    Se qualcuno avesse due minuti da dedicarmi gli sarei molto grato.
    Non sei veramente finito fino a quando hai una buona storia da parte e qualcuno a cui raccontarla!

  2. #2

    Re: Dati in array con LoadVars

    Originariamente inviato da laycg
    Leggo una serie di dati da un file esterno e vorrei inserirli in un array:

    dataLV = new LoadVars();
    dataLV.path = this;
    dataLV.onLoad = function(ok){
    if (ok) {
    var arrData=new Array();
    for (var prop in this) {
    arrData.Push({codice: this.path[code], prezzo: this.path[code+”prezzo”], desc: this.path[code+”desc”]})
    }
    } else {
    [.....not found]
    }
    };
    dataLV.load("temp.txt");


    Questa è la funzione richiamata dall'evento onRollOver:

    function getData(codice){
    for(i=0;i<100;i++){
    if (arrData[i].codice==codice) {
    indice=i;
    }
    }
    txtCodice.text=arrData[indice].codice
    txtDescrizione.text=arrData[indice].desc
    txtPrezzo.text=arrData[indice].prezzo
    }

    E' la prima volta che lavoro con AC è devo aver fatto un pò di casino sul ciclo for. Credo.

    Se qualcuno avesse due minuti da dedicarmi gli sarei molto grato.
    tutte le var nello stesso array??
    oppure devi usare degli array diversi x ogni var??
    xchè nn penso che avrai solo tre var e quindi avresti bisogno di + array
    la verità non è una meretrice che si getta al collo di chi non la vuole ma anzi essa è dotata di una così altera bellezza che anche chi sacrifica tutto per ottenerla non è sicuro di averla raggiunta !

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    44
    L'idea era di avere un solo array. Ho notato un errore di battitura nel codice che ho postato.

    for (var prop in this) { //sarebbe
    for (var code in this) { //

    Ho una serie di dati a gruppi di 3 (codice, prezzo, descrizione), da qui l'uso del ciclo for.

    I nomi delle var sul txt saranno, per esempio: codice1 (per il codice), codice1prezzo (per il prezzo) e codice1desc(per la desc).

    La funzione per leggere i dati e il riempimento dell'array non hanno problemi perché gli ho testati inserendo dati diretti tipo:

    arrData.Push({codice: 'codice1', prezzo: 'prezzo1', desc: 'desc1'})

    Dove "solo" riuscire ad assegnare all'array i dati letti tramite LoadVars...
    Non sei veramente finito fino a quando hai una buona storia da parte e qualcuno a cui raccontarla!

  4. #4
    Originariamente inviato da laycg
    L'idea era di avere un solo array. Ho notato un errore di battitura nel codice che ho postato.

    for (var prop in this) { //sarebbe
    for (var code in this) { //

    Ho una serie di dati a gruppi di 3 (codice, prezzo, descrizione), da qui l'uso del ciclo for.

    I nomi delle var sul txt saranno, per esempio: codice1 (per il codice), codice1prezzo (per il prezzo) e codice1desc(per la desc).

    La funzione per leggere i dati e il riempimento dell'array non hanno problemi perché gli ho testati inserendo dati diretti tipo:

    arrData.Push({codice: 'codice1', prezzo: 'prezzo1', desc: 'desc1'})

    Dove "solo" riuscire ad assegnare all'array i dati letti tramite LoadVars...
    beh x me sarebbe + logico usare tanti array quante sono le var
    cioè io farei nel txt
    &codice0=564564564&prezzo0=45,45&desc0=bla&....... ..&codiceN=765767&prezzoN=5656&descN=bla&

    e quindi nel flash
    avresti in pratica 3 array codice prezzo e descrizione

    e poi nel popolamente dell'array hai usato una forma secondo me sbagliata
    in quanto con push metti un elemento come ultimo dell'array ma come hai scritto hai fatto una cosa di mezzo tra usare push e popolare l'array manualmente

    come ho detto io con il ciclo for popoli i tre array sempre con push

    supponendo che conosci anche quante var ci sono nel txt alla fine ti basta aggiungere una var
    ad es

    tot=1&codice0=564564564&prezzo0=45,45&desc0=bla&


    dati = new LoadVars();
    dati.onLoad = function(success){
    if(success){
    tot=dati.tot;
    codice =new Array();
    prezzo=new Array();
    desc=new Array();
    for(i=0;i<tot;i++){
    pushed =codice.push(dati["codice"+i]);
    pushed =prezzo.push(dati["prezzo"+i]);
    pushed =desc.push(dati["desc"+i]);

    }

    }else{
    trace("problemi con il file di testo");
    }
    }
    dati.load("dati.txt");

    in questo modo dovresti avere i tuoi dati nei tre array ...

    la verità non è una meretrice che si getta al collo di chi non la vuole ma anzi essa è dotata di una così altera bellezza che anche chi sacrifica tutto per ottenerla non è sicuro di averla raggiunta !

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    44
    In effetti hai ragione. Sono riuscito però a trovare una soluzione valida (almeno pare) per mettere tutto in un array. In questo modo l'array viene popolato correttamente.

    var arrData=new Array();
    dataLV = new LoadVars();
    dataLV.path = this;
    dataLV.onLoad = function(ok) {
    if (ok) {
    for (var prop in this) {
    current=this[prop];
    currentSpl=current.split("|");
    _root.arrData.Push({codice: currentSpl[0], prezzo: currentSpl[1], desc: currentSpl[2]});
    }
    } else {
    this.path.nome_txt.text = "Error: data not found";
    }
    };
    dataLV.load("temp.txt");
    Non sei veramente finito fino a quando hai una buona storia da parte e qualcuno a cui raccontarla!

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    44
    (ho inviato la risposta per sbaglio... continuo di seguito)

    Questa è la funzione che utilizza l'array.

    function getData(codice){
    for(i=0;i<100;i++){
    if (arrData[i].codice==codice) {
    indice=i;
    }
    }
    txtCodice.text=arrData[indice].codice
    txtDescrizione.text=arrData[indice].desc
    txtPrezzo.text=arrData[indice].prezzo

    }

    Il problemo che ho adesso è che non riesco a 'vedere' l'array, suppongo a causa del fatto che è stato popolato all'interno della funzione.

    Bisogna forse dichiarare l'array in un modo particolare per far si che sia visibile anche fuori dalla funzione?
    Non sei veramente finito fino a quando hai una buona storia da parte e qualcuno a cui raccontarla!

  7. #7
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    @crescenzo : più che altro, non sarebbe più logico, ma più semplice

    @laycg : il pensiero è corretto, ma non riesco a seguire il tuo codice, credo che tu abbia fatto un errore di fondo in questa riga

    arrData.Push({codice: this.path[code], prezzo: this.path[code+”prezzo”], desc: this.path[code+”desc”]})

    perchè utilizzi this.path? i dati non dovrebbero trovarsi in this (che corrisponderebbe all'istanza della classe LoadVars)?

    magari posta anche il contenuto del file txt, tanto per capire meglio come dovrebbe agire il parsing

  8. #8
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    >>Bisogna forse dichiarare l'array in un modo particolare per far si che sia visibile anche fuori dalla funzione?

    il problema è che l'array viene riempito solo a seguito del caricamento esterno, quindi se lo utilizzi fuori da quella funzione, è come se lo usassi vuoto

    comunque puoi adottare come soluzione quella di creare una funzione esternamente all'onLoad e poi richiamarcela dentro utilizzando come parametro l'array appena riempito... una cosa del genere


    var myArray = new Array();
    var useArray = function(arr) {
    for(var i = 0; i < arr.length; i++){
    trace(arr[i]);
    }
    }
    var myLV = new LoadVars();
    myLV.onLoad = function(ok){
    if(ok){
    for (var prop in this){
    // azioni per riempire myArray
    }
    useArray(myArray);
    }
    }
    myLV.load("file_esterno.txt");

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    44
    Da un ora guardo e riguardo il codice che mi hai suggerito ma non capisco. Mi si scusi ma è il primo progetto con Action Script a cui lavoro.

    Se non sbaglio così facendo posso utilizzare l'array che contiene i dati esterni solo una volta, all'evento onLoad di LoadVars.

    Io devo visualizzare quei dati continuamente negli stessi tre box di testo al passaggio del mouse sul relativo oggetto. Da qui l'idea di metterli in un array per poi ripescarli tramite la funzione che ho postato prima.

    Ci dev'essere un passaggio che mi sfugge...
    Non sei veramente finito fino a quando hai una buona storia da parte e qualcuno a cui raccontarla!

  10. #10
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    >>Da un ora guardo e riguardo il codice che mi hai suggerito ma non capisco. Mi si scusi ma è il
    >>primo progetto con Action Script a cui lavoro.

    figurati, ci siamo passati tutti

    >> Se non sbaglio così facendo posso utilizzare l'array che contiene i dati esterni solo una volta,
    >> all'evento onLoad di LoadVars.

    diciamo di sì... ma anche no

    ti spiego, l'evento onLoad viene richiamato in maniera automatica ogni volta che viene invocati il metodo load, perciò modificando la funzione useArray e richiamando di nuovo la riga del load(), ad esempio da un pulsante, gli fai fare altre azioni utilizzando lo stesso array... spero che sia chiara questa cosa...

    >> Io devo visualizzare quei dati continuamente negli stessi tre box di testo al passaggio del
    >> mouse sul relativo oggetto. Da qui l'idea di metterli in un array per poi ripescarli tramite la
    >> funzione che ho postato prima.

    perfetto, quindi userai presumibilmente l'evento onRollOver degli oggetti su cui passi

    >> Ci dev'essere un passaggio che mi sfugge...

    in effetti anche a me... di quello che devi fare e di come è attualmente organizzato il tuo stage... ad esempio questi oggetti su cui passi cosa sono?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.