Хотелось бы сделать это одним 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М. Поменял лимит - и все заработало
На будущее - такой парсинг закаченного curl-ом CSV файла в массив для последующей обработки (в моем случае математической) - элегантнее чем построчный парсинг в цикле. По сути - одна строчка.
Всем спасибо:)
нормально парсится пример и все работает!
Может это какая то особенность preg_match_all или хостер nic.ru (PHP 5.2 и выше) что то намудрил... Представить не могу что делать.
================== добавлено позднее =============
все выяснилось:) я идиот)
в примере был маленький отрывок, а в реальной жизни файл в 1 мег
PHP требовал памяти 16М, а стояло 8М. Поменял лимит - и все заработало

На будущее - такой парсинг закаченного 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>';
}
?>