Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JavaScript CSV Parser Library [closed]

Is there a decent CSV Parser library for JavaScript? I've used this and that solution so far. In the first solution a new line is never created as a new sub-array, also the code tells so and the second solution does not work on text files formatted in Windows with <CR><LF> , respectively \r\n

Is it sufficient to apply

text = text.replace("\r","");

to the Windows CSV files? This actually works, but I think this is a little bit quirks. Are there csv parser which are more common than a random bloggers solution?

like image 201
Konrad Reiche Avatar asked Feb 23 '23 09:02

Konrad Reiche


2 Answers

Here's the 'easy' solution

csv.split(/\r\n|\r|\n/g)

It handles:

  • \n
  • \r
  • \r\n
  • \n\r

Unfortunately, it breaks on values that contain newline chars between delimiters.

For example, the following line entry...

"this is some","valid CSV data","with a \r\nnewline char"

Will break it because the '\r\n' will be mistakenly interpreted as the end of an entry.

For a complete solution, your best bet is to create a ND-FSM (Non-Deterministic Finite State Machine) lexer/parser. If you have ever heard of the Chomsky Hierarchy, CSV can be parsed as a Type III grammar. That means char-by-char or token-by-token processing with state tracking.

I have a fully RFC 4180 compliant client-side library available but somehow I attracted the attention of a delete-happy mod for external linking. There's a link in my profile if you're interested; otherwise, good luck.

I'll give you fair warning from experience, CSV looks deceptively easy on the surface. After studying tens/hundreds of implementations, I have only seen 3 javascript parsers that did a reasonable job of meeting the spec and none of them were completely RFC compliant. I managed to write one but only with the help of the community and lots and lots of pain.

like image 169
Evan Plaice Avatar answered Mar 06 '23 08:03

Evan Plaice


If you're working in Node, there's an excellent CSV parser that can handle extremely large amounts of data (>GB files) and supports escape characters.

If you're working in browser JS, you could still extract the processing logic from the code so that it operates on a string (instead of a Node Stream).

like image 39
josh3736 Avatar answered Mar 06 '23 08:03

josh3736