2015-11-11 73 views
0

我想逐行閱讀一個大的csv文件,將製表符分隔的值解析成一個javascript對象,然後用這個對象做東西。這是一般的工作流程。爲什麼這個node-csv-parser事件偵聽器永遠不會觸發?

我可以讀取原始文件,但由於某種原因node-csv-parserreadable事件永遠不會發射。我看到很多string == ...日誌消息,但沒有parser readable消息。

import csv from 'csv'; 
import byline from 'byline'; 
import {createReadStream} from 'fs'; 

var readStreamByLine = byline(createReadStream(file)); 
readStreamByLine.on('data', function(chunk) { 
    var string = chunk.toString(); 
    console.log('string == ' + string); 
    var parser = csv.parse({ 
    delimiter: '\t' 
    }); 

    parser.write(string); 

    parser.on('readable',() => { 
    console.log('parser readable'); 
    while (csvdata = parser.read()) { 
     console.log(csvdata); 
    } 
    }); 
}); 

我在這裏錯過了什麼?

+0

你不需要署名。默認情況下,csv解析器將在您流式傳輸時返回一行。看看例子https://github.com/wdavidw/node-csv-parse/blob/master/samples/stream.js – tkone

+0

的權利,但如果我有一個非常大的csv文件,將不會整個文件的原始內容被存儲在內存中?我想避免這種情況,如果它是可行的。 –

+0

流解析器應該從磁盤流式傳輸它,因此它不應該一次加載整個文件到內存中。 – tkone

回答

0

剛剛找到了解決方案。我忽略了從example添加的最後一行:

parser.end();

相關問題