簡體   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