Я работаю над чтением файла в 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 Кбайт файлов, чтобы добраться до нужной строки, кажется неэффективным.
Использовать SplFileObject::seek
$file = new SplFileObject('yourfile.txt'); $file->seek(123); // seek to line 124 (0-based)
Это работает для вас?
$file = "name-of-my-file.txt"; $lines = file( $file ); echo $lines[67]; // echos line 68 (lines numbers start at 0 (replace 68 with whatever))
Очевидно, вам нужно проверить, существуют ли строки перед печатью. Любой хороший?
Вы могли бы сделать так:
$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++; }
Вы должны прочитать с самого начала. Но если файл никогда / редко изменяется, вы можете кэшировать смещения строк где-то еще, возможно, в другом файле.
Попробуйте это, самый простой
$buffer=explode("\n",file_get_contents("filename"));//Split data to array for each "\n"
Теперь буфер представляет собой массив, и каждый индекс массива содержит каждую строку; Чтобы получить 5-ю строчку
echo $buffer[4];
Вы можете использовать file($filename)
функции file($filename)
. Эта функция считывает данные из файла в массив.