看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) devc++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) no 問題(Question): 就假設有兩個檔案內 有很多數字 1 2 3 4 5 第二個6 7 8 9 10 預期的正確結果(Expected Output): 希望是讀取(讀檔這邊確定正確) 第一次 1 6 第二次 2 7 . . 補充說明(Supplement): 都是數字...沒字串 因為用fstream寫 一個宣告(fstream s) 本來是用 while(!s.eof()) { s >> buf[i]; } 後再看是第幾個 是可以的 可是因為檔案內有幾萬組數字...這樣每次都要跑一次絕得很佔空間 想說s.seekg(i,ios::beg);後 在s>>buf中 每次出來都變成一樣了 是seekg 後我只能用read讀嗎@@? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.115.221
tjjh89017:不是.eof()嗎? end of file 09/11 20:44
pigcat1315:阿打錯..不過不想用那邊拉@@ 09/11 20:50
※ 編輯: pigcat1315 來自: 114.32.115.221 (09/11 20:50)
KTFGU:可不可以 跑一個數字時1 6記算一次 換第二個數字2 7就在計算 09/11 21:34
KTFGU:跑一個迴圈就好 09/11 21:35
tropical72:格式正確的原始資料先放上來參考。 09/11 21:39
pigcat1315:樓上目前我是包在同一個迴圈下 讀檔1取 在讀檔2取 09/11 21:39
tropical72:po code ? 09/11 21:41
tropical72:會遇到一個問題是,如何保證 f1/f2 數字數量一定一樣? 09/11 21:42
pigcat1315:檔案數字量是固定的~ 09/11 21:48
補上大致上的內容 for(int i=0;i<5;i++) //第幾個數字 { for(int j=0;j<5;j++) //這個是因為我檔案還有不同類別 { for(int k=0;k<5;k++)//那個檔案 { readvalue(path,buf,i); } } } void(string path ,int &buf ,int num) { fstream s; s.open(path,ios::in) for(int i=0;i<num+1;i++) s>>buf; s.close(); } 我現在 這樣也是可以 只是 是因為目前回圈小 當擴大幾萬時 ...怕for會跑的很吃力 想說seekg 能不能配合著用 ※ 編輯: pigcat1315 來自: 114.32.115.221 (09/11 22:02)
tropical72:你實際有幾個檔案要比對? 09/11 22:12
pigcat1315:6個類別 一個類別有150個檔案 1個裡面有5萬組數字 09/11 22:14
pigcat1315:我也很想放3為陣列...可是會爆炸Q0Q 09/11 22:14
loveme00835:怎麼比對? 09/11 22:16
loveme00835:根本還不知道真正的問題是什麼... 09/11 22:19
tropical72:我一直很搞不懂你說的「類別」到底是什麼? 09/11 22:20
tropical72:指的是 field 欄位? 還是 OO class ? 還是其他? 09/11 22:21
tropical72:類別和檔案關係為何?能否舉個例子出來? 09/11 22:22
pigcat1315:比對我還沒寫@@ ~就其實是要提出固定位置 數字來排序 09/11 22:22
tropical72:主要問題是「記憶體塞不下」嗎? 09/11 22:24
pigcat1315:不是程式上的類別 就是合計有900個檔要比對 09/11 22:24
pigcat1315:想省下時間~因為如果要比對第5萬組的數字 重頭讀會好久 09/11 22:25
tropical72:先全部轉 binary file 如何? 09/11 22:26
tropical72:你coding轉完檔的時間,絕對比你現在硬幹來得快。 09/11 22:27
tropical72:http://codepad.org/OJtTrgeU 轉完後用 fseek/fread 09/11 22:49
tropical72:改 fout.write((char*)(&number), sizeof(int)); 才對 09/11 22:51
pigcat1315:感恩大大~謝謝 09/11 23:01
loveme00835:不過如果都是小數字呢? 09/11 23:09
tropical72:在記憶體不足情況下,以空間換時間最直接方式便為轉bin. 09/11 23:32
tropical72:即使小數字亦如此... 吧? 09/11 23:33
loveme00835:都是小數字的話說不定檔案大小會倍增 09/11 23:35
tropical72:只要平均每個數字>100,就吃4bytes(加分隔符號),轉bin 09/11 23:36
tropical72:絕對划算。當然若平均是<10,檔案大小才會倍增.再以原po 09/11 23:38
tropical72:之目的論而言,要快速取得指定檔案位置,讀取數值,我認為 09/11 23:38
tropical72:在硬碟沒限制情況下,這方便顯得較為簡便,易懂,效果不錯 09/11 23:39
tropical72:故聲明了,mem不足,這是以空間(硬碟空間)換取時間之方式 09/11 23:40
firejox:看不懂@@ 09/12 16:11
firejox:一個檔案是1 2 3 4 5 另一個是6 7 8 9 10 ? 09/12 16:13
pigcat1315:恩 樓上這是假設~這樣比較好懂 09/12 19:37
firejox:那兩個檔案指標不行嗎? 09/12 20:13