Re: [問題] txt的內容(不特定長度的數字)轉成數值
※ 引述《aiueokaki (長門教信徒)》之銘言:
: 因為我的檔案沒new line
: 補上檔案
: http://rapidshare.com/files/453303096/DATA.txt
測試原始碼仍以我先前發的產生器產生出來之測試為主
裡面用到一些 ascii - bitwise 技巧, 沒實測過數據取出是否正確
(不過雛形應就長那樣了)
測一次的數據結果
fscanf : 286.150 secs --> 這最慢
fgets + strtok + atoi : 193.204 secs --> 此案例不可用
fgetc + buffer + atoi : 235.073 secs
★fgetc + mult(for int) : 137.737 secs --> 這最快, 時間只有 fscanf 一半
★fgetc + table(for int): 136.860 secs --> 這最快, 時間只有 fscanf 一半
「目前」結論
1. 資料複雜度不高,要求速度的話別用 fscanf
2. fgetc 別放在 buffer 再進行 atoi,速度拖慢
3. 最快方法為 fgetc + mult / fgetc + table, 二者速度無明顯差異,
所以應可不用建 table, 部份程式碼如下
另下載了你的原始資料 (不到 40MB, 還真有點讓我失望)
跑出來的結果 fscanf: 6.25 secs, fgetc+mult: 2.74 secs
另 loveme 提的方法是該考慮的,
如果你常使用到同一份檔案,相信先把原始資料轉出來後,
再用 fread / fseek 會更好
放上這二部份之實測連結 http://nopaste.csie.org/59cc2
while( (ch=fgetc(fp))!=EOF){
if(ch>='0' && ch<='9' ) number = 10*number + (ch & 0x0f);
else number=0;
}
對於實測結果有疑惑的話,歡迎一起實測,以供小弟確認
其它測試有興趣的話再提,待我測完後會再把數據放上來.
(此案例用 fgetc 比 fgets 快的結果還讓人蠻訝異的..)
--
YouLoveMe() ? LetItBe() : LetMeFree();
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 180.177.72.67
※ 編輯: tropical72 來自: 180.177.72.67 (03/19 20:55)
※ 編輯: tropical72 來自: 180.177.72.67 (03/19 21:23)
→
03/19 21:29, , 1F
03/19 21:29, 1F
→
03/19 21:32, , 2F
03/19 21:32, 2F
→
03/19 21:32, , 3F
03/19 21:32, 3F
推
03/19 22:07, , 4F
03/19 22:07, 4F
→
03/19 22:08, , 5F
03/19 22:08, 5F
電腦是在做「高負載」的動作嗎?一直以為我電腦算差,2~3 秒跑完,
沒想到你的是 4~5 秒 (即使用 fscanf 也是 6~7 秒)
※ 編輯: tropical72 來自: 180.177.72.67 (03/19 22:27)
→
03/19 22:25, , 6F
03/19 22:25, 6F
→
03/19 22:44, , 7F
03/19 22:44, 7F
→
03/19 22:52, , 8F
03/19 22:52, 8F
→
03/19 22:54, , 9F
03/19 22:54, 9F
這是我以原 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)
→
03/19 23:10, , 10F
03/19 23:10, 10F
→
03/19 23:11, , 11F
03/19 23:11, 11F
→
03/19 23:12, , 12F
03/19 23:12, 12F
→
03/19 23:17, , 13F
03/19 23:17, 13F
推
03/19 23:21, , 14F
03/19 23:21, 14F
→
03/19 23:22, , 15F
03/19 23:22, 15F
→
03/19 23:23, , 16F
03/19 23:23, 16F
→
03/19 23:30, , 17F
03/19 23:30, 17F
→
03/19 23:35, , 18F
03/19 23:35, 18F
→
03/19 23:36, , 19F
03/19 23:36, 19F
→
03/19 23:37, , 20F
03/19 23:37, 20F
→
03/19 23:38, , 21F
03/19 23:38, 21F
→
03/19 23:39, , 22F
03/19 23:39, 22F
→
03/19 23:40, , 23F
03/19 23:40, 23F
→
03/19 23:40, , 24F
03/19 23:40, 24F
→
03/19 23:41, , 25F
03/19 23:41, 25F
→
03/19 23:41, , 26F
03/19 23:41, 26F
→
03/19 23:42, , 27F
03/19 23:42, 27F
→
03/19 23:46, , 28F
03/19 23:46, 28F
→
03/20 00:06, , 29F
03/20 00:06, 29F
→
03/20 00:06, , 30F
03/20 00:06, 30F
→
03/20 00:06, , 31F
03/20 00:06, 31F
→
03/20 00:07, , 32F
03/20 00:07, 32F
→
03/20 00:12, , 33F
03/20 00:12, 33F
→
03/20 00:12, , 34F
03/20 00:12, 34F
→
03/20 00:21, , 35F
03/20 00:21, 35F
→
03/20 00:27, , 36F
03/20 00:27, 36F
→
03/20 00:28, , 37F
03/20 00:28, 37F
→
03/20 00:28, , 38F
03/20 00:28, 38F
→
03/20 00:29, , 39F
03/20 00:29, 39F
→
03/20 00:29, , 40F
03/20 00:29, 40F
→
03/20 00:33, , 41F
03/20 00:33, 41F
→
03/20 00:36, , 42F
03/20 00:36, 42F
→
03/20 00:36, , 43F
03/20 00:36, 43F
→
03/20 00:37, , 44F
03/20 00:37, 44F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 4 之 4 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章