→ firejox:為何不 if('0'<=ch&&ch<='9') 這樣就好了 03/19 21:29
→ tropical72:樓上說得是,只是考慮到filename未必為該型態,下次測試 03/19 21:32
→ tropical72:將改過,謝謝建議 !! 03/19 21:32
推 aiueokaki:真的很感謝!!研讀中~ 剛剛試一下,4s~5s。不知道我有沒 03/19 22:07
→ aiueokaki:有錯。跟之前自己做的時間差太多= = 03/19 22:08
電腦是在做「高負載」的動作嗎?一直以為我電腦算差,2~3 秒跑完,
沒想到你的是 4~5 秒 (即使用 fscanf 也是 6~7 秒)
※ 編輯: tropical72 來自: 180.177.72.67 (03/19 22:27)
→ tropical72:目前卡在 strchr,fgets read 0.593 secs (40MB file) 03/19 22:44
→ firejox:atoi(p++)我忘記把指標往前了 strchr會無窮回圈 03/19 22:52
→ tropical72:我幫修一下 03/19 22:54
這是我以原 po 的檔案測的結果
fgetc read: 2.890 secs
fgetc + num optimization(ctype): 4.969 secs (my code:2.74 secs)
fgets read: 0.578 secs
fgets + atoi + strchr: 3.156 secs
fscanf read: 6.75 secs
fscanf read num: 6.235 secs
我想請教的是, 以原 po 檔案沒有 new line, 用 fgets 方式應會切字吧?
若要用這方法, 是打算再寫一個 function 處理切字問題嗎 ?
※ 編輯: tropical72 來自: 180.177.72.67 (03/19 23:06)
→ firejox:會看讀的大小fgets(s,size,fp)也就是size的部份 03/19 23:10
→ tropical72:恕我有點遲鈍,由於原始檔本身每位數並不固定,看 size 03/19 23:11
→ tropical72:似乎也沒辦法確定有沒有切到字、讀到幾個數字,是嗎? 03/19 23:12
→ loveme00835:我想請問為啥不轉檔來做呢? 0.0/ 03/19 23:17
推 aiueokaki:fscanf 6.643,fgets+strtok+atoi 3.825 03/19 23:21
→ aiueokaki:fgetc+buffer+atoi 5.116,mult 3.620,table 3.671 03/19 23:22
→ aiueokaki:這是tropical72的結果。firejox的,我晚點再測 03/19 23:23
→ aiueokaki:我之前用fgets會切字。不知道firejox寫的有沒有這個問題 03/19 23:30
→ firejox:fgets最多會讀到的大小 就是size 如果要判斷切字就看最後 03/19 23:35
→ firejox:和檔案指標的部份數字有沒有相連即可 03/19 23:36
→ firejox:必要時用ungetc維護 03/19 23:37
→ tropical72:嗯,不說都忘了ungetc,的確也是要再額外處理,謝謝指教. 03/19 23:38
→ tropical72:@loveme00835:我於本文有提到,若檔案常讀,勢必要考慮 03/19 23:39
→ tropical72:您說的方式,轉成binary再用fseek/fread,此處測試應變 03/19 23:40
→ tropical72:成對檔案處理效能之研究 :) 03/19 23:40
→ loveme00835:我會很暴力的全放記憶體來做 XDD 03/19 23:41
→ firejox:也可以邪惡一點直接把檔案指標的內容直接比較XD 03/19 23:41
→ firejox:反正也是結構體XD 03/19 23:42
→ aiueokaki:fgetc read 3.53,fgetc+num optimization 6.073 03/20 00:06
→ aiueokaki:fgets read 0.617,fgetc+atoi+strchr 2.61 03/20 00:06
→ aiueokaki:fscanf read 7.421,fscanf reaf num 6.691 03/20 00:06
→ aiueokaki:真的很感謝各位的幫忙,謝謝。 03/20 00:07
→ aiueokaki:@tropical72,我最大的txt檔也只有131M,很抱歉不能進行 03/20 00:12
→ aiueokaki:更大量的測試。 03/20 00:12
→ firejox:可以試著自己生檔案 開亂數去跑 03/20 00:21
→ loveme00835:fscanf 也 parse 太久... 03/20 00:27
→ tropical72:我覺得..真的是先轉binary再用fseek/fread會好些, 03/20 00:28
→ tropical72:接著用fseek/fread應會快很多,只要該檔用到第二次就值 03/20 00:29
→ tropical72:回票價了.不會批次轉的話見 z-10-1 03/20 00:29
→ firejox:讀檔為何用rb? 03/20 00:33
→ tropical72:哈,應該我的壞習慣,以前一直只會用 "rb" 不用 "r",下次 03/20 00:36
→ tropical72:注意,謝謝指正 :) 03/20 00:36
→ loveme00835:因為原po都是存成2進位檔 (誤 03/20 00:37