Почему для CSV нужен парсер
CSV выглядит тривиально, пока не приходят настоящие данные. Три правила — вся причина, по которой нужен сканер, а не разбиение по разделителю:
- Поле в кавычках может содержать сам разделитель
- Поле в кавычках может содержать перенос строки, и одна запись растянется на несколько строк
- Две кавычки внутри закавыченного поля означают одну буквальную
Любая выгрузка с адресом, названием компании или свободным текстом наткнётся как минимум на первое.
Типы — это решение, а не мелочь
Превратить числовую строку в число удобно. Сделать это с 007 — потеря данных, и
происходит она молча с идентификаторами, индексами, телефонами и номерами
версий. Поэтому переключатель существует и поэтому он выключен.
Когда он включён, ведущие нули защищены отдельно: значение, похожее на число, но начинающееся с нуля, остаётся строкой.
Заголовки
Со строкой заголовков каждая запись становится объектом с ключами по именам
колонок. Пустая ячейка заголовка дала бы пустой ключ, поэтому такие колонки
называются column_2 и так далее, а не сталкиваются между собой.
Вопросы
Почему приведение типов выключено по умолчанию?+
Потому что оно портит данные. Индекс 01234, номер телефона, референс заказа 007 — всё это молча превращается в числа с потерянным ведущим нулём. Включайте, когда точно знаете, что колонки числовые; для всего, что что-то идентифицирует, оставляйте выключенным.
Обрабатываются ли запятые внутри кавычек?+
Да, а также переносы строк внутри кавычек и удвоенные кавычки, означающие одну буквальную. Именно это отличает настоящий парсер CSV от разбиения по разделителю, и поэтому выгрузка с колонкой адреса ломает наивные инструменты.
Файл из Excel, и название первой колонки выглядит странно.+
Excel пишет в начало файла метку порядка байтов UTF-8, которая становится невидимым символом в первом заголовке. Здесь она отсекается до разбора, поэтому первый ключ получается чистым.
А если в файле точки с запятой?+
Выберите разделитель на панели. Файлы с точкой с запятой — норма везде, где запятая служит десятичным разделителем, то есть в большей части континентальной Европы и СНГ.