一段时间以来,我一直在使用fast-csv作为转换器库。当客户端实际尝试上传实际上包含';'的csv文件时出现问题。作为分隔符,而不是默认的','。 NPM文档明确指出,所有方法都应接受一个“选项”(不理解为什么不是对象)才能实际切换这些标志。当然,我总是可以进入源js文件并手动更改定界符,但是我真的很想了解这份文档,因为这是我成长为开发人员的全部时间,但是我仍然无法掌握如何在我的代码上解析时实际使用这些选项(定界符)。如果你们两个都听不懂,也许您对JavaScript的csv解析器有一些建议?也许手动脚本会更加通用和有用?
来自(npm上的fast-csv)的文档样本:
All methods accept the following options
objectMode=true: Ensure that data events have an object emitted rather than the stringified version set to false to have a stringified buffer.
headers=false: Set to true if you expect the first line of your CSV to contain headers, alternatly you can specify an array of headers to use. You can also specify a sparse array to omit some of the columns.
ignoreEmpty=false: If you wish to ignore empty rows.
discardUnmappedColumns=false: If you want to discard columns that do not map to a header.
strictColumnHandling=false: If you want to consider empty lines/lines with too few fields as errors - Only to be used with headers=true
renameHeaders=false: If you want the first line of the file to be removed and replaced by the one provided in the headers option - Only to be used with headers=[String]
delimiter=',': If your data uses an alternate delimiter such as ; or \t.
此外,这是一个示例代码,说明其工作方式以及如何使用它(通过管道):
var stream = fs.createReadStream("my.csv");
var csvStream = csv()
.on("data", function(data){
console.log(data);
})
.on("end", function(){
console.log("done");
});
stream.pipe(csvStream);
//or
var csvStream = csv
.parse()
.on("data", function(data){
console.log(data);
})
.on("end", function(){
console.log("done");
});
stream.pipe(csvStream);
PS:我尝试过在其他地方(软件包发布的位置)询问它,但没有回复。
答案 0 :(得分:1)
NPM文档明确指出,所有方法都应接受 一个“选项”(不明白为什么不是一个对象)进行实际切换 这些标志
引用的文本基本上意味着所有方法都将所谓的options
对象作为其最后一个参数。您可以通过在该对象中设置相应的字段来指定备用定界符。
但是我真的很想了解这份文档,因为它的全部 作为开发人员成长的一部分
我强烈建议您在文档中没有明确解释的地方查看tests。实际上,有一个针对您所描述的确切场景的测试用例:
it.should("support semicolon delimiters", function (next) {
var actual = [];
csv
.fromPath(path.resolve(__dirname, "./assets/test16.txt"), {headers: true, delimiter: ";"})
.on("data", function (data) {
actual.push(data);
})
.on("error", next)
.on("end", function (count) {
assert.deepEqual(actual, expected14);
assert.equal(count, actual.length);
next();
});
});