Я пытаюсь проанализировать вывод CSV команды SELECT INTO OUTFILE. (Цель — массовая загрузка данных во внешнюю базу данных NoSQL; для массовой загрузки требуется определенный формат файла, поэтому я пишу генератор)
Моя основная проблема заключается в обработке экранированных символов, в частности, символа FIELDS TERMINATED BY. MySQL, кажется, не избегает разделителя, когда он встречается в значении столбца.
Параметры экспорта моего запроса следующие:
FIELDS
TERMINATED BY ','
ENCLOSED BY '"'
ESCAPED BY '\\'
LINES
TERMINATED BY '\n'
Я получаю строки CSV, например:
"value1","some, value","another value","value3"
Это ломает мой синтаксический анализатор строк CSV, который просто разбивает строку, используя символ FIELDS TERMINATED BY.
т. е. мой парсер выдает следующие значения столбцов:
- значение1
- некоторые
- значение
- другое значение
- значение3
"some" и "value" должны были быть проанализированы как целая строка "some, value"
Как правильно проанализировать вывод SELECT INTO OUTFILE?
Что-нибудь еще, о чем мне следует беспокоиться, учитывая указанные выше параметры экспорта? Мой код уже обрабатывает следующие случаи в значении столбца:
(в точном порядке)
- Обрабатывать значение столбца \N как NULL
- Заменить "
Примечание.
Если кто-нибудь может предоставить псевдокод MySQL LOAD DATA INFILE, это было бы здорово. Точное поведение этого оператора - это то, что я пытаюсь подражать.
Примечание.
Мой парсер написан на Java, но я гораздо лучше понимаю PHP
fgetcsv
с правильными параметрами. Если вы хотите сделать это вручную: правильный способ разбора - я думаю - очевиден, вам просто нужно его разобрать (читать посимвольно). - person Halcyon   schedule 14.04.2014