csv-validate: Validating CSV Parser
This JS CSV validating parser is based on csv-parse and csv-sniffer. It features data streaming, error tracing, and automatic identification of the CSV delimiters and quotes.
csv-validate
provides both NodeJS module (NPM), optional console UI (CLI), and browser/Web UI for the local validation of CSV files.
\author
Artem Lutov <lua@lutan.ch>
\affiliation
Zazuko GmbH, Lutov Analytics
\license
Apache 2
Web UI
The Web UI bundle is located in dist/
and consists of 3 files (and optional test.csv
example to test the web app):
dist/
index.html
styles.css
main.js
To build the Web UI, just execute npm run build
from the package directory, producing the main.js
bundle in dist/
. Afterward, open index.html
in your browser to use the web app:
CLI
Console UI provides the following interface:
$ npx csv-validate -h
Usage: csv-validate [options] <filename>
Options:
-r, --relax-column-count relax column count instead of emitting an error
-s, --skip-error-lines skip lines with errors instead of emitting an
error
-d, --delimiter <symbol> enforce specified CSV delimiter instead of
inferring it
-q, --quotes <l-r-quotes> left [and right if distinct] quote symbols instead
of inferring them (default: "")
-n, --new-line <string> enforce specified CSV new line (e.g., \r\n)
instead of inferring it
-e, --encoding <string> file encoding (default: "utf8")
-h, --help display help for command
To install it, execute:
$ npm install [-g] csv-validate
Otherwise, the executable can be called from the package sources as:
$ bin/csv-validate.js -h
NodeJS Module
The module interface abstracts csv-parse and csv-sniffer.
Interface
The main interface is represented by a single function (see index.js: Parser
):
static import (input: readable-stream.Readable, options: Object)
where the possible options are (see index.js: Parser constructor
):
relaxColumnCount: boolean,
skipLinesWithError: boolean,
delimiter: string,
quotes: string,
newLine: string
Usage
The interface can be used as follows:
const CsvValidatingParser = require('csv-validate"')
const { PassThrough } = require('readable-stream')
const input = new PassThrough()
input.write('key1,key2\n')
input.write('value1_1,value2_1\n')
input.write('value1_2,value2_2\n')
input.end()
CsvValidatingParser.import(input, { newLine: '\n' })
See test/interface.test.js for more examples.