2012-11-28 53 views
0

讀取500-600MB的整個文件我不行,因爲數據被加載到內存中,對我而言,它太昂貴了。如何刪除大(大)文件中的最後N行

我讀取文件c file_get_content'om極限行(有條件1000行)。我怎麼能說,刪除特定的行。沒有使用$ f =文件。

閱讀更多:我讀了一個非常大的文件到1000行(前1000行),在它的處理過程中,根據條件,要刪除的任何行,以及一些離開。

我可以將結果寫入一個臨時文件,並且如果腳本停止或其他情況,但沒有回滾。

+0

這是PHP還是Bash? – kmkaplan

+0

in php ......... – frops

回答

3

Php具有ftruncate功能。

編輯:給出完整的解決方案。

$f = fopen($filename, 'r+'); 
$linepos = array_fill(0, $N + 1, 0); 
$i = 0; 
while (! feof($f)) { 
    $line = fgets($f); 
    if ($line !== FALSE) { 
     $j = ($i + 1) % ($N + 1); 
     $linepos[$j] = $linepos[$i] + strlen($line); 
     $i = $j; 
    } 
} 
ftruncate($f, $linepos[($i + 1) % ($N + 1)]); 
fclose($f); 
+0

字符串有不同的長度( – frops

+0

@frops是的,你必須記住最後的'N'行位置和'ftruncate',一旦你到達文件末尾。 – kmkaplan

+0

@kmkaplan我需要截斷最後一行,不管它的長度是多少,有沒有辦法嗎? –