sassoftware / ci360-download-client-python

ci360 data download client program using Python
Apache License 2.0
14 stars 11 forks source link

Get csv file with quotation option #2

Open marcosarmas opened 4 years ago

marcosarmas commented 4 years ago

Hi,

I'm working with this client to download Discover data, but I'm having problems choosing a good delimiter, there is a way to quote the text fields?

thanks,

Marcos.

andybouts commented 4 years ago

I am having the same issue. When using the standard "|" as the delimiter, the "visit_details.csv" and "page_details.csv" are failing to import using the Viya based /SASDataExplorer and the error leads me to believe that some of the fields have a | int he field.

One way to get around this is as marcosarmas mentioned, which is to encapsulate the text fields in " so that, in this example, "b|ar" is not parsed into two fields: |"foo"|"b|ar"|

Otherwise, unless I am missing something, the options are to use a multi-character delimiter such as |^| or find a character that's unique enough to be a delimiter.

Do you have other advice?

andybouts commented 4 years ago

Hi Marcos, I figured out a workaround yesterday. It seemed that every single special character that was a standard ASCII character was also in my dataset, so we used a multi-character delimiter to ensure we had good field boundaries (using the -cd parameter): $ python discover.py -m detail -svn 4 -a yes -cd "|;|" -cf yes -st 2020-08-15T00 -et 2020-09-01T00

We later learned of a limitation in the application we were using to import the data, so we used sed to replace |;| with the CTRL-A special character equivalent of \x01

--- Request to the developers --- please include a parameter(s) to allow for quoting the field boundaries to account for the situation where a delimiter could exist inside the field value ... as I understand it, the you can pass an option (quote full or quote partial) to the standard: csv.writer(…… quoting=csv.QUOTE_ALL)

marcosarmas commented 4 years ago

Hi Andy,

Great solution! I go to try it!

Cheers.