1.現(xiàn)在有一個300M的文件 需要把里面的數(shù)據(jù)一行一行讀取出來,每行進行處理(無法做成冪等)。但是怕處理過程中系統(tǒng)掛掉,不知道該從哪一行再重新讀取,怕掛之前已經處理的行再次處理一遍
2.現(xiàn)在想到的方案是 讀取一行處理一行之后把該行刪除,即時程序掛掉,再次執(zhí)行從開始讀也不會讀取到原來已經處理的行
3.看一下各位大牛有沒有好的解決方案謝謝
//想讀取一行刪除一行 該如何操作或者有更好的解決方案 避免同一行執(zhí)行兩次
$fp = fopen($fileName, "r");
if (!$fp) {
return -1;
}
$max = 40960; //40k
while (!feof($fp)) {
$line = fgets($fp, $max);
}
認證0級講師
既然是規(guī)定一行一行讀取的,那么何不寫一個腳本把文件先拆分成多個小文件(注意命名,比如 Linux
中的 split
命令),然后再寫個腳本循環(huán)讀取操作。
我覺得你可以換個方式來實現(xiàn)你要的效果:你可以讀取一行,處理完這行后,在這行后加個特殊的符號。循環(huán)遍歷每行就能知道哪些行是被處理過的。假如你的程序掛掉,再次執(zhí)行的時候,直接搜索那個特殊符號最后一次出現(xiàn)的地方。然后這個地方的下一行就是你該開始執(zhí)行的地方了。