2014-09-26 191 views
4

This question is close但不夠接近。Javascript使用File.Reader()逐行讀取

我的HTML5應用程序讀取一個CSV文件(儘管它也適用於文本),並在屏幕上顯示一些數據。

我的問題是,CSV文件可能是巨大的(我設法讓業務達成1GB的文件大小限制)。好消息是,我只需要在任何時候顯示來自CSV文件的數據的一些

的想法是一樣的東西(psudeo代碼)

var content; 
var reader = OpenReader(myCsvFile) 
var line = 0; 

while (reader.hasLinesRemaning) 
    if (line % 10 == 1) 
     content = currentLine; 
Loop to next line 

有關於如何閱讀CSV文件足夠的文章中,我使用

function openCSVFile(csvFileName){ 
    var r = new FileReader(); 
    r.onload = function(e) { 
     var contents = e.target.result; 
     var s = ""; 
    }; 
    r.readAsText(csvFileName); 
} 

,但我看不到如何在Javascript中一次讀取行,或者即使有可能。

我的CSV數據看起來像

Some detail: date, , 
More detail: time, , 
val1, val2 
val11, val12 
#val11, val12 
val21, val22 

我需要去掉第2行,並考慮如何處理該行以#開始(所以爲什麼我需要在通過行改爲做時間)

所以,除了加載到內存很多,我有任何選項一次讀取行嗎?

+0

http://papaparse.com/docs可能有所幫助,請使用預覽選項 – 2017-03-23 13:34:57

回答

4

目前還沒有readLine()方法來做到這一點。然而,一些想法探索:

  • 從blob讀取確實發生火災progress事件。儘管the specification並不要求引擎可能過早地填充類似於XMLHttpRequest的.result屬性。
  • Streams API草稿流式傳輸.read(size)文件讀取器的方法。不過,我認爲它不在任何地方實施。
  • Blob do a slice method它返回一個包含部分原始數據的新Blob。規範和操作的同步性表明這是通過引用完成的,而不是複製,並且應該是相當高效的。這將允許您逐塊讀取大文件。

不可否認,這些方法都不會自動停止在行尾。您需要手動緩衝塊,將它們分成幾行,並在完成後將它們移出。此外,這些操作正在處理字節,而不是字符,因此可能存在需要處理的多字節字符的編碼問題。

另請參閱:Reading line-by-line file in JavaScript on client side