2016-04-23 24 views
5

Fondamentalmente ho il mio codice impostato in questo modo:Come ciclo attraverso un file .txt e ottenere i valori in javascript

function converttxttoArray(filename) 
{ 
    var reader = (window.XMLHttpRequest != null) 
       ? new XMLHttpRequest() 
       : new ActiveXObject("Microsoft.XMLHTTP"); 
    reader.open("GET", filename, false); 
    reader.send(); 
    return reader.responseText.split(/(\r\n|\n)/g); 
} 
var stop_list = converttxttoArray("../data/stops.txt"); 

    var text = ""; 
    var i; 
    for (i = 0; i < stop_list.length; i++) { 
     text += stop_list[i] + "<br>"; 
    } 

console.log (testo) sarà solo darmi:

stop_id,stop_code,stop_name,stop_lat,stop_lon,zone_id,stop_url,location_type,parent_station,platform_code,wheelchair_boarding 

70011,70011,San Francisco Caltrain,37.77639,-122.394992,1,http://www.caltrain.com/stations/sanfranciscostation.html,0,ctsf,NB,1 

70012,70012,San Francisco Caltrain,37.776348,-122.394935,1,http://www.caltrain.com/stations/sanfranciscostation.html,0,ctsf,SB,1 

Ed ecco come il contenuto nel mio file stop.txt assomigliare:

stop_id,stop_code,stop_name,stop_lat,stop_lon,zone_id,stop_url,location_type,parent_station,platform_code,wheelchair_boarding 
70011,70011,San Francisco Caltrain,37.77639,-122.394992,1,http://www.caltrain.com/stations/sanfranciscostation.html,0,ctsf,NB,1 
70012,70012,San Francisco Caltrain,37.776348,-122.394935,1,http://www.caltrain.com/stations/sanfranciscostation.html,0,ctsf,SB,1 
70021,70021,22nd St Caltrain,37.757599,-122.39188,1,http://www.caltrain.com/stations/22ndstreetstation.html,0,ct22,NB,2 
70022,70022,22nd St Caltrain,37.757583,-122.392404,1,http://www.caltrain.com/stations/22ndstreetstation.html,0,ct22,SB,2 
70031,70031,Bayshore Caltrain,37.709537,-122.401586,1,http://www.caltrain.com/stations/bayshorestation.html,0,ctba,NB,1 
70032,70032,Bayshore Caltrain,37.709544,-122.40198,1,http://www.caltrain.com/stations/bayshorestation.html,0,ctba,SB,1 
70041,70041,So. San Francisco Caltrain Station,37.65589,-122.40487,1,http://www.caltrain.com/stations/southsanfranciscostation.html,0,ctssf,NB,2 
70042,70042,So. San Francisco Caltrain Station,37.655946,-122.405018,1,http://www.caltrain.com/stations/southsanfranciscostation.html,0,ctssf,SB,2 
70051,70051,San Bruno Caltrain,37.631128,-122.411968,1,http://www.caltrain.com/stations/sanbrunostation.html,0,ctsb,NB,1 

Questo file è in stile cvs. Quello che voglio è ottenere lo stop_name, stop_id, stop_code, stop_long .... di ogni elemento dell'array.

Utilizzo di javascript Promessa api sarebbe grande

+0

_ "Utilizzo di javascript Promessa api sarebbe fantastico" _ L'utilizzo di 'Promise' non è necessario restituire il risultato previsto descritto alla domanda originale. Vedi http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call/ – guest271314

risposta

3

È possibile utilizzare RegExp/\n+/ a converttxttoArray; Array.prototype.shift() per rimuovere, memorizzare il primo elemento della serie stop_list; .split() con RegExp/,/ per convertire una stringa in un array; recuperare l'indice di "stop_name" all'interno del primo articolo rimosso entro stop_list utilizzando .indexOf(); Array.prototype.map(), .split() con /,/ come parametro per restituire l'articolo al indice dei "stop_name" nel resto del stop_list

window.onload = function() { 

    function converttxttoArray(filename) { 
    var reader = (window.XMLHttpRequest != null) 
       ? new XMLHttpRequest() 
       : new ActiveXObject("Microsoft.XMLHTTP"); 
    reader.open("GET", filename, false); 
    reader.onload = function() { 

     var stop_list = this.responseText.split(/\n+/); 
     var re = /,/; 
     var headers = stop_list.shift().split(re); 
     var index = headers.indexOf("stop_name"); 
     var res = stop_list.map(function(val, key) { 
     return val.split(re)[index]; 
     }); 
     console.log(res); 

     var text = ""; 
     var i; 
     for (i = 0; i < stop_list.length; i++) { 
     text += res[i] + "<br>"; 
     } 
     console.log(text); 
     document.body.innerHTML = text; 

    } 
    reader.send(); 

    } 
    converttxttoArray("stops.txt"); 

} 

plnkr http://plnkr.co/edit/dhr6hQAb151c8oFBTvqk?p=preview

+0

Funziona bene grazie. Questo può essere fatto con un ** javascript Pomise **? –

+0

@ObasiObenyOj Quale sarebbe lo scopo di utilizzare ['Promise'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)? – guest271314

+0

Per attività asincrone legacy (XMLHttpRequest). BTW il codice sopra è ottimo ma ottengo questo avvertimento: _Synchronous XMLHttpRequest sul thread principale è deprecato a causa dei suoi effetti dannosi per l'esperienza dell'utente finale. Per ulteriori informazioni, consultare https://xhr.spec.whatwg.org/._ –

Problemi correlati