我正在尝试使用fast-csv库解析csv文件,并将每个值、数字或字符串转换为创建2d数组。但是我不能在ReadStream中返回数组。你能给我关于我的代码的建议吗?
const fs = require("fs");
const csv = require("fast-csv");
async csvParse(){
let array = [];
options = {
map(value){
// convert value's column type to number or string
}
}
fs.createReadStream(csvfile)
.pipe(csv.parse(options))
.on("error", error => console.log(error))
.on("data", data => array.push(data))
.on("end", function(){
console.log(array);
return array;
})
}输入
name,date,score,id
John,2020-01-01,1000,10预期-输出
[["name", "date", "score", "id"], ["John", "2020-01-01", 1000, 10]]实际输出
// no output我希望代码返回从"input“转换而来的”expect -output“,但它没有返回任何结果。我知道这是因为我试图从()上的匿名函数返回一个值,但是我不知道正确的方法。
发布于 2020-06-28 23:36:12
您可以将文件流的处理和csv转换封装在promise中,并在发出end-event后解析promise:
const fs = require("fs");
const csv = require("fast-csv");
function csvParse() {
const options = {
// your options here
}
let array = [];
return new Promise((resolve, reject) => {
fs.createReadStream(csvfile)
.pipe(csv.parse(options))
.on("error", error => reject(error))
.on("data", data => array.push(data))
.on("end", () => {
console.log(array);
resolve(array);
});
});
}然后这样叫它:
(async() => {
const result = await csvParse();
})();https://stackoverflow.com/questions/62623542
复制相似问题