[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: И опять парсинг CSV
VovaM44
Многие руководства предлагают парсить CSV (весь загружен в ЕДИНУЮ строковую переменную, строки разделены 0A) через прочтение каждой строчки.
Хотелось бы сделать это одним preg_match_all,
а дальше работать с массивом.

Имею строковую переменную $out с множеством строк (разделены 0A):
блаблабла, блаблабла, блаблабла, блаблабла,
блаблабла, блаблабла, блаблабла, блаблабла,
блаблабла, блаблабла, блаблабла, блаблабла,
блаблабла, блаблабла, блаблабла, блаблабла,

запускаю

preg_match_all('/^([^,\r\n]*)/m', $out,$outhist);



$outhist - массив с первой колонкой, все ок

запускаю


preg_match_all('/^([^,\r\n]*),([^,\r\n]*)/m', $out,$outhist);


в ответ ничего, а должно было быть две колонки (двумерный массив)

сломал мозг, почему?



Спустя 1 час, 41 минута, 43 секунды (16.12.2010 - 03:08) VovaM44 написал(а):
Честно говоря удивлен уже полностью:на http://www.regextester.com/
нормально парсится пример и все работает!
Может это какая то особенность preg_match_all или хостер nic.ru (PHP 5.2 и выше) что то намудрил... Представить не могу что делать.

================== добавлено позднее =============

все выяснилось:) я идиот)
в примере был маленький отрывок, а в реальной жизни файл в 1 мег
PHP требовал памяти 16М, а стояло 8М. Поменял лимит - и все заработало smile.gif

На будущее - такой парсинг закаченного curl-ом CSV файла в массив для последующей обработки (в моем случае математической) - элегантнее чем построчный парсинг в цикле. По сути - одна строчка.
Всем спасибо:)

Спустя 9 дней, 13 часов, 19 минут, 52 секунды (25.12.2010 - 16:28) grytskiv написал(а):
Цитата (VovaM44 @ 15.12.2010 - 22:26)
Многие руководства предлагают парсить CSV (весь загружен в ЕДИНУЮ строковую переменную, строки разделены 0A) через прочтение каждой строчки.
Хотелось бы сделать это одним preg_match_all,
а дальше работать с массивом.

Имею строковую переменную $out с множеством строк (разделены 0A):
блаблабла, блаблабла, блаблабла, блаблабла,
блаблабла, блаблабла, блаблабла, блаблабла,
блаблабла, блаблабла, блаблабла, блаблабла,
блаблабла, блаблабла, блаблабла, блаблабла,

запускаю

preg_match_all('/^([^,\r\n]*)/m', $out,$outhist);



$outhist - массив с первой колонкой, все ок

запускаю


preg_match_all('/^([^,\r\n]*),([^,\r\n]*)/m', $out,$outhist);


в ответ ничего, а должно было быть две колонки (двумерный массив)

сломал мозг, почему?

Спустя 17 дней, 8 часов, 49 минут, 37 секунд (13.01.2011 - 01:17) VovaM44 написал(а):
Цитата (grytskiv @ 25.12.2010 - 13:28)

http://php.net/manual/en/function.fgetcsv.php://http://phpphp

"parses the line it reads for fields in CSV format and returns an array containing the fields read"
нет это не то, перечитайте постановку вопроса - парсинг CSV файла в двумерный массив одной командой

а вы же предлагаете - строчный парсинг одной линии в одномерный массив


Спустя 9 дней, 16 часов, 8 минут, 5 секунд (22.01.2011 - 17:25) dima4321 написал(а):
Каждая строчка елемент массива

<? 
ini_set('display_errors',1);
error_reporting(E_ALL);

setlocale(LC_ALL, 'ru_RU.CP1251', 'rus_RUS.CP1251', 'Russian_Russia.1251');

$str ='блаблабла, блаблабла, блаблабла, блаблабла,
блаблабла, блаблабла, блаблабла, блаблабла,
блаблабла, блаблабла, блаблабла, блаблабла,
блаблабла, блаблабла, блаблабла, блаблабла,'
;
preg_match_all("/[^\r\n\t]+/m",$str,$ar);

echo count($ar[0]);

foreach($ar[0] as $value)

{
echo $value.'<br>';
}


?>

Спустя 11 минут, 55 секунд (22.01.2011 - 17:37) dima4321 написал(а):
Вот с захватом по 2 строчки.


<?
ini_set('display_errors',1);
error_reporting(E_ALL);

setlocale(LC_ALL, 'ru_RU.CP1251', 'rus_RUS.CP1251', 'Russian_Russia.1251');

$str ='пппп, блаблабла, блаблабла, блаблабла,
блаблабла, блаблабла, блаблабла, блаблабла,
авав, ваавав, блаблабла, блаблабла,
блаблабла, блаблабла, блаблабла, блаблабла,
'
;
preg_match_all("/(.+?\n.+?)\n/si",$str,$ar);

echo count($ar[1]);
echo '<br>';

foreach($ar[1] as $value)

{
echo $value.'<br>';
}


?>
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.