Разделитель в одну строку - PullRequest
1 голос
/ 15 апреля 2009

Вот пример файла, который я использую для создания базы данных mysql. Разделителем является «,», но в описании для одного столбца существует «,».

Header: City State Zip Description
Los Angeles, California , 98005, "welcome to california, were are living the dream","Please stay, a while."

Проблема в том, что описание в "кавычках" содержит разделитель, который заставляет файл иметь дополнительные столбцы.

Кто-то сказал мне, что функции regex или preg_match могут решить мою проблему. Может кто-нибудь сказать мне, как.

Ответы [ 3 ]

7 голосов
/ 15 апреля 2009

Не нужно заново изобретать колеса, PHP уже имеет то, что вам нужно в fgetcsv

1 голос
/ 15 апреля 2009

Это довольно хорошо решенная проблема, которая является стандартом для формата CSV (или значения, разделенные запятыми). Самый простой способ приблизиться к анализу CSV - это использовать библиотеку CSV, которая уже была протестирована и работает надежно. Анализатор CSV существует практически для каждого языка программирования. Есть несколько особых случаев, о которых вы не задумывались, поэтому в большинстве случаев стоит использовать существующую библиотеку.

Эта страница является хорошим ресурсом для разбора CSV:

http://www.creativyst.com/Doc/Articles/CSV/CSV01.htm

0 голосов
/ 15 апреля 2009

Для каждого поля вам нужно регулярное выражение типа:

("(?:[^"]+|"")*"|[^,]+)

Это две альтернативы. Первый соответствует двойной кавычке, за которой следует шаблон из нуля или более повторов другой альтернативы, которая является либо строкой не двойных кавычек, либо парой двойных кавычек (чтобы двойные кавычки появлялись в вашей строке при удвоении) , Второй вариант соответствует полю без двойных кавычек, совпадающему со строкой без запятых. Затем вы комбинируете их с запятыми.

...