2013-10-22 101 views
-3

我有10個文本文件(名爲file0.txt到file9.txt)具有任意長度和行數。我需要隨機選擇一個文件,隨機訪問該文件中的1-3行,處理它們並重復,直到所有文件的所有行都被處理完畢。這隻需要做一次。爲了這個問題,讓我們說「過程」意味着打印行。有沒有人有任何建議,我怎麼能做到這一點,而不需要加載所有的文本文件到內存中?C++ - 隨機訪問幾個文本文件的行

+0

顯示您嘗試過的。 –

+0

爲什麼不將它們加載到內存中?他們太大了嗎? – Barmar

+0

如果你想處理或打印文件中的所有行,那麼爲什麼你不想加載內存中的所有文件?你可以加載一個文件然後關閉它,但爲此你需要跟蹤你已經處理的所有行 – Abk

回答

3

在文本文件中,沒有任何方法可以「隨機訪問」(因爲您可以隨機訪問矢量)行,因爲找到行的唯一方法就是線性搜索文件以找到換行符。這意味着即使您沒有將它們全部加載到內存中,您至少也需要通過一次文件流來訪問行。

您可以通過傳遞所有文件一次來計算其中的行數,然後再次傳遞它們以抽出隨機選擇的行,從而實現所描述的內容。我不確定這會有什麼好處。你真的想達到什麼目的?

+1

我猜這是一個家庭作業問題 - 對於現實生活問題來說太奇怪了。 – JBentley

+0

你說得對,它是UDP模擬項目的一部分。 –

2

你可以掃描一個文件到索引的起始位置,並將其保存在內存中(或者如果你需要多次執行同一個文件,甚至可以堅持)。 一旦你有了,你可以尋找到開始的行,只是在處理之前閱讀它直到換行/ eof。

0

建議:

1 /製作這些文件的副本 2 /擦除時,它讀取線 3 /更新版本號文件 存在這樣,你隨機挑選一條線,這是一個線尚未閱讀。

很多讀/寫...效率不高

+0

而不是隻是投下一票,你能否提高一點生產力,並解釋你爲什麼不同意。我在這裏分享想法,我明白如果他們並不總是很棒,那麼請解釋一下爲什麼你可能會不同意 – vincentB