Документация парсера CSV - PullRequest
0 голосов
/ 26 ноября 2018

Я уже некоторое время использую fast-csv в качестве библиотеки конвертера.Проблема возникла, когда клиент фактически пытался загрузить файлы CSV, которые на самом деле содержали ';'в качестве разделителя вместо значения по умолчанию ','.В документации NPM явно сказано, что все методы должны принимать «опцию» (не понимаю, почему не объект) для фактического переключения этих флагов.Конечно, я всегда могу зайти в исходный файл js и вручную изменить разделитель, но мне бы очень хотелось понять эту документацию, поскольку она является частью моего роста как разработчика, но все же я не могу понять, какна самом деле использовать эти параметры (разделитель) при анализе его в моем коде.Если никто из вас, ребята, не может понять это, может быть, у вас есть какие-то рекомендации относительно парсеров CSV на JavaScript?Может быть, ручной сценарий был бы более универсальным и полезным?

Пример документации от (fast-csv на npm):

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 голосов
/ 26 ноября 2018

В документации NPM прямо сказано, что все методы должны принимать «опцию» (не понимаю, почему не объект) для фактического переключения этих флагов

Цитированный текст в основном означает, чтовсе методы принимают так называемый объект options в качестве последнего параметра.Вы можете указать альтернативный разделитель, установив соответствующее поле в этом объекте.

, но я бы очень хотел понять эту документацию, так как она является частью моего роста как разработчика

Я настоятельно рекомендую проверять тесты всякий раз, когда вы чувствуете, что что-то непонятно объяснено в документации.На самом деле есть тестовый сценарий для точного сценария, который вы описываете:

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