July 17, 2024
Why isn’t there a good file format for tabular information?

Tabular information is in every single place. I assist studying and writing tabular information in varied codecs in all 3 of my software program utility. It is a vital a part of my data transformation software. However all of the tabular information codecs suck. There doesn’t appear to be something that’s fairly house environment friendly, easy and fast to parse and textual content based mostly (not binary) so you possibly can view and edit it with a typical editor.

Most tabular information at the moment will get exchanged as: CSV, Tab separated, XML, JSON or Excel. And they’re all extremely sub-optimal for the job.

CSV is a large number. One quote within the mistaken place and the file is invalid. It’s troublesome to parse effectively utilizing a number of cores, as a result of quoting (you possibly can’t begin parsing from half approach by way of a file). Completely different quoting schemes are in use. You don’t know what encoding it’s in. Use of separators and line endings are inconsistent (generally comma, generally semicolon). Writing a parser to deal with all of the totally different dialects is in no way trivial. Microsoft Excel and Apple Numbers don’t even agree on methods to interpret some edge circumstances for CSV.

Tab separated is a bit higher than CSV. However can’t retailer tabs and nonetheless has points with line endings, encodings and so on.

XML and JSON are tree buildings and never appropriate for effectively storing tabular information (plus different points).

There may be Parquet. It is extremely environment friendly with it’s columnar storage and compression. However it’s binary, so can’t be considered or edited with customary instruments, which is a ache.

Don’t even get me began on Excel’s proprietary, ghastly binary format.

Why can’t we now have a format the place:

  • Encoding is all the time UTF-8
  • Values saved in row main order (row 1, row2 and so on)
  • Columns are separated by u001F (ASCII unit separator)
  • Rows are separated by u001E (ASCII document separator)
  • Er, that’s your complete specification.

No escaping. If you wish to put u001F or u001E in your information – powerful you possibly can’t. Use a unique format.

It could be fairly compact, environment friendly to parse and straightforward to manually edit (Notepad++ reveals the unit separator as a ‘US’ image). You possibly can write a quick parser for it in minutes. Typing u001F or u001E in some editors is perhaps a faff, however it’s hardly a showstopper.

It might be known as one thing like “unicode separated worth” (hat tip to @fakeunicode on Twitter for the title) or “unit separated worth” with file extension .usv. Perhaps a unique extension might used when values are saved in column main order (column1, column 2 and so on).

Is there nothing like this already? Perhaps there’s and I simply haven’t heard of it. If not, shouldn’t there be?

And sure I’m conscious of the related XKCD cartoon ( https://xkcd.com/927/ ).

** Edit 4-Might-2022 **

“Javascript” -> “JSON” in para 5.

It has been pointed on the above provides you with a single line of textual content in an editor, which isn’t nice for human readability. A fast repair for this may be to make the document delimiter a u001E character adopted by an LF character. Any LF that comes instantly after an u001E could be ignored when parsing. Any LF not instantly after an u001E is a part of the info. I don’t find out about different editors, however it’s straightforward to view and edit in Notepad++.