讀取500-600MB的整個文件我不行,因爲數據被加載到內存中,對我而言,它太昂貴了。如何刪除大(大)文件中的最後N行
我讀取文件c file_get_content'om極限行(有條件1000行)。我怎麼能說,刪除特定的行。沒有使用$ f =文件。
閱讀更多:我讀了一個非常大的文件到1000行(前1000行),在它的處理過程中,根據條件,要刪除的任何行,以及一些離開。
我可以將結果寫入一個臨時文件,並且如果腳本停止或其他情況,但沒有回滾。
讀取500-600MB的整個文件我不行,因爲數據被加載到內存中,對我而言,它太昂貴了。如何刪除大(大)文件中的最後N行
我讀取文件c file_get_content'om極限行(有條件1000行)。我怎麼能說,刪除特定的行。沒有使用$ f =文件。
閱讀更多:我讀了一個非常大的文件到1000行(前1000行),在它的處理過程中,根據條件,要刪除的任何行,以及一些離開。
我可以將結果寫入一個臨時文件,並且如果腳本停止或其他情況,但沒有回滾。
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);
這是PHP還是Bash? – kmkaplan
in php ......... – frops