Как получить общее количество строк перед чтением в большом файле в PHP - PullRequest
3 голосов
/ 15 апреля 2009

Я уже использую этот пример того, как читать большие файлы данных в PHP построчно

Теперь, что он хотел бы сделать, это получить общее количество строк в файле, чтобы я мог отобразить процент завершения или, по крайней мере, каково общее количество строк, чтобы я мог дать некоторое представление о том, обработка еще не завершена.

Есть ли способ получить общее количество строк без чтения во всем файле дважды? (один раз для подсчета строк и один раз для обработки)

Ответы [ 5 ]

12 голосов
/ 15 апреля 2009

Бедный ответ:

Нет, но вы можете оценить. Вычислите простое среднее значение (используйте первые 250 строк) и продолжайте.

estNumOfLines = sizeOfFile / avgLineSize

Вы можете сохранить количество строк в файле при создании файла ...

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

5 голосов
/ 15 апреля 2009

Вы можете определить размер файла, а затем проконтролировать свой прогресс, добавив размер ваших операций чтения:

$fname = 'foofile.txt';
$fsize = filesize($fname);
$count = 0;
$handle = fopen($fname, "r") or die("Couldn't get handle");
if ($handle) {
  while (!feof($handle)) {
    $buffer = fgets($handle, 4096);
    // Process buffer here..
    $count++;
    echo ($count * 4096)/$fsize . " percent read.";
  }
  fclose($handle);
}

Примечание: код адаптирован из ссылочный ответ

3 голосов
/ 15 апреля 2009

Есть ли причина, по которой вам нужно считать строки, а не байты? Если все, что вы хотите знать, это «процент выполненных работ», просто отследите его по количеству прочитанных байтов / всего байтов.

2 голосов
/ 16 апреля 2009

используйте команду linux wc -l filename.txt Это выведет количество строк в файле.

1 голос
/ 15 апреля 2009

Как бы вы узнали количество страниц в книге, не считая их?
Вы должны измерить ширину страницы и ширину книги и разделить одну на другую.

То же самое, вычислите среднюю длину строки по первым нескольким строкам, затем выполните те же вычисления с размером файла ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...