我想使用npm“csv”sync API通过解析将CSV值存储到对象变量中。
// Read the CSV file synchronously
const csvData = fs.readFileSync(csvFilePath, "utf-8");
// Parse the CSV data synchronously
const parsedData = parse(csvData, {
delimiter: ",",
skip_empty_lines: true,
skip_records_with_error: true,
skip_records_with_empty_values: true,
cast: function (val, ctx) {
if (ctx.header) {
return val;
}
if (!val.length) {
return undefined;
}
switch (ctx.index) {
case 0:
return new Date(val);
default:
return Number(val).toFixed(2);
}
},
columns: true,
trim: true,
});
这里是代码
if (!val.length) {
return undefined;
}
不是我想要的那样。我试图跳过所有的记录,其中任何领域是空的,例如:string,,,,
。使用skip_records_with_empty_values
对我不起作用,因为它不是任何字段丢失,而是值丢失。我尝试返回null
和undefined
。什么都不管用
所以我现在的问题是,我如何简单地有条件地过滤掉,而不必对结果使用过滤器?
编辑:我尝试过使用“csv”和“csvtojson”包来实现这一点,但我似乎无法找到一种简单的方法来预构建包本身。
1条答案
按热度按时间bxfogqkk1#
如果您想过滤掉CSV文件中任何字段缺少值的记录,可以修改解析逻辑来实现这一点。您可以在将解析后的数据存储到对象变量中之前手动过滤解析后的数据,而不是使用skip_records_with_empty_values选项。
下面是一个更新的代码片段,其中包括手动过滤步骤:
在解析CSV数据之后,检查
parsedData
数组中是否每个记录中的任何值未定义。如果定义了所有值(即没有缺失值),则该记录将包含在filteredData
数组中。最后,filteredData
存储在对象变量filteredObject
中。这样,您就可以手动过滤掉记录,而不必仅依赖
skip_records_with_empty_values
选项。