2012-02-14 15 views
7

Ho un file di testo che si trova sul server che contiene un elenco di eventi con la loro ora di destinazione. Sembra qualcosa di simile al seguente:Leggi il file di testo in variabili con javascript

2012/02/11-10:00:00 EventStart Red 
2012/02/11-10:10:00 EventStop Green 
... 

Che cosa devo fare è in qualche modo leggere il file di testo e in base al tempo corrente selezionare il prossimo evento imminente e assegnare ogni elemento per quell'evento a una variabile. Quindi, ad esempio, se il momento è attualmente 2012.02.11-10: 08: 00, le variabili javascript time = '2012/02/11-10:10:00'; title = 'EventStop'; color = 'Green'; dovrebbero essere create.

sono in grado di leggere il file di testo con:

jQuery.get('schedule.txt',function(data){ 
    alert(data); 
}); 

solo che non so dove andare da lì, o se questo è anche il modo migliore per iniziare. Ho il controllo sulla formattazione del file di testo, quindi la modifica è un'opzione.

+5

Si presenta come un qualcosa che dovrebbe essere fatto sul server , non sul client. – gdoron

+0

@gdoron Concordato. – rcdmk

+0

@gdoron Sono d'accordo, ma in questo caso particolare deve essere fatto sul client. – codybuell

risposta

9

Tu dici è possibile modificare il contenuto del file, quindi suggerisco convertirlo in JSON (e separando la data/ora).

[{"date": "2012/02/11", "time": "10:00:00", "title": "EventStart", "color": "Red"}, {"date": "2012/02/11", "time": "10:10:00", "title": "EventStop", "color": "Green"}] 

Quindi è possibile utilizzare per ottenere getJSON/analizzarlo.

jQuery.getJSON('schedule.txt',function(data){ 
    // data is an array of objects 
    $.each(data, function(){ 
     console.log(this.title); // log each title 
    }); 
}); 

Da qui, è possibile leggere gli orari e capire quale è l'ultimo. Qualcosa del genere dovrebbe funzionare:

if(Date.now() <= Date.parse(this.date+' '+this.time)) 

Quindi, mettendo tutto insieme:

jQuery.getJSON('schedule.txt',function(data){ 
    var matchedSchedule = {}; 
    // data is an array of objects 
    $.each(data, function(){ 
     if(Date.now() <= Date.parse(this.date+' '+this.time)){ 
      matchedSchedule = this; // If time matches, set a variable to this object 
      return false; // break the loop 
     } 
    }); 
    console.log(matchedSchedule.title); 
    // to set a "global" variable, add it to `window` 
    window.eventTitle = matchedSchedule.title; 
}); 
+1

Impressionante. Ha riformattato il file di testo in JSON come suggerito e sono in grado di eseguire lo script sopra. Comunque non sto ricevendo l'ultima parte. Quindi, come posso interrompere la prima partita (per semplicità, l'ora corrente è inferiore a questo.time) e assegnare una variabile per ogni elemento (data, ora, titolo, colore)? – codybuell

+0

Se restituite false; nella funzione passata a '$ .each', interromperà il ciclo. Se il tempo corrisponde, allora puoi impostare le variabili e 'return false;'. –

+1

Questo ha fatto il trucco. Dovevo usare jQuery.ajax con async impostato su false invece di jQuery.getJSON altrimenti non riuscivo ad ottenere nessuna delle variabili impostate (anche usando window.varname ...). – codybuell

0

Sembra che tu abbia già fatto la parte difficile. Adesso analizza solo i dati che vengono restituiti.

jQuery.get('schedule.txt',function(data){ 
    yourParseFunction(data); 
}); 
+0

La sua parte difficile è l'analisi dei dati ... – gdoron

+0

Quindi con questa particolare rotta, come dovrei creare variabili globali dalla funzione? Quando provo a chiamare le variabili create all'interno di quella funzione, non sono definite. – codybuell

+0

risponde alla risposta di @ Rocket o hai ancora bisogno di una risposta? –

5

Senza cambiare il file di testo

$.get('sometext.txt',function(data){ 
    var perLine=data.split('\n'); 
    var myVars=[]; 
    for(i=0;i<perLine.length;i++) 
    { 
    var line=perLine[i].split(' '); 
    myVars[i]={ 
     'time':line[0], 
     'event':line[1], 
     'color':line[2] 
     } 
    } 
    console.log(myVars); 
    console.log(myVars[0].time); 
    console.log(myVars[0].event); 
    console.log(myVars[0].color); 
});