Где пропадают ведущие нули в CSV: проверка всей цепочки импорта

Как найти этап потери кодов и длинных идентификаторов и отличить сохранение строк от невозможного восстановления уже удалённых нулей.

Защищённое начало цепочки как образ сохранения ведущих нулей в идентификаторах

Если код 0007 стал 7, сначала найдите этап, на котором изменился текст. Ошибка могла появиться при открытии таблицы, экспорте, конвертации в JSON или записи в базу. Переход на другой CSV-конвертер не восстановит символы, которых в переданном файле уже нет.

Для кодов и внешних идентификаторов согласуйте строковый тип на всей цепочке. Смысл кода не определяется тем, что он состоит только из цифр. Два значения 0007 и 7 могут обозначать разные записи.

Начните с исходного файла

Откройте сохранённый CSV как текст и посмотрите буквальные значения проблемной колонки. Если в нём уже написано 7, конвертер не знает, сколько нулей было до этого и были ли они вообще. Найдите оригинальную выгрузку или значение в системе-источнике.

Если CSV содержит 0007, но после открытия таблицы видно 7, проверьте режим импорта колонки. Text/CSV connector Power Query в Excel позволяет отключить автоматическое определение типов: колонки остаются в типе Text. Для строкового идентификатора выбирайте этот режим до первого числового преобразования и сверяйте буквальный результат. Это наш критерий для примера 0007, а не обещание восстановить уже удалённые нули. Microsoft Learn: Text/CSV, проверено 05.10.2026.

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

Проверенный набор для поиска потери

Синтетический файл содержит короткий код и длинный внешний идентификатор:

code;external_id
0007;9007199254740993
7;7

В CSV → JSON выберите delimiter=semicolon, header=true, pretty=false, trailing_newline=false. Ожидаемый результат:

[{"code":"0007","external_id":"9007199254740993"},{"code":"7","external_id":"7"}]

Вывод проверен прямым локальным вызовом csv.to_json версии 1. Здесь 0007 и 7 остаются разными строками. Длинное значение не проходит через числовой тип: его цифры сохраняются как текст. Опции авто-типизации в этой операции нет.

Если JSON уже содержит правильные строки, а после загрузки в базу оба кода оказываются одинаковыми, проверьте модель приложения и тип колонки. Преобразование в integer может удалить ведущие нули и создать конфликт ключей. Исправление должно происходить в контракте этого участка, а не в повторном экранировании CSV.

Кавычки не задают тип колонки

CSV-кавычки обеспечивают границы поля. Запись "0007" не заставляет любой импортёр считать ячейку строкой. Он может сначала разобрать CSV, снять синтаксические кавычки, затем назначить числовой тип. Тип задавайте явно в принимающем процессе.

Не заменяйте код на формулу вроде ="0007". Тогда в файл попадает формульное содержимое, меняются назначение поля и требования безопасности. Апострофная защита экспорта тоже не является универсальным контрактом типа: обычный программный CSV-parser может вернуть апостроф частью строки.

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

Когда дополнение нулями допустимо

Функция добавления нулей слева подходит только при известной фиксированной длине кода. Например, если контракт строго определяет четыре ASCII-цифры, число 7 можно представить как 0007. Но это вычисление по внешнему правилу, а не восстановление потерянного исходника.

Без такого правила из 7 нельзя выбрать между 07, 007 и 0007. Если длина переменная или 7 является отдельным законным кодом, добавление нулей создаст неверные идентификаторы. Сначала уточните модель данных и проверьте возможные конфликты.

Пробелы тоже не удаляйте автоматически. Контракт может запрещать внешние пробелы, но это должно быть отдельной нормализацией с учётом ключей и дублей. Сохраняющий строки конвертер не исправляет некорректный код по догадке.

Пройдите цепочку контрольным набором

Сравните значения после четырёх этапов: CSV из источника, JSON-конвертация, объект приложения и повторная выгрузка из базы. На каждом этапе ожидайте тот же код и тот же длинный идентификатор. Первый несовпадающий этап указывает, где искать преобразование.

Лимиты Neraviko: до 5 000 CSV-записей с заголовком, 256 колонок, 65 536 байт на поле; запрос до 262 144 байт. При заголовке данных может быть не более 4 999 записей. Обработка серверная, сырые входы и выходы операции по контракту не сохраняются и не логируются по умолчанию. Для диагностики используйте искусственные коды, не реальную клиентскую базу.