2016-04-23 4 views
5

Im Grunde habe ich mein Code wie folgt ein:Wie durch eine TXT-Datei in einer Schleife und die Werte in Javascript bekommen

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 (Text) wird mir nur geben:

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 

Und hier ist, wie der Inhalt in meiner stop.txt Datei wie folgt aussehen:

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 

Diese Datei im cvs Stil. Was ich will ist, um die stop_name, stop_id, stop_code, stop_long .... von jedem Element im Array zu bekommen.

Javascript Versprechen api verwenden würde

+0

_ "mit JavaScript Versprechen api wäre toll" zurückzukehren _ Verwendung von 'Promise' ist nicht notwendig, Rückkehr erwartetes Ergebnis bei der ursprünglichen Frage beschrieben. Siehe http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call/ – guest271314

Antwort

3

Sie kann groß sein RegExp/\n+/ bei converttxttoArray verwenden; Array.prototype.shift() zu entfernen, erste Artikel stop_list Array zu speichern; .split() mit RegExp/,/, um eine Zeichenfolge in ein Array zu konvertieren; Index von "stop_name" innerhalb entfernten ersten Artikel innerhalb stop_list mit .indexOf() abrufen; Array.prototype.map(), .split() mit /,/ als Parameter bei Index von "stop_name" im Rest von 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

Funktioniert gut danke. Kann das mit einem ** Javascript Pomise ** gemacht werden? –

+0

@ObasiObenyOj Was wäre der Zweck der Verwendung von ['Promise'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)? – guest271314

+0

Für ältere asynchrone Tasks (XMLHttpRequest). BTW der obige Code ist groß, aber ich bekomme diese Warnung: _Synchronous XMLHttpRequest auf dem Hauptthread ist wegen seiner schädlichen Auswirkungen auf die Erfahrung des Endbenutzers veraltet. Für weitere Hilfe, überprüfen Sie https://xhr.spec.whatwg.org/._ –