Использование файла () постепенно? - PullRequest
1 голос
/ 24 мая 2010

Я не уверен, возможно ли это, я искал решение для поиска ... Но, по сути, у меня есть очень большой файл, строки которого я хочу сохранить в массиве.Таким образом, я использую file (), но есть ли способ сделать это в пакетном режиме?Так что каждые, скажем, 100 строк, которые он создает, он «делает паузу»?

Я думаю, что есть что-то, что я могу сделать с циклом foreach или что-то в этом роде, но я не уверен, что думаю об этом правильно ...

Как

$i=0;
$j=0;
$throttle=100;

foreach($files as $k => $v) {
  if($i < $j+$throttle && $i > $j) {
     $lines[] = file($v);
     //Do some other stuff, like importing into a db
  }
  $i++;
  $j++;
}

Но я думаю, что это не сработает, потому что $ i & $ j всегда будут равны ... В любом случае, чувствуя себя запутанно ... Может кто-нибудь помочь мне подумать немного яснее?

Ответы [ 3 ]

2 голосов
/ 24 мая 2010

Читайте файл построчно, сколько строк вам нужно, добавляя каждую строку в массив. Когда массив достигнет желаемой длины, обработайте его и очистите массив. E.g.:

$handle = @fopen("/tmp/inputfile.txt", "r");
$throttle = 100;
$data = array();
if ($handle) {
    while(!feof($handle)) {
        $buffer = fgets($handle, 4096);
        $data[] = $buffer;
        if(count($data) == $throttle) {
            doSomething($data);
            $data = array();
        }
    }
    fclose($handle);
}
0 голосов
/ 24 мая 2010

Если под «паузой» вы подразумеваете, что действительно хотите приостановить выполнение вашего скрипта, использовать sleep или некоторые его варианты: http://php.net/manual/en/function.sleep.php

0 голосов
/ 24 мая 2010

Вы никогда не увеличивали $ i или $ j ... Что вы можете сделать, это что-то вроде:

    $data = array();
    $chunk = 100;
    $f = fopen($file, 'r');
    while (!feof($f)) {
        for ($i = 0; $i < $chunk; $i++) {
            $tmp = fgets($f);
            if ($tmp !== false) {
                $data[] = $tmp;
            } else {
                //No more data, break out of the inner loop
                break;
            }
        }
        //Process your data


        $data = array();
    }
    fclose($f);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...