CSV

"Правильный" парсинг CSV файлов

11 октября 2010
Рубрика: PHP -> Программирование

CSV, пожалуй, самый популярный формат для импорта\экспорта данных для большинства CMS.

Но, к сожалению, разбор этого формата сводиться лишь к explode(";",$str);

Т.е. алгоритм такой:

- Забрали содержимое файла, разбили на строки

- Каждую строку разделили по делимитеру

- Обработали полученные данные

И еще хорошо, если файл не сразу считывается в память, а срока за строкой (бо видел и такое: $lines = file($fp);, где $fp - крохотный файлик размером в несколько десятков Мб)

Так поступал я, раньше =)

Первые грабли ожидали, когда в содержимом файла встречались ";" как часть данных. Попытавшись разбить такую строку на данные, мы, естественно, получали немного больше, чем на надо было, со сдвигами и прочей ерундой. Данные потеряны, база захламлена, месяц без премий.. кому такое надо? Выход - написать макрос для экселя, который будет заменять ";" на ",". Для этих целей даже в MS Visual Basic  пришлось разбираться.

Туда же пошли и переносы строк, встречающиеся в данных.

Подробнее...