Простой способ расширить CSV с помощью метаданных

Простойспособрасширитьcsvспомощьюметаданных

Пекка Вяэнянен, август 25 2021.

Это предложение является ответом на Пора отказаться от CSV Алекса Расмуссена и обсуждение lobste.rs . Не относитесь к этому слишком серьезно.

Файлы CSV (значения, разделенные запятыми) хороши, но иногда их трудно проанализировать, потому что Кажется, у всех несколько иное представление о том, что означает CSV. Очевидное решение – передать некоторые метаданные, которые говорят, чего ожидать, но куда вы их поместите? А как насчет ZIP-архива?

Архив с двумя файлами. Первый файл, скажем format.txt , содержит метаданные внутри, а второй – исходный файл CSV без изменений. Он по-прежнему доступен для чтения нетехническим пользователям, потому что файлы ZIP изначально поддерживаются как Windows, так и macOS. Люди могут дважды щелкнуть по ним, как по каталогу, а затем дважды щелкнуть по CSV, чтобы открыть его в Excel.

Я знаю, что это звучит упрощенно, но если есть Урок, который нужно извлечь из истории вычислительной техники, заключается в том, что глупые идеи часто побеждают. Сделав этот расширенный формат CSV хотя бы в некоторой степени обратно совместимым, можно (теоретически) переключиться на него, не раздражая ваших клиентов.

Спецификация

Попробуем что-нибудь набросать просто для обсуждения. Пусть будет два формата.

Формат файла. ZIP-архив, несжатый или сжатый с использованием алгоритма DEFLATE. В архиве минимум два файла:

  • format.txt , файл метаданных
  • *. csv , a CSV-файл

CSV-файлов может быть несколько, но все они должны соответствовать format.txt .

Формат метаданных. Очень рыхлый. Первая строка format.txt должна содержать имя типа метаданных в кодировке ASCII с завершением. переводом строки. Остальная часть файла затем интерпретируется в соответствии с этим именем.

Например, если мы хотим использовать Диалект CSV , затем format.txt мог бы сказать следующее:

 CSV Dialect v  1.2  {
  " диалект  " : {  " csvddfVersion  " :  1.2 ,   " разделитель 
 " :   ";  " ,   " doubleQuote  " : правда,   " lineTerminator  " :   "   r  n  
 " ,   " quoteChar  " :   "    "  " ,   " skipInitialSpace  " : правда,   " заголовок  " : правда, 
  " commentChar 
 " :   " #  " }} 

Таким образом, различные форматы метаданных могут развиваться без нарушения общей схемы.

Действительно ли эта схема поможет мне разобрать CSV?

Возможно, но, возможно, недостаточно. Несоответствие между метаданными и CSV все еще может произойти, и мы ничего не можем с этим поделать, если CSV доступен для редактирования любым пользователем текстового редактора. К сожалению, ограничение максимального размера файла в формате ZIP.

ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ

  • В: Почему бы не использовать тарболл?
    • Они непонятны пользователям Windows.
  • В: Как сохранить файлы CSV, размер которых превышает максимальный размер файла ZIP, равный 2 ^ 32 - 1 байт?
  • Сохраните архив в формате ZIP 69. Он поддерживается Windows Explorer начиная с Vista, но macOS, похоже, имеет слишком старую версию unzip . Не лучшее решение.
  • Q: Как у вас произвольный доступ?
    • Сохраните ZIP-файл без сжатия и поместите в метаданные какой-то индекс.
  • В: Вы видели комикс XKCD о стандартах?