[問題] 讀檔有沒有辦法指定讀取某一行?

看板C_and_CPP (C/C++)作者 (casper)時間15年前 (2010/12/17 16:22), 編輯推噓3(308)
留言11則, 3人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, Gcc, Linux, ...) VC++ 2005 餵入的資料(Input): 假設若有一份原始文字檔內部一小塊區域是: a 19823 b 98631 c 1313 d 445 e 715 f 901 g 29 若另外一份文字檔是 a 1 e 5 g 7 其中代表的意義是: a在另外一份文字檔是位於第一列, e在另外一份文字檔是位於第五列。 g在另外一份文字檔是位於第七列。 因此這份文字檔可以當作搜尋的索引值, 假設我要查詢f那一列的值。 則我可以先查這份文字檔, 發現f位於e和g之間, 因此也就是位於原始文字檔中的第五列到第七列之間。 因此程式碼可以這樣寫: for(int j=1;j<5;j++) getline(*p,str); //不斷地換列,做四次。 getline(*p,str); //做到第五次的時候,從第五列開始讀取 這樣寫的話,就是一直從檔案開頭往下讀取。 讀到自己想要的那一列後才開始真正處理資料。 不過這種讀法是sequential的做法, 若原始檔案很大,會讀取很久。 因此想請教說...若我已經知道某個值會出現在哪一列, 那我有沒有辦法直接讀取原始文字檔中的某一列呢?? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.120.81.183

12/17 16:25, , 1F
檔案很大嗎? 還可以的話 全讀進來 作mapping table如何?
12/17 16:25, 1F

12/17 16:26, , 2F
不行~ 檔案太大了。記憶體會爆
12/17 16:26, 2F

12/17 16:44, , 3F
那你一開始得要建一個對應表, 第N行開頭在檔案的哪個位置
12/17 16:44, 3F

12/17 16:45, , 4F
之後去查那個表格, 再去大檔案 seek and read
12/17 16:45, 4F

12/17 16:52, , 5F
對應表裡面存位置是用第幾行來表示還是用..??
12/17 16:52, 5F

12/17 17:08, , 6F
你的問題是, 已知需要第 N 行的資料, 要從大檔裡讀出來
12/17 17:08, 6F

12/17 17:08, , 7F
所以就新生一個表格, 裡面存著 第一行從大檔裡第 a1 byte 到
12/17 17:08, 7F

12/17 17:09, , 8F
a2 byte, 第二行是從第 a3 byte 到第 a4 byte
12/17 17:09, 8F

12/17 17:09, , 9F
以此類推, 所以表格建好之後, 無論要第幾行, 都能知道在檔案
12/17 17:09, 9F

12/17 17:09, , 10F
的哪個地方, seek 過去讀出來就好
12/17 17:09, 10F

12/17 17:27, , 11F
淚推~~ 這是個好辦法~ 謝謝
12/17 17:27, 11F
文章代碼(AID): #1D2nseKi (C_and_CPP)
文章代碼(AID): #1D2nseKi (C_and_CPP)