отличные пустые строки от нулей на входе CSV

У меня есть выходные данные базы данных, как следующие:

$row = '(one,"pika chu",,"")'

Если я отправлю эту строку в качестве параметра str_getcsv это будет выводить ['one', 'pika chu', '', ''], Третий элемент, несмотря на отсутствие, был превращен в пустую строку. Это очень раздражает, так как я должен распознавать пустые значения (без значений) из пустых строк. Результат, который я ожидаю ['one', 'pika chu', null, ''],

Входные данные, которые я получаю, взяты из базы данных PostgreSQL и представлены в виде составных значений.

Например, если таблица pokemon_id => int4, name => text тогда запрос выведет строки вроде '(1, "pika chu")', Уникальное ограничение на поле имени в примере позволит существовать следующим двум записям: (100, '') а также (101, null),

При получении они форматируются как необработанные значения, такие как:

'98,whatever'
'99,"pika chu"'
'100,""'
'101,'
'102,","'

Мне нужно прочитать эти строки, и этот пример должен вывести следующие массивы:

['98', 'whatever'] ['99', 'pika chu'] ['100', ''] ['101', null] ['102', ',']

Есть ли способ сделать это в PHP?

Обновление 1: @deceze любезно послал меня эта ссылка заявив, что в CSV нет NULL (TL; DR, потому что в XML не было нулей в принципе, эта проблема был решен с тех пор.) Как тогда анализировать CSV с NULL?

Обновление 2: У меня были предложения по созданию выделенного парсера в PHP с использованием preg_match_* функции. Я немного не хочу идти по этому пути, потому что 1) влияние на производительность по сравнению с str_getcsv и 2) факт preg_match используется для segfault, если длина передаваемой строки превышает 8 КБ (что может происходить в контексте CSV).

Обновление 3: я смотрел на str_getcsvисходный код чтобы увидеть, можно ли было предложить патч для добавления параметров синтаксического анализа, как это делается на некоторых других языках. Теперь я лучше понимаю основную философию PHP. @ daniel-vérité предложила реализовать конечный автомат для разбора строк CSV. Несмотря на то, что входные данные могут иметь тысячи строк, которые весят десятки килобайт со встроенными CSV-структурами, это может быть лучшим способом.

Спасибо за помощь.

3

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector