2016-04-23 34 views
5

Temelde benim kod aşağıdaki gibi kurdunuz:nasıl bir .txt dosyası üzerinden döngü ve javascript değerleri almak için

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 
: bana verecek

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 (metin)

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 

Bu dosya cvs tarzındadır: burada

Ve stop.txt dosyasında içeriğin benziyor nasıl. İstediğim, dizideki her öğenin stop_name, stop_id, stop_code, stop_long .... öğelerini almak. çok iyi olurdu javascript Promise api kullanarak

+0

_ "çok iyi olurdu javascript Promise api kullanma" _ Promise' 'kullanılması gerekli değildir orijinal soruda açıklanan beklenen sonuç döndürür. Http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call/ – guest271314

cevap

3

Sen converttxttoArray de RegExp/\n+/ kullanabilirsiniz; Array.prototype.shift() kaldırmak için, ilk madde stop_list dizisini saklayın; Dize bir diziye dönüştürmek için RegExp/,/ ile .split(); .indexOf() kullanarak stop_list içinde kaldırılan ilk öğe içinde "stop_name" dizinini almak; Array.prototype.map(), 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 kalanı içinde "stop_name" endeksi kalemi iade için parametre olarak /,/ ile .split()http://plnkr.co/edit/dhr6hQAb151c8oFBTvqk?p=preview

+0

İşlerinize teşekkürler. Bu bir ** javascript Pomise ** ile yapılabilir mi? –

+0

@ObasiObenyOj ['Promise'] 'un kullanım amacı nedir? (Https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)? – guest271314

+0

Eski zaman uyumsuz görevleri (XMLHttpRequest) için. Yukarıdaki kod BTW harika ama bu uyarıyı alırsınız: _Synchronous XMLHttpRequest son kullanıcının deneyimine zararlı etkileri nedeniyle ana iş parçacığı için kullanımdan kaldırılmıştır. Daha fazla yardım için https://xhr.spec.whatwg.org/._ adresini ziyaret edin https://xhr.spec.whatwg.org/._ –