Re: [[email protected]: Re: to csv or not to csv]
Emmanuel Pacaud <[email protected]> Tue, 06 Oct 2020 07:12:15 +0200
| Newsgroups | gmane.comp.gnome.apps.gnumeric |
|---|---|
| Message-ID | <[email protected]> |
Hi,
While reading this message exchange, I was a bit on the side "CSV is
helpfull, but troubles are not far away". As a french locale user, my
favorite issue is number internationalization.
And I have stumbled upon this article:
<https://arstechnica.com/tech-policy/2020/10/excel-glitch-may-have-caused-uk-to-underreport-covid-19-cases-by-15841/>
Cheers,
Emmanuel.
Le lun. 5 oct. 2020 à 12:09, User Hayden via gnumeric-list
<[email protected]> a écrit :
>
> I'm in statistics and grab CSV files from all over the world. Like
> John, I have experienced very few problems. I usually open these in a
> spreadsheet, clean as needed, then save as CSV and open in R. Any
> problems are usually because the creator did not follow the rules,
> vague tho they may be. I also find it a huge advantage that most CSV
> files can be opened in a plain text editor and are not full of cryptic
> markup or, worse, are binary files. To me CSV files seem much less
> troublesome than any spreadsheet file format.
>
>
>
> ----- Forwarded message from John Denker via gnumeric-list
> <[email protected] <mailto:[email protected]>> -----
>
> Date: Mon, 5 Oct 2020 08:19:11 -0700
> From: John Denker via gnumeric-list <[email protected]
> <mailto:[email protected]>>
> To: gnumeric-list <[email protected]
> <mailto:[email protected]>>
> Subject: Re: to csv or not to csv
> User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101
> Thunderbird/68.10.0
>
> On 10/4/20 8:34 PM, aguelzow wrote:
>>
>> The issue is that csv is not very well defined.
>
> That has never been a problem in the work that I do.
> I can send and receive .csv with no problems.
>
>> So define your own text file format
>
> 1) As previously stated, literally every day I receive CSV files
> from outside sources. The format is their choice, not mine.
>
> 2) So I hereby define my own personal text file format to be
> comma separated values, as defined in RFC 4180 with a couple
> of well-known relaxations(*).
>
> <https://tools.ietf.org/html/rfc4180>
>
> I do not see any advantage to choosing any other text-file format.
> Any other choice would be *less* standardized and *less* portable.
>
> *) The relaxations are:
> -- <CR> at end of line is optional. That is, unquoted <LF> is
> accepted in lieu of the RFC <CR><LF>. Every CSV parser I've
> ever seen accepts this.
> -- The RFC requirement that all lines have the same number of fields
> is not enforced.
>
> ==========================================
>
>
> On 10/4/20 8:26 PM, Tim Chase wrote:
>>
>> CSV files come with lots of potential issues, mostly revolving
>> around
>> a lack of standardization:
>>
>> - encoding may or may not be specified (is this UTF8? UTF16? UTF32?
>> Latin1? Windows-1252? any of a gazillion other encodings?)
>
> That has never been a problem for me. I doubt it is much of a problem
> for anybody else. CSV is transparent and agnostic to any of the byte-
> based encodings you mention, because the only characters it cares
> about
> are <comma>, <doubleQuote>, and unquoted <CR><LF> ... which are the
> same
> in UTF-8, Latin1, Windows-1252, and a great many other encodings.
>
>> - how do you quote the quote character (doubling it, escaping with a
>> backslash, encoded with some other escape method, ...)
>
> You double it, as specified in the RFC.
> This has never been a problem in the work that I do.
>
>> - does it distinguish between an empty value and an empty quoted
>> value? (sometimes the former means Null while the latter means an
>> empty string; other times they're the same)
>
> a) In accordance with the RFC, CSV does not distinguish.
>
> b) FWIW I have a C++ version of the parser that is templated. You can
> ask it to return strings *or* a derived class (derived from string)
> that
> has an extra bit that says whether the value was quoted. This allows
> me
> to write a program that performs the identity transformation on CSV
> files,
> not just semantically identical but verbatim and literatim identical.
> I
> have never used this feature except for the exceedingly narrow
> purpose of
> testing the parser. So again I say, this has never been a problem in
> the
> work that I do.
>
>> - should one expect headers? If so, does case matter? Does order
>> matter? (I often have columns move around but if accessed by
>> header, they're adequately consistent)
>
> Sometimes there are headers. Sometimes not. Sometimes there are
> headers
> that can be ignored. This has never been a problem in the work that I
> do.
>
>> - can more than one column have the same header?
>
> The RFC doesn't say. This is a higher-level issue, above the CSV
> layer.
>
>> - what should happen if a row has fewer entries than the header row?
>
> The RFC says the array should be rectangular. However, world does not
> end
> if the array is non-rectangular:
>
> An,old,silent,pond
> A,frog,jumps,into,the,pond???
> Splash!,Silence,again.
>
> The lack of headers and the non-rectangularness is not an issue for
> the CSV
> parser.
>
>> - what should happen if a row has *more* entries than the header
>> row?
>
> See previous answer.
>
> Also note that I have a utility that operates at the aforementioned
> higher level, taking a rectangular CSV file with headers and converts
> it to SQL. This higher level requires the headers to be well behaved,
> but again this is not within the remit of the CSV parser.
>
>> - what should happen if there's no header row, but rows don't have
>> the same number of columns?
>
> See above.
>
>> - parsing with some tools like awk(1) can become tedious when the
>> comma-delimiter can appear within the data (so you have to
>> special-case the quoting)
>
> That is one of the eleventeen reasons why I don't use awk to parse CSV
> files. I use perl and C++. I have libraries that parse CSV properly.
>
>> - is the end-of-line character a Unix "LF", a DOS "CR/LF", an old
>> Mac
>> "CR", or the largely-unused Record Separator (RS=0x30)
>
> The RFC mandates <CR><LF> but plain <LF> is AFAICT universally
> accepted
> also.
>
>> - what happens if data contains newlines in it? does odd quoting
>> mean that the row is continued on the next line?
>
> The RFC makes it clear that newlines can appear in quoted strings.
> This is not an issue in the work that I do. I have never encountered
> a quoted newline except when testing my parser.
>
>> - sometimes things are called CSV when they use alternate delimiters
>> such as tab (though often called TSV files), pipe, colon, or
>> whatever other delimiter character that comes up on a whim
>
> This is not a problem in the work that I do.
> It is not a problem with CSV.
> Garbage in, garbage out.
>
>> - the data is largely 2d only, so there's no mechanism for including
>> multiple sheets of data other than multiple files
>
> That brings us back to my original question: Suppose I have multi-
> dimensional data. What format should I use for exporting it from
> gnumeric?
>
>> If you know the answers to those questions above for your data in
>> question or haven't hit any of those issues, and you know that the
>> file-format is predictable, then I would treat the "don't use CSV
>> files" as more of an admonition to know what you're doing.
>
> OK.
>
> Please consider the possibility that I sometimes know what I'm doing.
>
>> if something breaks, you get to keep all the pieces. It's an
>> unfortunately underdefined (but common) means for transmitting data.
>> There are better ways, but <opinion class=controversial>like PHP,
>> JavaScript, and MySQL, they are used because they're popular, not
>> because they're particularly good; I use PHP, JavaScript,
>> MySQL, and CSV files for their ubiquity, not their
>> excellence.</opinion> So use guilt-free, but use with caution.
>
> Is there a way to export SQL from gnumeric? I don't see it mentioned
> in the documentation.
>
> By javascript I assume you mean JSON. Have you had good luck parsing
> that using awk? Is there a way to export JSON from gnumeric?
> _______________________________________________
> gnumeric-list mailing list
> [email protected] <mailto:[email protected]>
> <https://mail.gnome.org/mailman/listinfo/gnumeric-list>
>
> ----- End forwarded message -----
>
> --
>
> _
> | | Robert W. Hayden
> | | 5 Howard Street, Apartment 206
> / | Wilton, New Hampshire 03086 USA
> | |
> | | email: bob@ the site below
> / | website: http://statland.org <http://statland.org/>
> | x /
> ''''''
>
>
> _______________________________________________
> gnumeric-list mailing list
> [email protected] <mailto:[email protected]>
> <https://mail.gnome.org/mailman/listinfo/gnumeric-list>
_______________________________________________
gnumeric-list mailing list
[email protected]
https://mail.gnome.org/mailman/listinfo/gnumeric-list