2011-10-10 116 views
6

我有一個大文件,100,000行。我可以讀取每一行並處理它,或者我可以將這些行存儲在一個數組中然後處理它們。我寧願使用數組來獲得額外的功能,但是我非常關心在數組中存儲多條線的內存使用情況,以及它是否值得。逐行讀取大文件或將其行存入數組

+1

您是否需要這樣做一次,或者許多併發的Web用戶會觸發此操作?如果很多,爲什麼不將文件的內容存儲到數據庫中? –

+0

您可以使用'SplFileObject'來獲得對文本行(一個迭代器)的類似數組的訪問。 – mario

+0

你可能沒有找到更好的方法來解決你的問題。您很少需要在內存中的*相同時間打開全部10萬行。想想其他的方式來做到這一點,你會有現有的計劃性能問題。 – Incognito

回答

3

您應該熟悉兩項功能。

第一個是file(),它將整個文件讀入一個數組,每行作爲一個數組元素。這適用於較短的文件,並且可能不是您想要在100k行文件上使用的內容。這個函數處理它自己的文件管理,所以你不需要自己明確地打開和關閉文件。

第二個是fgets(),您可以一次讀取一行文件。只要有更多的線要處理,就可以使用它循環,並在循環內運行線處理。您需要使用fopen()來獲取該文件的句柄,您可能需要自己跟蹤文件指針進行恢復管理(即,如果出現問題並且腳本失敗,您將不必從頭開始重新處理),等等。

希望這足以讓你開始。

1

這兩者的組合如何?將1000行讀入數組,處理數據,刪除數組,然後再讀取1000行等。監視內存使用情況並調整一次讀入數組的次數。