Разбор файла CSV в массив с комментариями вверху - PullRequest
0 голосов
/ 17 ноября 2011

Вот шаблон возможного текстового файла, который мне может понадобиться импортировать в мою базу данных:

#NAME:"Test"
#REV:"rev1"
#PRODUCT:"product1","description1","option1"
#PRODUCT:"product2","description2","option1","option2"
"A1","key1","DALI"
"B1","key2",""
"B2","key3","option2"
"C1","key4",""

Первые 4 строки - новое дополнение к формату этих файлов. Я успешно импортировал данные, разделенные запятыми, до добавления строк комментария вверху.

Мне было интересно, может ли кто-нибудь предоставить мне наиболее эффективный способ поместить все значения в строках комментариев в переменные в PHP.

У меня всегда есть небольшие проблемы, когда дело доходит до RegEx. Я не уверен, как лучше всего взять строки, начинающиеся с #. По сути, я хотел бы, чтобы мне были доступны следующие данные:

$csv['name']: "Test";
$csv['rev']: "rev1";
$csv['products']: array(
    0 => array('name' => "product1", 'desc' => "description1", 'options' => "option1"),
    1 => array('name' => "product2", 'desc' => "description2", 'options' => "option1,option2"),
);
$csv['data']: The rest of the data in text file

Может быть определено несколько #PRODUCTS, поэтому было бы неплохо иметь массив из этих строк.

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

Ответы [ 2 ]

2 голосов
/ 17 ноября 2011

Вы используете php 5.3? Если это так, то вы можете просто прочитать ваш файл с помощью fgets () и обнаружить комментарии с помощью substr ($ line, 0, 1). Если вы не обнаружили #, это означает, что это строка данных, а затем передайте ее в str_getcsv () ...

Приветствия

0 голосов
/ 17 ноября 2011

Чтобы сопоставить что-то, начатое с #, просто используйте ^ в начале регулярного выражения (вне группы)

...