Разделитель в csv-файле: "," или ";" ?
Тема в разделе "Общая дискуссия", создана пользователем Парфентьев Михаил Владимирович, 30.09.2014
30.09.2014

Данный вопрос является особо актуальным в контексте связывания и постобработки информации наборов открытых данных.

Для начала посмотрим на формулировку из Википедии  https://ru.wikipedia.org/wiki/CSV

"Значения отдельных колонок разделяются разделительным символом (delimiter) — запятой (,). Однако, большинство программ вольно трактует стандарт CSV и допускают использование иных символов в качестве разделителя. В частности в локалях, где десятичным разделителем является запятая, в качестве табличного разделителя, как правило, используется точка с запятой."

В тексте Методических рекомендаций версии 3.0 (стр. 55) говорится об использовании запятой в качестве разделителя.

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

В том случае, когда значение ячейки с адресом содержит в себе запятую, следует использовать в качестве разделителя ячеек ";", в противном случае произойдет некорректное отображение содержимого ячеек (+ структура окажется некорректной по отношению к такому файлу). В случае, когда значения ячейки адрес не имеет ,/; внутри - возможно использование "," в качестве разделителя (в таком случае возникает вопрос с постобработкой подобного рода ячеек).

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

01.10.2014

На эту тему есть пост на хабре - http://habrahabr.ru/company/mailru/blog/129476/

"Начнем с того, что форматом CSV на самом деле называют три разных текстовых формата, отличающихся символами-разделителями: собственно сам CSV (comma-separated values — значения, разделенные запятыми), TSV (tab-separated values — значения, разделенные табуляциями) и SCSV (semicolon separated values — значения, разделенные точкой с запятой). В жизни все три могут называться одним CSV, символ-разделитель в лучшем случае выбирается при экспорте или импорте, а чаще его просто «зашивают» внутрь кода. Это создает массу проблем в попытке разобраться"

В подавляющем большинстве наборов (если не во всех) на порталах ОД, на сайтах федеральных органов, на региональных и муниципальных сайтах в качестве разделителя используются ";". Т.к. формат CSV предназначен для представления табличных данных, в большинстве случаях, проблема кроется в том, что для создания CSV файлов используется Excel (да и многие данные до их открытия были в табличном виде в формате .xls), который в виде стандартного разделителя в русскоговорящих регионах использует ";".

Главным минусом использования ";", является невозможность использования наборов с этим разделителем на иностранных порталах. А для развития ОД в России и интеграции с иностранными порталами это сможет стать большой проблемой.

P.S.
Если, при импорте из Excel в CSV, вам в качестве разделителя нужна ",", а не ";", то можно временно изменить региональные настройки:
Панель управления -> Региональные стандарты -> Дополнительные параметры
И в поле "Разделитель элементов списка" вводите новый разделитель. Кстати, в этом же окне можно изменить и дробную часть с запятой на точку.

27.01.2015

Меня всегда умиляют проблемы "интеграции с иностранными порталами"...
Обеспечить единство правил работы внутри своей страны мы не можем/не пытаемся,
обеспечить однозначность записи/чтения информации из CSV (SCSV) форматов мы не требуем.

Хотя, что нам мешает СДЕЛАТЬ это, не понятно.

Наверно то, что чтобы что-то требовать с исполнителей "регулятор" должен это что-то описать.
Желательно - внятно описать.
1)Львиная доля файлов ОД вводится/редактируется в Excel. (Или нет?) А раз так, то придётся обеспечить переход CSV-XLS и учитывать вывихи Excel.
2)Давайте, для начала выберем в качестве разделителя ";" Просто, чтобы не переключать региональные настройки. (Про табуляцию вообще не хочется вспоминать)
3)кодировка Windows-1251
4)десятичный разделитель ","
5)строки, в которых присутствуют ";" или "," должны быть взяты в кавычки
6)никаких переводов строк внутри значений полей быть не должно
7)если нужны значения с лидирующими нулями, или нужно убить преобразование типов, то использовать конструкции ="00021";="01.21";="03-11"

Основной задачей публикаторов ОД стала бы понятная им задача формирования таблиц в Excel с соблюдением НЕКОТОРЫХ понятных ограничений.

Ну и ещё два весёлых предложеньица:
1)почему бы не организовать на DATA.GOV.RU АБСОЛЮТНО корректную и одинаковую для всех онлайн-конвертацию таблиц XLS-CSV-XLS?
(с контролем соблюдения правил подготовки исходных данных, с указанием на ошибки и возможные разночтения полей...)
2)почему бы не организовать на DATA.GOV.RU АБСОЛЮТНО корректную и одинаковую для всех онлайн-конвертацию таблиц XLS-HTML?

А как будут "иносранцы" обрабатывать наши сведения меня волнует меньше всего...

25.02.2015

Хорошие предложения для сервисов - спасибо. Вам попадались какие-то хорошие варианты?