繁体   English   中英

如何判断PHP中文件资源当前位于哪一行?

[英]How can I tell what line a file resource is currently “on” in PHP?

使用PHP,可以使用fopenfgets读取文件的内容。 每次调用fgets ,它都会返回文件中的下一行。

fgets如何知道要读取的行? 换句话说,它如何知道它最后一次读取第5行,因此这次应该返回第6行的内容? 我有办法访问该行号数据吗?

(我知道这是可能通过读取文件的全部内容与数组做同样的事情file ,但我想和做到这一点fopen 。)

每个打开的文件在内存中都有一个“位置”; 每当您从文件中读取行/字符/任何内容时,它都会自动更新。

您可以使用ftell获得此职位,并使用fseek对其进行修改:

ftell —返回文件读/写指针的当前位置

fseek —在文件指针上查找

您还可以使用快退 ...快退...该指针的位置。


这不是让您获得一个位置作为行号,而是更接近一个位置作为字符号(实际上,您正在从文件的开头获得该位置作为字节数) 当您拥有该字符时,阅读行仅是阅读字符的一刹那,直到yu击中行尾字符。


顺便说一句:据我所知,这些函数来自C语言-PHP本身是用C编写的;-)

文件只是从头到尾读取的数据流。 操作系统会记住您迄今为止在该文件中所读取的位置。 如果需要,在应用程序中执行此操作也非常简单。 操作系统只关心字节的位置,而不关心行。

试想一下,顺序处理52张牌。 您交出第一张卡。 下次2.卡。 当您要发出3.卡时,您无需从头开始重新计数,甚至无需记住您所在的位置,只需分发下一张可用的卡即可,这将是第三张。

读取行可能需要做更多的工作,因为出于性能考虑,您希望缓冲从实际文件中读取的数据,但是它并不仅仅是记录最后一块数据的偏移量而已分发,找到下一个换行符,然后交出这两个点之间的所有数据。

PHP和OS都不需要保留行号,因为所有系统关心的都是“下一行”。 如果您想知道行号,可以保留一个计数器,并在每次应用程序读取行时对其进行递增。

$lineno=0;
while (!feof($handle)) {
    $buffer = fgets($handle, 4096);
    lineno++; // keep track of the line number
     ...

}

您可以只调用fgets并在每次调用时增加var $line_number 这将告诉您线路已接通。

我有这个旧样品,我可以为您提供帮助:)

$File = file('path');
$array = array();

$linenr = 5;

foreach( $File AS $line_num => $line )
{
$array = array_push( $array , $line );
}

echo $array[($linenr-1)];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM