【发布时间】:2018-07-23 09:11:51
【问题描述】:
我正在使用 fast-csv 读取 csv 文件,但我的文件格式与 fast-csv 的预期不完全一致:
First line with some details (not important)
Second line with header
Third line with data
Fourth line with data
...
我是怎么读的:
const csv = require('fast-csv');
const stream = fs.createReadStream('myfile.csv');
const csvStream = csv
.fromStream(stream,
{
headers: true,
delimiter: ',',
rowDelimiter: '\n',
quoteHeaders: false,
quoteColumns: false
})
.on("data", data => {
// i do something with datas
})
.on("error", error => {
console.log("CSV is invalid !", error);
})
.on("end", data => {
console.log("End of parsing");
console.log(data);
});
这里的问题是
标题:真,
将查找第一行作为标题,这就是我要删除第一行或忽略它的原因。怎么做 ? (我知道我可以在没有第一行的情况下读取文件并写入文件,但我认为这不是正确的方法......)
版本: 节点 v10.0.0 & fast-csv 5.6.0
编辑:使用@Anders Carstensen 示例进行测试:
const file = 'myfile.csv';
const fs = require("fs");
const stream = fs.createReadStream(file, {
encoding: 'utf8'
});
stream.on('readable', () => {
// Read through the stream until we encounter a new line
let chunk;
while (null !== (chunk = stream.read(1))) {
if (chunk == '\n'){
console.log('line break');
break;
}
}
console.log('test');
// CSV parsing
const csvStream = csv.fromStream(stream,
{
renameHeaders: false,
headers: true,
delimiter: ',',
rowDelimiter: '\n',
quoteHeaders: false,
quoteColumns: false
})
.on("data", data => {
console.log(data);
})
.on("error", error => {
console.log("CSV invalid !", error);
})
.on("end", data => {
console.log("End of parsing");
console.log(data);
});
});
输出:
line break
test
line break
test
Edit2:检查@Anders Carstensen 的解决方案答案(问题是使用 .on 而不是 .once)
【问题讨论】:
-
来自文档:renameHeaders=false:如果您希望文件的第一行被删除并替换为 headers 选项中提供的行 - 仅用于 headers=[String]
-
您在此处打印值而不是数据,因此上述代码存在参考错误
-
@Margon 这意味着它将第一行替换为另一个 in headers 选项(当您将错误的标题作为第一行时使用此选项,而不是在我的情况下)。我已经联系了 fast-csv,他们告诉我使用 fast-csv 选项不可能做我想做的事,但感谢您的尝试 :-)
-
@sreepurna 是的,我写这篇文章的时候很糟糕,我用正确的版本编辑了 thx
标签: javascript node.js csv