PTT
Submit
Submit
選擇語言
正體中文
简体中文
PTT
C_and_CPP
[討論] 關於讀入檔案做後續處理
作者:
jacky1989
2016-10-05 01:28:54
最近在寫程式時遇到一個疑問,想提出來大家討論看看,看怎樣做比較好
我有一個文字檔,裡面大概有20幾萬行的資料
內容大概是這樣,某一個item,後面有一組數值
a 5
b 6
c 79
...
那我今天要對這個文字檔做搜尋的動作,而搜尋的關鍵字大概有7-8個
我以結構的方式儲存這些關鍵字與其相關的值
這時候我考量到一個問題,因為文字檔有20幾萬行,那要搜尋7-8次
1.會直接用while-loop方式,從頭搜尋到尾,然後以fseek的方式,將檔案指標指回
檔案起始位置
2.會搜尋完一次先fclose,然後再fopen一次
3.將檔案內容先全部讀進來記憶體,並且以資料串結方式儲存
我這人是用3,因為以我的認知,檔案讀寫雖然有經過緩衝區,但是還是必須對硬碟存取
那搜尋7-8次,就得存取超多超多次
如果我只對檔案存取一次,接著就是對記憶體做讀寫,是否會比較快一點呢??
這次敘述說真的,不是很清楚,我承認我不太會表達我想表達的
所以如果有需要補充的,請告訴我
感謝
作者:
Schottky
(順風相送)
2016-10-05 01:31:00
也不需要讀 8 次檔,也用不著全部讀進來儲存一次讀一行,用 8 個關鍵字都搜過,再讀下一行就好這樣緩衝區的效果也很好,你寫起程式也很方便回到你問的問題,當然整個檔案讀進記憶體再料理比較快反正輸入檔也很小,20 萬行大概 20MB 而已,OK 的如果輸入檔有 4GB 那就會開始遇到一些額外的麻煩事了
作者:
CaptainH
(Cannon)
2016-10-05 11:45:00
可以先sort再binary search
作者:
james732
(好人超)
2016-10-05 11:53:00
如果關鍵字有唯一性的話我會想建字典
作者:
MOONRAKER
(㊣牛鶴鰻毛人)
2016-10-05 13:57:00
shell grep 喔耶
作者: longlongint (華哥爾)
2016-10-05 20:08:00
grep 或 寫個 inverse index table不過還是推個1樓 現階段最實用
繼續閱讀
[問題] 建.lib檔出現"Unable to start program"
psylove5566
[問題] 如果 feof()==1 還需要fclose嗎?(已補碼)
deo2000
[問題] 小於10 指定長度的各種組合
mikemagic88
[問題] VS2012+OpenCV3.1+CUDA7.5
schizophrena
[問題] vsc++ clickonce更新軟體問題
MOONY135
[問題] vfork() + exec() 相關疑問
kyuudonut
Re: [討論] 置底十三誡新增
Hazukashiine
[問題] char 多種宣告判斷正確與否
TimmyDD
[問題] operator overloading的問題
peggypiano
[討論] 置底十三誡新增
wtchen
Links
booklink
Contact Us: admin [ a t ] ucptt.com