aichbauer / node-convert-csv-to-array Goto Github PK
View Code? Open in Web Editor NEWConvert a csv formatted string to an array
License: MIT License
Convert a csv formatted string to an array
License: MIT License
EXAMPLE: YES,NO,1.23E+10,1.23E+03,string,-30,8599,-0.2,8599,26.5
It gives 1 for the scientific notation number.
Example:
const { convertCSVToArray } = require('convert-csv-to-array');
const s = "1,2,3\n4,5,6";
let a = convertCSVToArray(s, {
type: "array",
separator: ","
});
a
will be set to [[1,2,3]]
instead of [[1,2,3],[4,5,6]]
.
Actually there are no test cases for a conversion without a header, and I think it is not working correctly right now.
Hi, I am using convert-csv-to-array
(1.0.3) to write scripts to process my data. It works perfect for many times but this time I found some wired output parsing my csv.
After some test, here are two use cases this package can not handle:
const { convertCSVToArray } = require('convert-csv-to-array')
const data = `"post_title","post_name","meta_value"
"a","x",1
" b ","y",2
"c","z",3`
const out = convertCSVToArray(data, {
header: false,
separator: ','
});
console.log('out', out)
Output:
[
{
'"post_title"': '"a"',
'"post_name"': '"x"',
'"meta_value"': '1\n" b "',
undefined: 2
}
]
const { convertCSVToArray } = require('convert-csv-to-array')
const data = `"post_title","post_name","meta_value"
"a,b","x",1`
const out = convertCSVToArray(data, {
header: false,
separator: ','
});
console.log(out)
Output:
[]
So I started to read the source code. I see this pr #8 which explained why we cannot split line by \n
. And I read the source code of node-csv and csv-parser. Seems it is much more complicated than I think to parse csv. Seems it is not easy to parse csv only using split because some cell may be surrounded by quotation marks and any content may appear between the quotation marks.
I hope this parsing issue can be fixed. This package is very helpful to me and I chose it instead of other csv processing packages because its API is very simple and it is perfect for most needs. One simple solution I can imagine is to call some other package to parse csv and keep the simple API to the users.
After installing the library in my React/TypeScript project, I get this error:
Could not find a declaration file for module 'convert-csv-to-array'. 'path/to/project/node_modules/convert-csv-to-array/lib/index.js' implicitly has an 'any' type.
Try npm i --save-dev @types/convert-csv-to-array
if it exists or add a new declaration (.d.ts) file containing declare module 'convert-csv-to-array';
But no @types/conver-csv-to-array
in the Npm/Yarn registeries.
This is what I get when attempting to install the package with yarn add -D @types/convert-csv-to-array
:
error An unexpected error occurred: "https://registry.yarnpkg.com/@types%2fconvert-csv-to-array: Not found".
Hello,
I discovered that few websites generating reports create a csv where line looks like this
var row = 'facemask,45776607,name of product 30ml,15054,Facemask,"12,99 usd","90,71 usd","29,99 usd",53,59\n'
The thing is - that those few 3rd party platforms that generate reports, do not provide option to change delimiter, and your library fails to process such files - so I wrote small code snippet to change delimiter
var originalDelimiter = ',';
var newDelimiter = ';';
const changeDelimiter = (row, originalDelimiter = ',', newDelimiter = ';') => {
var regex = new RegExp('(?=")(.+?)"', 'g');
var superRows = row.split(regex);
var newRow = [];
superRows.forEach((separateRow) => {
// if first element contains " remove " and skip
if (separateRow.length && separateRow[0] === '"') {
newRow.push(separateRow.substring(1));
// if the row contain only originalDelimiter, dont add it - its an element like '"11,59","12,16"'
} else if (separateRow.length && separateRow === originalDelimiter) {
} else {
// regular line - remove last delimiter to not create empty objects out of it
if (separateRow.length && separateRow[separateRow.length - 1] === originalDelimiter) {
separateRow = separateRow.substring(0, separateRow.length - 1);
}
// regular line - remove first delimiter to not create empty objects out of it
if (separateRow.length && separateRow[0] === originalDelimiter) {
separateRow = separateRow.substring(1);
}
newRow.push(...separateRow.split(originalDelimiter))
}
})
console.log()
return newRow.join(newDelimiter);
}
console.log(changeDelimiter(row,originalDelimiter,newDelimiter));
it would be great to add it to the library as optional feature.
if you would agree, I could prepare a proper pull request, refactoring this a little :)
Best
/piku
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.