CSV解析器文档

时间:2018-11-26 01:09:32

标签: javascript node.js csv npm fs

一段时间以来,我一直在使用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:我尝试过在其他地方(软件包发布的位置)询问它,但没有回复。

1 个答案:

答案 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();
        });
});