Построчное чтение

Тема в разделе "PHP", создана пользователем LEXAlForpostl, 23 мар 2011.

Модераторы: latteo
  1. LEXAlForpostl

    LEXAlForpostl

    Регистр.:
    21 май 2008
    Сообщения:
    708
    Симпатии:
    225
    Здравствуйте.
    Помогите, пожалуйста, 300 метровый файлик спарсить по-строчно.
    $t=file ("t.txt");
    Ругается на нехватку памяти.
     
  2. chang

    chang

    Регистр.:
    20 ноя 2009
    Сообщения:
    364
    Симпатии:
    117
    конечно будет ругаться ... ф-ция file читает весь файл и построчно преобразовывает его в массив...

    используйте ф-цию fgets для чтения куска файла

    http://php.su/functions/?fgets
     
  3. a_n_d_y

    a_n_d_y

    Регистр.:
    26 мар 2006
    Сообщения:
    465
    Симпатии:
    61
    PHP:
    $file fopen('t.txt''r');
    while (!
    feof($file)){
        
    $line fgets($file);// вот твоя строка
    }
     
  4. Murdok

    Murdok

    Регистр.:
    1 окт 2006
    Сообщения:
    236
    Симпатии:
    84
    в php.ini подправьте значение memory_limit
     
  5. a_n_d_y

    a_n_d_y

    Регистр.:
    26 мар 2006
    Сообщения:
    465
    Симпатии:
    61
    Это конечно можно, но 300 метров в память забивать бред.
     
  6. horpah

    horpah

    Регистр.:
    21 июн 2010
    Сообщения:
    200
    Симпатии:
    55
    я такие фалйы на ассемблере парсил. Быстрее не придумаешь.
     
  7. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    берёт из одного файла строку, парсит и сохраняет в другой файл
    PHP:
    //функция парсера
    function myfunc($str){
        if(!
    preg_match('/blogs\.mail\.ru/i'$str)){
            return 
    false;
        }
        return 
    true;
    }
    //файл для чтения
    $in=fopen("large.txt","r");
    //файл для записи
    $out=fopen("out.txt","w");
    //цикл по строкам
    while($line=fgets($in)){ 
        if(
    myfunc($line))fwrite($out$line);
    }
    fclose($in);
    fclose($out);
    echo 
    'end';
    справится с файлами любого размера
     
  8. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    1) Для чего тут регулярное выражение, если строку можно сравнить через stripos?
    2) while($line=fgets($in)) лучше бы заменить на while(!feof($in))
     
  9. Cleric5

    Cleric5 Постоялец

    Регистр.:
    8 апр 2008
    Сообщения:
    81
    Симпатии:
    10
    ну как это бред - например мне надо на пк "разобрать" файл 100мб - есть варианты разве как считывать его частями для обработки? Если да подскажите - буду благодарен, так как я не знаю подобного. Вроде как нет возможности частичного считывания файла, или?
     
  10. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    Ты чем смотришь вообще? Вариант от Polyetilen как раз демонстрирует построчное чтение файла.