node.js使用lazy解析csv文件
我有以下node.js代码:node.js使用lazy解析csv文件,node.js,csv,lazy-evaluation,Node.js,Csv,Lazy Evaluation,我有以下node.js代码: new lazy(fs.createReadStream('file.csv')) .lines .forEach(function(line){ console.log(line.toString()); }); 但是,我只能通过这种方式获取最后一行数据。 csv文件的内容如下所示: 123,破损 12345,被盗 1234567,丢失 我做错了什么 对于同一个文件,我还有以下代码: fs.readFile(req.files.file.pa
new lazy(fs.createReadStream('file.csv'))
.lines
.forEach(function(line){
console.log(line.toString());
});
但是,我只能通过这种方式获取最后一行数据。
csv文件的内容如下所示:
123,破损12345,被盗
1234567,丢失 我做错了什么 对于同一个文件,我还有以下代码:
fs.readFile(req.files.file.path, 'utf8', function (err, data) {
if (err) throw err;
var lines = data.split(/\r?\n/);
console.log(lines);
});
返回以下数组:
[ '123,broken\r12345,stolen\r1234567,lost' ]
\r\n
、\n
和\r
都是有效的行尾,因此您需要准备对所有行尾进行拆分
在执行拆分之前,将它们全部转换为公共值。比如:
var lines = data.replace(/\r\n?/g, "\n").split("\n");
因此,您的文件已损坏,它应该是
\r\n
而不仅仅是\r
;您自己的测试也证明了这一点。库(和您的data.split()
)查找\r\n
(回车,换行符)或\n
(换行符)。但是,您的csv文件使用\r
作为行分隔符。这是错误的;编写csv文件时使用\r\n
或\n
\r
是OS X之前MacOS上唯一有效的行分隔符,因此应该设计出体面的纯文本解析解决方案来处理它,尽管它可能会很烦人。