2012-02-21 38 views
5

我正在讀取php中的文件。 我需要讀取文件的特定行。在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的文件,以獲取到所需的線似乎效率不高。

回答

11

使用SplFileObject::seek

$file = new SplFileObject('yourfile.txt'); 
$file->seek(123); // seek to line 124 (0-based) 
+0

感謝閱讀@JRL而是基於字節不求?而不是行號? – tinks 2012-02-21 08:20:58

+0

感謝@JRL我認爲它是什麼,我需要:) – tinks 2012-02-21 08:40:12

+0

使用splfileobject做沒有給出fopen給出的功能。是否有一種簡單的方法可以在Fopen資源中打開這個對象? – Madmenyo 2014-01-17 07:58:18

1

您必須從頭閱讀。但是,如果文件從不/很少發生變化,則可以在其他位置緩存線偏移量,也許在另一個文件中。

+0

你的意思做緩存的偏移?當我再次調用文件閱讀時,我可以直接轉到剩餘的行,我需要閱讀? @Ignacio Vazquez-Abrams? – tinks 2012-02-21 08:17:01

1

嘗試此,最簡單的一個

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

現在緩衝器是一個數組,每個數組索引包含各線; 獲取第5行

echo $buffer[4]; 
+0

感謝AKHIL但即時閱讀非常LARE文件.. – tinks 2012-02-21 08:19:28

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)) 

您顯然需要檢查打印前存在的行。有什麼好處?

+0

感謝@生動,顏色,但因爲我讀一個大文件,類似日誌文件:(我需要閱讀第100則僅次於onScroll..so雖然我知道這線從明年IM正在研究如何直接讀取到行.. – tinks 2012-02-21 08:18:42

0

你可以使用函數file($filename)。該函數將數據從文件讀入數組。

2

你可以做這樣的:

$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++; 
}