Значения, разделенные запятыми

Из Википедии, бесплатной энциклопедии
  (Перенаправлено с разделителя-запятой )
Перейти к навигации Перейти к поиску
Значения, разделенные запятыми
CsvDelimited001.svg
Расширение имени файла.csv
тип интернет-СМИtext/csv[1]
Тип форматамногоплатформенные, последовательные потоки данных
Контейнер дляинформация базы данных, организованная в виде списков, разделенных полями
СтандартRFC 4180

Файл значений, разделенных запятыми ( CSV ), представляет собой текстовый файл с разделителями, в котором для разделения значений используется запятая . Каждая строка файла представляет собой запись данных . Каждая запись состоит из одного или нескольких полей , разделенных запятыми. Использование запятой в качестве разделителя полей является источником названия для этого формата файла . Файл CSV обычно хранит табличные данные (числа и текст) в виде обычного текста , и в этом случае каждая строка будет иметь одинаковое количество полей.

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

Термин «CSV» также обозначает несколько тесно связанных форматов , разделенных разделителями, в которых используются другие разделители полей, например точки с запятой. [2] К ним относятся значения, разделенные табуляцией, и значения, разделенные пробелом. Разделитель, который гарантированно не является частью данных, значительно упрощает синтаксический анализ .

Альтернативным файлам, разделенным разделителями, часто присваивается расширение «.csv», несмотря на использование разделителя полей без запятой. Эта расплывчатая терминология может вызвать проблемы при обмене данными . Многие приложения, которые принимают файлы CSV, имеют опции для выбора символа-разделителя и символа кавычек. Точки с запятой часто используются вместо запятых во многих европейских регионах , чтобы использовать запятую в качестве десятичного разделителя и, возможно, точку в качестве десятичного символа группировки.

Обмен данными

CSV — это распространенный формат обмена данными, широко поддерживаемый потребительскими, деловыми и научными приложениями. Среди его наиболее распространенных применений — перемещение табличных данных [3] [4] между программами, изначально работающими с несовместимыми (часто проприетарными или недокументированными) форматами. [1] Это работает, несмотря на отсутствие соблюдения RFC 4180 (или любого другого стандарта), потому что очень много программ поддерживают варианты формата CSV для импорта данных.

Например, пользователю может потребоваться передать информацию из программы базы данных, которая хранит данные в собственном формате, в электронную таблицу , которая использует совершенно другой формат. Большинство программ баз данных могут экспортировать данные в формате CSV, а экспортированный файл CSV затем может быть импортирован программой для работы с электронными таблицами.

Технические характеристики

RFC  4180 предлагает спецификацию формата CSV; однако реальная практика часто не соответствует RFC, и термин «CSV» может относиться к любому файлу, который: [1] [5]

  1. представляет собой обычный текст , использующий кодировку символов, такую ​​как ASCII , различные кодировки символов Unicode (например , UTF-8 ), EBCDIC или Shift JIS ,
  2. состоит из записей (обычно одна запись в строке),
  3. с записями, разделенными на поля , разделенные разделителями (обычно один зарезервированный символ, такой как запятая, точка с запятой или табуляция; иногда разделитель может включать необязательные пробелы),
  4. где каждая запись имеет одинаковую последовательность полей.

В рамках этих общих ограничений используется множество вариантов. Таким образом, без дополнительной информации (например, соблюдается ли RFC 4180) файл, заявленный просто в формате «CSV», не является полностью определенным. В результате некоторые приложения, поддерживающие файлы CSV, позволяют пользователям просматривать первые несколько строк файла, а затем указывать символы-разделители, правила цитирования и т. д.; например, мастер импорта текста Microsoft Excel .

История

Значения, разделенные запятыми, — это формат данных, который появился более чем на десятилетие раньше, чем персональные компьютеры : компилятор IBM Fortran (расширенный уровень H) под OS /360 поддерживал CSV в 1972 году. вывод был определен в FORTRAN 77 , одобренном в 1978 году. При вводе в виде списка в качестве разделителей использовались запятые или пробелы, поэтому строки символов без кавычек не могли содержать запятые или пробелы. [7]

Термин «значение , разделенное запятыми» и аббревиатура «CSV» использовались к 1983 году . но в руководстве не указывается соглашение о заключении кавычек в строки в кавычках. [9]

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

Файлы, разделенные запятыми, используются для обмена информацией базы данных между машинами двух разных архитектур. Простой текст файлов CSV в значительной степени позволяет избежать несовместимости, такой как порядок байтов и размер слова . Файлы в основном удобочитаемы, поэтому с ними легче иметь дело при отсутствии идеальной документации или коммуникации. [10]

Основная инициатива по стандартизации — преобразование « де-факто нечеткого определения» в более точное и де-юре — была предпринята в 2005 году с RFC 4180 , определяющим CSV как MIME Content Type . [11] Позже, в 2013 году, некоторые недостатки RFC 4180 были устранены рекомендацией W3C. [12] 

В 2014 году IETF опубликовал RFC  7111 , описывающий применение фрагментов URI к документам CSV. RFC 7111 определяет, как диапазоны строк, столбцов и ячеек могут быть выбраны из документа CSV с использованием индексов позиций. [13]

В 2015 году W3C в попытке улучшить CSV с помощью формальной семантики опубликовал первые проекты рекомендаций по стандартам метаданных CSV, которые начинались как рекомендации в декабре того же года. [14]

Общий функционал

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

Этот формат восходит к заре бизнес-вычислений и широко используется для передачи данных между компьютерами с разными внутренними размерами слов, потребностями в форматировании данных и т. д. По этой причине файлы CSV распространены на всех компьютерных платформах.

CSV — это текстовый файл с разделителями , в котором для разделения значений используется запятая (многие реализации инструментов импорта/экспорта CSV позволяют использовать другие разделители; например, использование строки «Sep=^» в качестве первой строки в файле *. csv приведет к тому, что Excel откроет файл, ожидая, что символ «^» будет разделителем вместо запятой «,»). Простые реализации CSV могут запрещать значения полей, содержащие запятую или другие специальные символы, такие как символы новой строки. Более сложные реализации CSV позволяют их, часто требуя " ( двойная кавычка) символы вокруг значений, которые содержат зарезервированные символы (например, запятые, двойные кавычки или реже символы новой строки). Встроенные символы двойных кавычек могут быть представлены парой последовательных двойных кавычек [15] или префиксом двойных кавычек с escape-символом , таким как обратная косая черта (например, в Sybase Central).

Форматы CSV не ограничиваются определенным набором символов . [1] Они так же хорошо работают с наборами символов Unicode (такими как UTF-8 или UTF-16 ), как и с ASCII (хотя некоторые программы, поддерживающие CSV, могут иметь свои собственные ограничения). Файлы CSV, как правило, выдерживают даже простой перевод из одного набора символов в другой (в отличие от почти всех проприетарных форматов данных). Однако CSV не предоставляет никакого способа указать, какой набор символов используется, поэтому об этом необходимо сообщать отдельно или определять на принимающей стороне (если это возможно).

Базы данных, которые включают несколько отношений , не могут быть экспортированы как один файл CSV [ необходима ссылка ] . Точно так же CSV не может естественным образом представлять иерархические или объектно-ориентированные данные. Это связано с тем, что каждая запись CSV должна иметь одинаковую структуру. Поэтому CSV редко подходит для документов , созданных с помощью HTML , XML или других технологий разметки или обработки текстов.

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

В реляционной базе данных подобные проблемы легко решаются путем создания отдельного отношения для каждой такой группы и соединения «дочерних» записей со связанными «родительскими» записями с помощью внешнего ключа (например, идентификационного номера или имени родителя). В языках разметки, таких как XML, такие группы обычно заключаются в родительский элемент и повторяются по мере необходимости (например, несколько <child>узлов в одном <parent>узле). В CSV нет общепринятого однофайлового решения.

Стандартизация

Имя «CSV» указывает на использование запятой для разделения полей данных. Тем не менее, термин «CSV» широко используется для обозначения большого семейства форматов, которые во многом различаются. Некоторые реализации позволяют или требуют одинарных или двойных кавычек вокруг некоторых или всех полей; а некоторые резервируют первую запись как заголовок, содержащий список имен полей. Используемый набор символов не определен: некоторым приложениям требуется метка порядка байтов Unicode (BOM) для принудительной интерпретации Unicode (иногда даже BOM UTF-8). [1] Файлы, в которых используется символ табуляции вместо запятой, можно точнее назвать «TSV» для значений, разделенных табуляцией.

Другие различия в реализации включают обработку более распространенных разделителей полей (таких как пробел или точка с запятой) и символы новой строки внутри текстовых полей. Еще одна тонкость — интерпретация пустой строки: она в равной степени может быть результатом записи записи из нулевых полей, либо записи из одного поля нулевой длины; поэтому расшифровка его неоднозначна.

Стандарты RFC 4180 и MIME

Технический стандарт 2005 года RFC 4180 формализует формат файла CSV и определяет тип MIME «text/csv» для обработки текстовых полей. Однако интерпретация текста каждого поля по-прежнему зависит от приложения. Файлы, соответствующие стандарту RFC 4180, могут упростить обмен CSV и должны быть широко переносимыми. Среди его требований:

  • Строки в стиле MS-DOS, заканчивающиеся символами (CR/LF) (необязательно для последней строки).
  • Необязательная запись заголовка (нет надежного способа определить, присутствует ли она, поэтому при импорте требуется осторожность).
  • Каждая запись должна содержать одинаковое количество полей, разделенных запятыми.
  • Любое поле может быть заключено в кавычки (с двойными кавычками).
  • Поля, содержащие перенос строки, двойные кавычки или запятые , должны быть заключены в кавычки. (Если это не так, файл, скорее всего, будет невозможно правильно обработать.)
  • Если для заключения полей используются двойные кавычки, то двойные кавычки в поле должны быть представлены двумя символами двойных кавычек.

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

Пакет табличных данных без трения OKF

В 2011 году Open Knowledge Foundation (OKF) и различные партнеры создали рабочую группу по протоколам данных, которая позже превратилась в инициативу Frictionless Data. Одним из основных форматов, которые они выпустили, был пакет табличных данных. Пакет табличных данных был в значительной степени основан на CSV, используя его в качестве основного формата передачи данных и добавляя метаданные базового типа и схемы (в CSV отсутствует какая-либо информация о типе, позволяющая отличить строку «1» от числа 1). [16]

Инициатива Frictionless Data также предоставила стандартный формат описания диалекта CSV для описания различных диалектов CSV, например, для указания разделителя полей или правил цитирования. [17]

Стандарт табличных данных W3C

В 2013 году рабочая группа W3C «CSV в Интернете» начала определять технологии, обеспечивающие более высокую совместимость веб-приложений, использующих CSV или аналогичные форматы. [18] Рабочая группа завершила свою работу в феврале 2016 г. и официально закрылась в марте 2016 г. выпуском набора документов и рекомендаций W3C [19] по моделированию «табличных данных», [20] и расширению CSV метаданными и семантикой. .

Основные правила

Существует множество неофициальных документов, описывающих форматы «CSV». IETF RFC 4180 (обобщенный выше) определяет формат для типа MIME text/csv, зарегистрированного в IANA .

Типичные правила для этих и других спецификаций и реализаций "CSV" следующие:

  • CSV — это формат данных с разделителями , в котором поля/столбцы разделены запятой , а записи/строки заканчиваются символом новой строки.
  • CSV-файл не требует определенной кодировки символов , порядка байтов или формата разделителя строк (некоторые программы поддерживают не все варианты конца строки).
  • Запись заканчивается знаком конца строки. Однако разделители строк могут быть встроены в поля как данные, поэтому программное обеспечение должно распознавать разделители строк в кавычках (см. ниже), чтобы правильно собрать всю запись, возможно, из нескольких строк.
  • Все записи должны иметь одинаковое количество полей в одинаковом порядке.
  • Данные в полях интерпретируются как последовательность символов , а не как последовательность битов или байтов (см. RFC 2046, раздел 4.1). Например, числовое значение 65535 может быть представлено как 5 символов ASCII «65535» (или, возможно, в других формах, таких как «0xFFFF», «000065535.000E+00» и т. д.); но не как последовательность из 2 байтов, предназначенная для обработки как одно двоичное целое число, а не как два символа (например, числа 11264–11519 имеют запятую в качестве старшего байта: ). Если это соглашение об «обычном тексте» не соблюдается, то CSV-файл больше не содержит достаточно информации для его правильной интерпретации, CSV-файл, скорее всего, не выдержит передачи между компьютерами с различной архитектурой и не будет соответствовать типу text/csv MIME.ord(',')*256..ord(',')*256+255
  • Смежные поля должны быть разделены одной запятой. Однако форматы «CSV» сильно различаются по выбору символа-разделителя. В частности, в локалях , где в качестве десятичного разделителя используется запятая, вместо нее используется точка с запятой, табуляция или другой символ.
    1997,Форд,Е350
  • Любое поле может быть заключено в кавычки (то есть заключено в двойные кавычки), а некоторые поля должны быть заключены в кавычки, как указано в следующих правилах и примерах:
    "1997", "Форд", "Е350"
  • Поля со встроенными запятыми или символами двойных кавычек должны быть заключены в кавычки.
    1997,Форд,Е350,"Супер роскошный грузовик"
  • Каждый из встроенных символов двойных кавычек должен быть представлен парой символов двойных кавычек.
    1997,Форд,Е350,"Супер,"роскошный""грузовик"
  • Поля со встроенными разрывами строк должны быть заключены в кавычки (однако многие реализации CSV не поддерживают встроенные разрывы строк).
    1997, Форд, E350, "Иди и возьми сейчас
    они идут быстро"
    
  • В некоторых реализациях CSV [ которые? ] , начальные и конечные пробелы и табуляции обрезаются (игнорируются). Такая обрезка запрещена RFC 4180, в котором говорится: «Пробелы считаются частью поля и не должны игнорироваться».
    1997, Форд, Е350
    не то же самое, что
    1997,Форд,Е350
    
  • Согласно RFC 4180 пробелы вне кавычек в поле не допускаются; однако в RFC также говорится, что «пробелы считаются частью поля и их нельзя игнорировать». и «Исполнители должны быть консервативны в том, что вы делаете, и либеральны в том, что вы принимаете от других» (RFC 793, раздел 2.10) при обработке файлов CSV».
    1997, "Форд", Е350
  • В реализациях CSV, которые обрезают начальные или конечные пробелы, поля с такими пробелами как значимые данные должны быть заключены в кавычки.
    1997, Форд, Е350, "Супер роскошный грузовик"
  • Обработка двойной кавычки должна применяться только в том случае, если поле начинается с двойной кавычки. Обратите внимание, однако, что двойные кавычки не допускаются в полях без кавычек в соответствии с RFC 4180.
    Лос-Анджелес, 34°03′ с.ш., 118°15′ з.д.
    Нью-Йорк, 40°42′46″ с.ш., 74°00′21″ з.д.
    Париж, 48°51′24″ с.ш., 2°21′03″ в.д.
    
  • Первая запись может быть «заголовком», который содержит имена столбцов в каждом из полей (нет надежного способа определить, делает ли это файл или нет; однако редко используются символы, отличные от букв, цифр и подчеркивания в таких именах столбцов).
    Год, Марка, Модель
    1997,Форд,Е350
    2000,Меркьюри,Пума
    

Пример

Год Делать Модель Описание Цена
1997 г. Форд Е350 переменный ток, пресс, луна 3000.00
1999 г. Шевроле Предприятие "Расширенная версия" 4900.00
1999 г. Шевроле Предприятие «Расширенное издание, очень большое» 5000.00
1996 г. Джип Гранд Чероки ОБЯЗАТЕЛЬНО ПРОДАТЬ!
воздух, люк, загруженный
4799,00

Приведенная выше таблица данных может быть представлена ​​в формате CSV следующим образом:

Год, Марка, Модель, Описание, Цена
1997,Форд,Е350,"переменный ток, абс, луна",3000.00
1999,Chevy,"Venture""Extended Edition"","",4900.00
1999, Chevy, "Venture", "Extended Edition, Very Large", "", "", 5000.00
1996,Джип,Гранд Чероки,"ПРОДАМ!
воздух, люк, загружен",4799.00

Пример CSV-файла США/Великобритании (где десятичный разделитель — точка/точка, а разделитель значений — запятая):

Год, Марка, Модель, Длина
1997,Форд,Э350,2.35
2000,Меркурий,Пума,2.38

Пример аналогичного европейского файла CSV/ DSV (где десятичный разделитель — запятая, а разделитель значений — точка с запятой):

Год;Марка;Модель;Длина
1997;Форд;E350;2,35
2000;Меркурий;Пума;2,38

Последний формат не соответствует RFC 4180. [21] Соответствие может быть достигнуто за счет использования запятой вместо точки с запятой в качестве разделителя и либо международного обозначения для представления десятичного знака, либо практики заключения в кавычки всех чисел, имеющих десятичный знак.

Поддержка приложения

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

В качестве формата обмена данными: формат файла CSV поддерживается почти всеми электронными таблицами и системами управления базами данных,

  • Электронные таблицы , включая Apple Numbers , LibreOffice Calc и Apache OpenOffice Calc. Microsoft Excel также поддерживает CSV, но с ограничениями по сравнению с другим программным обеспечением для работы с электронными таблицами (например, с 2019 года Excel по-прежнему не может экспортировать файлы CSV в широко используемой кодировке символов UTF-8).
  • Реляционные базы данных при использовании стандартного SQL могут экспортировать/импортировать CSV с помощью COPYкоманды. Например, на PostgreSQL действительно COPY TO t 'file.csv' CSV и COPY FROM t 'file.csv' CSV. [22]
  • Многие служебные программы в системах в стиле Unix (такие как cut , paste , join , sort , uniq , awk ) могут разбивать файлы на разделители-запятые и, следовательно, могут обрабатывать простые файлы CSV. Однако этот метод неправильно обрабатывает запятые в строках в кавычках.

Как (основное или необязательное) внутреннее представление. Может быть родным или внешним , но отличаться от формата обмена ("только экспорт/импорт"), поскольку нет необходимости создавать копию в другом формате:

  • Некоторые электронные таблицы , включая LibreOffice Calc , предлагают эту опцию, не заставляя пользователя принимать другой формат.
  • Некоторые реляционные базы данных при использовании стандартного SQL предлагают оболочку внешних данных (FDW). Например, PostgreSQL предлагает «СОЗДАТЬ ВНЕШНЮЮ ТАБЛИЦУ» [23] и «СОЗДАТЬ РАСШИРЕНИЕ file_fdw [24] для настройки любого варианта CSV.
  • Базы данных, такие как Apache Hive , предлагают возможность выражать CSV или .csv.gz в качестве внутреннего формата таблицы.
  • Редактор emacs может работать с CSV-файлами в режиме csv-nav. [25]

Формат CSV поддерживается библиотеками, доступными для многих языков программирования . Большинство из них предоставляют способ указать разделитель полей, десятичный разделитель , кодировку символов, соглашения о кавычках, формат даты и т. д.

Программное обеспечение и ограничения строк

Каждое программное обеспечение, работающее с CSV, имеет свои ограничения на максимальное количество строк, которые могут содержать файлы CSV. Ниже приведен список распространенного программного обеспечения и его ограничений: [26]

  • Microsoft Excel: ограничение на 1 048 576 строк;
  • Apple Numbers: ограничение на 1 000 000 строк;
  • Таблицы Google: ограничение на 5 000 000 ячеек (произведение столбцов и строк);
  • OpenOffice и LibreOffice: ограничение на 1 048 576 строк;
  • Текстовые редакторы (такие как WordPad, TextEdit, Vim и т. д.): без ограничений по строкам или ячейкам;
  • Базы данных (команда COPY и FDW): без ограничений по строкам или ячейкам.

Смотрите также

использованная литература

  1. ^ a b c d e Шафранович, Ю. (октябрь 2005 г.). Общий формат и тип MIME для CSV-файлов . IETF . п. 1. doi : 10.17487/RFC4180 . RFC 4180 .
  2. ^ Руководство по администрированию IBM DB2 . ИБМ.
  3. ^ «CSV — значения, разделенные запятыми» . Проверено 2 декабря 2017 г. .
  4. ^ «Файлы CSV» . Проверено 4 июня 2014 г. .
  5. ^ «Стандартный формат файла значений, разделенных запятыми (CSV)» . Эдосео, Инк . Проверено 4 июня 2014 г. .
  6. ^ Программные продукты IBM FORTRAN для ОС и компонент CMS общей информации VM / 370 (PDF) (первое издание), июль 1972 г., стр. 17, GC28-6884-0 , получено 5 февраля 2016 г. Для пользователей, знакомых с предыдущими процессорами FORTRAN IV G и H, это основные новые языковые возможности.
  7. ^ «Ввод-вывод, управляемый списком» , Справочник по языку Fortran 77 , Oracle
  8. ^ "SuperCalc², пакет электронных таблиц для IBM, CP/M" . Проверено 11 декабря 2017 г. .
  9. ^ «Структура файла формата значений, разделенных запятыми» . 1983 . Проверено 11 декабря 2017 г. .
  10. ^ «CSV, значения, разделенные запятыми (RFC 4180)» . Проверено 4 июня 2014 г. .
  11. ^ RFC 4180: Общий формат и тип MIME для файлов со значениями, разделенными запятыми (CSV) . дои : 10.17487/RFC4180 . RFC 4180 . Проверено 22 декабря 2020 г. .
  12. ^ См. sparql11-results-csv-tsv , первую рекомендацию W3C в формате CSV, которая восполняет некоторые недостатки RFC 4180.
  13. ^ RFC 7111: Идентификаторы фрагментов URI для типа носителя text/csv . дои : 10.17487/RFC7111 . RFC 7111 . Проверено 22 декабря 2020 г. .
  14. ^ «Модель табличных данных и метаданных в Интернете - рекомендация W3C от 17 декабря 2015 г.» . Проверено 23 марта 2016 г.
  15. ^ * Creativyst (2010), Как: формат файла значений, разделенных запятыми (CSV) , creativyst.com , получено 24 мая 2010 г.
  16. ^ «Пакет табличных данных» . Спецификации данных без трения .
  17. ^ "Диалект CSV" . Спецификации данных без трения .
  18. ^ «CSV в рабочей группе в Интернете» . РГ W3C CSV. 2013 . Проверено 22 апреля 2015 г. .
  19. ^ CSV в веб-репозитории (на GitHub)
  20. ^ Модель табличных данных и метаданных в Интернете (рекомендация W3C)
  21. Шафранович (2005) утверждает: «В заголовке и каждой записи может быть одно или несколько полей, разделенных запятыми».
  22. ^ "Документация: 14: КОПИРОВАТЬ" . Постгрес SQL. 2022-02-10 . Проверено 4 марта 2022 г. .
  23. ^ "Документация: 14: F.35. postgres_fdw" . ПостгресSQL. 2022-02-10 . Проверено 4 марта 2022 г. .
  24. ^ «Документация: 14: F.14. file_fdw» . Постгрес SQL. 2022-02-10 . Проверено 4 марта 2022 г. .
  25. ^ "EmacsWiki: Csv Nav" . www.emacswiki.org .
  26. ^ «Понимание CSV и ограничений строк» ​​. Проверено 28 февраля 2021 г. .

дальнейшее чтение

Original text