我正在读取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 Kb的文件来达到理想的线路似乎效率低下。
答案 0 :(得分:14)
$file = new SplFileObject('yourfile.txt');
$file->seek(123); // seek to line 124 (0-based)
答案 1 :(得分:9)
这对你有用吗?
$file = "name-of-my-file.txt";
$lines = file( $file );
echo $lines[67]; // echos line 68 (lines numbers start at 0 (replace 68 with whatever))
您显然需要在打印前检查线条是否存在。好不好?
答案 2 :(得分:3)
你可以这样做:
$lines = file($filename); //file in to an array
echo $lines[1]; //line 2
OR
$line = 0;
$fh = fopen($myFile, 'r');
while (($buffer = fgets($fh)) !== FALSE) {
if ($line == 1) {
// $buffer is the second line.
break;
}
$line++;
}
答案 3 :(得分:1)
你必须从头开始阅读。但是如果文件从不/很少改变,你可以在其他地方缓存行偏移,也许在另一个文件中。
答案 4 :(得分:1)
试试这个,最简单的一个
$buffer=explode("\n",file_get_contents("filename"));//Split data to array for each "\n"
现在缓冲区是一个数组,每个数组索引包含每一行; 获得第5行
echo $buffer[4];
答案 5 :(得分:0)
您可以使用函数file($filename)
。此函数将文件中的数据读入数组。