node.js使用lazy解析csv文件

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

我有以下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.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上唯一有效的行分隔符,因此应该设计出体面的纯文本解析解决方案来处理它,尽管它可能会很烦人。