I am trying to read a csv file using node js. Her is my code
fs.readFile(config.csvUploadPath, function read(err, data) {
if (err) {
throw err;
From How to read data From *.CSV file using javascript?, use the jQuery-CSV library.
Note: The library is designed to handle any CSV data that is RFC 4180 compliant, including all of the nasty edge cases that most 'simple' solutions overlook.
var fs = require('fs');
var $ = jQuery = require('jquery');
$.csv = require('jquery-csv');
var sample = './path/to/data/sample.csv';
fs.readFile(sample, 'UTF-8', function(err, csv) {
$.csv.toArrays(csv, {}, function(err, data) {
for(var i=0, len=data.length; i<len; i++) {
console.log(data[i]); //Will print every csv line as a newline
}
});
});
code snippet from jquery-csv
's examples here.
I used a stream, fs
, and csv-parse
like in this answer:
const parse = require('csv-parse')
const fs = require('fs')
const data = []
fs.createReadStream(filename)
.pipe(parse({ delimiter: ',' }))
.on('data', (r) => {
console.log(r);
data.push(r);
})
.on('end', () => {
console.log(data);
})
Use a library, CSV has lots of gotchas. I have come to enjoy the package csv
. It is located here: https://www.npmjs.com/package/csv . Here is a very quick example using the async api.
const fs = require('fs')
var parse = require('csv-parse')
fs.readFile(inputPath, function (err, fileData) {
parse(fileData, {columns: false, trim: true}, function(err, rows) {
// Your CSV data is in an array of arrys passed to this callback as rows.
})
})
Since your file does not have multiple values per row and contains no delimiters besides newline, it is only trivially CSV. Maybe String.prototype.split()
is for you?
const fs = require('fs')
fs.readFile(inputPath, 'utf8', function (err, data) {
var dataArray = data.split(/\r?\n/); //Be careful if you are in a \r\n world...
// Your array contains ['ID', 'D11', ... ]
})