【发布时间】:2021-03-18 22:07:26
【问题描述】:
我正在尝试使用 csv-parser 库读取带有 node.js 的 CSV 文件。
由于它是一个大文件,我需要检查标题和第一行 100 并停止该方法,如果一切正常,则返回 true,如果数据不符合条件,则返回 false。
我怎样才能做到这一点?
这是我目前所拥有的:
const csv = require('csv-parser');
const fs = require('fs');
exports.checkFileFormat = (file) => {
let stream = fs.createReadStream(file.tempFilePath)
.pipe(csv())
.on('headers', (headers) => {
/*...some logic...*/
})
.on('data', (row) => {
if (!typeof (row["USAGE"]) == 'number'
|| !moment(row["START_DATE"], 'YYYYMMDD', true).isValid()
|| !moment(row["END_DATE"], 'YYYYMMDD', true).isValid()) {
stream.unpipe(csv());
return false;
}
})
.on('end', () => {
console.log('CSV file successfully processed');
});
return true;
}
在之前的版本中,我还声明了:var num = 100 并在 .on('data', (row) => {...} 内部对其进行了测试,但它不起作用。
【问题讨论】:
-
使函数
checkFileFormat返回一个承诺。在 promise 内部,'.on('end')回调中的resolve(false)代替了return false和resolve(true)。我不完全确定这会奏效,但这就是我的处理方式 -
我亲自测试了我的答案,它按预期工作。唯一的问题在于
stream.close()函数,它显然不存在
标签: javascript node.js filestream node-csv-parse