Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Тексты > CVS парсер для очень больших фалов


Автор: StealthForce 18.6.2010, 14:02
Помогите в решении проблемы...
Необходимо каждый день парсить очень большой файл на выделенном сервере.
Файл не менее 40MB и меняется динамически.
Строк в этом фале не менее 300 000.
Парсеры загибаются не начав smile 
В общем все классы, что находил, очень удобные и интересные, но для малюююсеньких файликов, а это распухшее чудовище не могут проглотить.
P.S. Прямая вставка в БД не прокатит, нужен анализ данных файла перед внесением в БД.

Автор: ksnk 21.6.2010, 00:51
а чем не подходит функция fgetcsv ?
Код

$row = 1;
$handle = fopen("test.csv", "r");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
   $num = count($data);
   echo "<p> $num fields in line $row: <br /></p>\n";
   $row++;
   for ($c=0; $c < $num; $c++) {
       echo $data[$c] . "<br />\n";
   }
}
fclose($handle);

примерчик из документации вполне может прочитать большой файл, главное чтобы времени хватило ;)

Автор: StealthForce 21.6.2010, 09:24
В таком стандартном подходе выдает:
Цитата

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 24927622 bytes) in 

А именно  в такой строке:
Код

while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {

Для решения данной проблемы необходимы дополнительные манипуляции и снятие ограничения памяти я не считаю решением. Буду копать в строну fseek.
Но я думал помогут реальным советом, а нефлудом smile 

Автор: ksnk 21.6.2010, 10:18
а вот у меня - именно этот текст никакой дополнительной памяти не жрет. К чему бы это?  Исходный csv - 41М. Ограничения на память поставлены даже меньше - 64М memory_limit.

Конечно хром грохнулся, когда попытался принять вывод от локального сервера. объемом примерно в гиг... пришлось повыкинуть лишние эхи, но это уже проблемы броузера ;)

Может там какие-то данные куда-то складируются по дороге? Или ob_start собирает какую-то важную информацию в промышленных объемах?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)