Чтение определенной строки файла в PHP - PullRequest
6 голосов
/ 21 февраля 2012

Я работаю над чтением файла в php. Мне нужно прочитать конкретные строки файла.

Я использовал этот код:

fseek($file_handle,$start);
while (!feof($file_handle)) 
{   
    ///Get and read the line of the file pointed at.
    $line = fgets($file_handle);
    $lineArray .= $line."LINE_SEPARATOR";

    processLine($lineArray, $linecount, $logger, $xmlReply);

    $counter++;
}
fclose($file_handle);

Однако я понял, что fseek() принимает количество байтов, а не номер строки.

Есть ли в PHP другая функция, основывающая указатель на номерах строк?

Или мне нужно каждый раз читать файл с самого начала и иметь счетчик, пока не будет прочитан мой желаемый номер строки?

Я ищу эффективный алгоритм, перешагнуть файл размером 500-1000 Кбайт, чтобы добраться до нужной строки, кажется неэффективным.

Ответы [ 6 ]

14 голосов
/ 21 февраля 2012

Использование SplFileObject::seek

$file = new SplFileObject('yourfile.txt');
$file->seek(123); // seek to line 124 (0-based)
9 голосов
/ 21 февраля 2012

Это работает для вас?

$file = "name-of-my-file.txt";
$lines = file( $file ); 
echo $lines[67]; // echos line 68 (lines numbers start at 0 (replace 68 with whatever))

Однако вам, очевидно, нужно проверить, существуют ли линии перед печатью.Хорошо?

3 голосов
/ 21 февраля 2012

Вы можете сделать как:

$lines = file($filename); //file in to an array
echo $lines[1];           //line 2

ИЛИ

$line = 0;
$fh = fopen($myFile, 'r');

while (($buffer = fgets($fh)) !== FALSE) {
   if ($line == 1) {
       // $buffer is the second line.
       break;
   }   
   $line++;
}
1 голос
/ 21 февраля 2012

Попробуйте это, самый простой

$buffer=explode("\n",file_get_contents("filename"));//Split data to array for each "\n"

Теперь буфер является массивом, и каждый индекс массива содержит каждую строку; Чтобы получить 5-ю строку

echo $buffer[4];
1 голос
/ 21 февраля 2012

Вы должны прочитать с самого начала. Но если файл никогда / редко изменяется, вы можете кэшировать смещения строк в другом месте, возможно, в другом файле.

0 голосов
/ 21 февраля 2012

Вы можете использовать функцию file($filename).Эта функция читает данные из файла в массив.

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