Перенос строки внутри ячейки разорвал CSV
Как это выглядит
После импорта в таблице стало больше строк, чем документов. Часть записей обрезана посередине, а продолжение стоит отдельной строкой, съехав в первый столбец.
Коротко
В CSV строка файла и запись таблицы — не одно и то же. Значение с переносом внутри разрешено, но только в кавычках. Если файл собран без кавычек, каждый перенос воспринимается как конец записи, и таблица разваливается.
Почему так происходит
01Значение с переносом не заключено в кавычки
Правило CSV простое: значение, содержащее перенос, запятую или кавычку, должно быть в кавычках. Выгрузки, собранные склейкой строк вручную, это правило нарушают.
02Адрес или примечание в несколько строк
Чаще всего переносы прячутся в адресах доставки, назначении платежа и примечаниях — полях, которые человек заполняет свободно.
03Разные виды переноса строки
Внутри значения может оказаться перенос в стиле одной операционной системы, а разделителем записей служит другой. Программа-читатель видит их одинаково.
Как понять, что причина именно эта
- Сравните число строк в файле с ожидаемым числом записей
- Найдите строки, где заполнена только первая колонка — это хвосты разорванных записей
- Откройте файл в текстовом редакторе и посмотрите, есть ли кавычки вокруг длинных значений
- Проверьте поля адреса и примечания — переносы обычно там
Как починить
Пересобрать файл с правильным экранированием
- 1.Попросите отправителя выгрузить CSV с кавычками вокруг текстовых полей
- 2.Либо выгрузите в Excel, где эта проблема не возникает
не чинит: Зависит от отправителя и его выгрузки; повлиять на чужую систему обычно нельзя.
Склеить разорванные записи
- 1.Найдите строки, где заполнена только первая колонка
- 2.Присоедините их к предыдущей записи
- 3.Проверьте результат по числу записей
не чинит: Работает, пока разрыв один на запись. Значение с двумя переносами придётся собирать вручную.
Убрать переносы на источнике
- 1.Замените переносы внутри значений пробелом до выгрузки
- 2.Особенно в адресах и примечаниях
не чинит: Меняет данные: текст станет менее читаемым, зато перестанет ломать импорт.
Когда мы не нужны
Это проблема выгрузки, а не распознавания. Если у вас уже есть CSV, разбирать нечего — надо чинить того, кто его собирает.
Что с этим делает наша выгрузка
Наша выгрузка заключает в кавычки все текстовые поля и экранирует кавычки внутри них. Многострочные значения мы отдаём одной ячейкой, а не разрываем на записи.
Вопросы
Почему просто не удалять переносы?
Потому что это изменение данных. В адресе перенос отделяет город от улицы, и склейка без пробела даст «МоскваЛенинский». Мы сохраняем значение как есть и экранируем его по правилам формата.
Excel лучше CSV для таких данных?
Для многострочных значений — да: в нём перенос внутри ячейки не ломает структуру файла. Если в ваших данных есть адреса и примечания, выгрузка в Excel надёжнее.
Если ошибка не в Excel, а в самих документах
Пилот на 30 дней: пришлите самый неудобный счёт, разберём вручную под ваш формат и вернём готовую таблицу.
Первый счёт разбираем вручную под ваш формат. Списание разовое, автопродления нет. Источник перехода: seo/oshibki/perenos-stroki-razorval-csv.
Другие ошибки