Разделитель CSV и десятичная запятая: как не смешать две настройки
Как выбрать разделитель колонок и отдельно проверить запись дробей при CSV → JSON без массовой замены символов.
Запятая в CSV может разделять колонки, а может быть частью значения 12,50. Это две разные роли. Чтобы файл не распался на лишние поля, сначала выберите разделитель таблицы, затем определите, как принимающая система должна читать числа. Переключение разделителя само по себе не заменяет десятичную запятую точкой.
В Neraviko операция CSV → JSON всегда возвращает значения ячеек строками. Поэтому удобно сначала получить точный текст, а числовое преобразование поручить тому этапу импорта, который знает назначение каждой колонки.
Разберите небольшой исходный фрагмент
Возьмите заголовок и две-три записи, содержащие дробь и текст с пунктуацией. Посмотрите файл в текстовом виде. Если заголовок выглядит как item;price, разделитель — точка с запятой. Если это item,price, разделитель — запятая; дробь с десятичной запятой должна быть корректно заключена в CSV-кавычки.
При импорте через Text/CSV connector Power Query, доступный в Excel, можно явно выбрать разделитель и режим определения типов. Microsoft предупреждает, что автоматическое определение бывает неверным, и предлагает проверять значения перед загрузкой. Эти настройки не заменяют договорённость о записи дробей в конкретной колонке. Microsoft Learn: Text/CSV, проверено 05.10.2026.
Не выбирайте разделитель по языку автора или расширению .csv. В русскоязычной выгрузке может использоваться запятая, а в англоязычной — табуляция. Надёжное основание — контракт экспортёра и реальный файл.
Проверенный пример с точкой с запятой
Все данные примера синтетические:
item;price
A;12,50
Откройте CSV → JSON. Установите delimiter=semicolon, header=true, pretty=false, trailing_newline=false. Ожидаемый результат версии 1:
[{"item":"A","price":"12,50"}]
Результат проверен прямым локальным вызовом csv.to_json. Цена остаётся строкой с запятой. Конвертер не считает её ни двумя полями, ни числом 12.5. Для этого результата не нужна настройка locale: такой опции у операции нет.
Если получателю требуется JSON-число, отдельно согласуйте преобразование price: допустим ли знак, пробелы-разделители тысяч и сколько знаков после запятой. Для значения 12,50 согласованный числовой результат может быть 12.5, но представление 12,50 тогда исчезает. Когда важны исходная запись и масштаб дроби, храните текст отдельно.
Файл с запятой тоже может быть правильным
Следующая форма представляет ту же таблицу:
item,price
A,"12,50"
Для неё нужен delimiter=comma. Кавычки задают границы ячейки, поэтому запятая внутри цены — содержимое, а не разделитель. При указанных настройках получается тот же JSON со строкой "12,50". Это проверено на той же локальной операции.
Синтетический фрагмент A,12,50 под заголовком из двух колонок уже имеет три ячейки. Neraviko вернёт INCONSISTENT_CSV_COLUMNS. Нельзя исправить это сменой типа числа: сначала необходимо восстановить границы полей по исходным данным.
Массовая замена всех запятых точками меняет одновременно и значения, и синтаксис. Она может повредить адрес, описание, разделитель колонок и дробь. Если преобразование чисел необходимо, применяйте его после CSV-разбора только к согласованным колонкам.
Обратный экспорт не задаёт числовую локаль
В JSON → CSV доступны comma, semicolon, tab, pipe. Число JSON сериализуется в текст с предупреждением о потере типа; выбор semicolon не означает автоматически «дроби с запятой». Если контракт требует буквальное 12,50, передайте это значение строкой после осознанной подготовки.
Для проверочного файла полезно добавить цену 0, пустую цену и строку с запятой в описании. Получатель должен определить, что значит пустота: пропущенная цена, ошибка или отдельное значение. Разделитель не решает эту неоднозначность.
Короткая приёмка
- Разделитель известен из файла, а не угадан по региону.
- Дробь и текстовая запятая занимают ровно одну ячейку.
- Числовое преобразование имеет правила для конкретной колонки.
- Пустые поля и масштабы дробей проверены отдельно.
- Пробный импорт сверяет строки и значения, затем применяется к основной партии.
CSV-парсер принимает не более 5 000 записей всего, включая заголовок: при header=true это до 4 999 записей данных. Также действуют 256 колонок, 65 536 байт на поле и лимит запроса 262 144 байта. Обработка серверная; контракт операции исключает сохранение и логирование сырых входов и выходов по умолчанию. Сначала проверяйте искусственный фрагмент.