Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> CVS парсер для очень больших фалов, Файлы более 50Мb или боле 300000 строк 
:(
    Опции темы
StealthForce
  Дата 18.6.2010, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 4.9.2007

Репутация: нет
Всего: нет



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

Это сообщение отредактировал(а) StealthForce - 18.6.2010, 14:10
PM MAIL   Вверх
ksnk
Дата 21.6.2010, 00:51 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 12
Всего: 386



а чем не подходит функция 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);

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


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
StealthForce
Дата 21.6.2010, 09:24 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 4.9.2007

Репутация: нет
Всего: нет



В таком стандартном подходе выдает:
Цитата

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

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

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

Для решения данной проблемы необходимы дополнительные манипуляции и снятие ограничения памяти я не считаю решением. Буду копать в строну fseek.
Но я думал помогут реальным советом, а нефлудом smile 
PM MAIL   Вверх
ksnk
Дата 21.6.2010, 10:18 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 12
Всего: 386



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

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

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


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.0572 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.