Help with FasterCSV monkey patch

A

Alfredo Mesen

Hello, I've been trying to monkey patch FCSV to allow escaped colsep
characters within a field:

FCSV.parse "here\\, it is, other fields" #need: [["here\\, it is",
"other fields"]]
^

So what I tried was modifying the :csv_row regexp on the init_parsers
method


1797: ([^#{esc_quote}#{esc_col_sep}]*) # unquoted fields


which I changed with this:

1797: ((?>[^#{esc_quote}#{esc_col_sep}]*
1798: \\#{esc_col_sep}
1799: [^#{esc_quote}#{esc_col_sep}]*)*) # unquoted fields

This didn't work though :(, though my gut tells me I'm close ;)

Thanks in advance for any help with this :)
 
G

Gregory Brown

Hello, I've been trying to monkey patch FCSV to allow escaped colsep
characters within a field:

FCSV.parse "here\\, it is, other fields" #need: [["here\\, it is",
"other fields"]]
^

Is there a reason why you can't use normal CSV quoted text escaping?
=> [["here, it is", " other fields"]]

-greg
 
A

Alfredo Mesen

Gregory said:
Is there a reason why you can't use normal CSV quoted text escaping?
=> [["here, it is", " other fields"]]

-greg

Unfortunately yes, the parsing on the app I'm working on has to be
foolproof, allowing such otherwise-invalid format.
 
J

James Gray

Hello, I've been trying to monkey patch FCSV to allow escaped colsep
characters within a field:

FCSV.parse "here\\, it is, other fields" #need: [["here\\, it is",
"other fields"]]

My advice is don't do this, unfortunately. :(

I've tried to add this feature to FasterCSV multiple times now. It's
very hard and I haven't been able to find a good way to do it for
general cases. I fully admit this is a failing of FasterCSV, it's
very dependent on the proper CSV format.

You probably have three reasonable choices:

* Feed FasterCSV a line at a time, rescue the MalformedCSVError, and
switch strategies on those lines
* Preprocess all lines to be sure they are valid CSV and then hand
them off
* Build your own parser

Sorry I wasn't more help.

James Edward Gray II
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,774
Messages
2,569,596
Members
45,135
Latest member
VeronaShap
Top