線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1366
推到 Plurk!
推到 Facebook!

是個讀取隨機檔的問題(fseek).

答題得分者是:暗黑破壞神
k804138
一般會員


發表:3
回覆:4
積分:1
註冊:2005-04-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-04 18:37:46 IP:218.166.xxx.xxx 未訂閱
FILE *fp;  fp=fopen("E:\\grey\\saperate point.txt","r");  AnsiString Str;  double x1,x2,y1;  char line[100];  char   tokensep[] = " ";  char   *stopstring, *token;  //fseek(fp,0,2);  for(long i=0;i<4;i ) { fgets(line,100,fp); token = strtok( line, tokensep ); x1 = strtod( token, &stopstring ); token = strtok( NULL, tokensep ); x2 = strtod( token, &stopstring ); token = strtok( NULL, tokensep ); y1 = strtod( token, &stopstring ); Str.printf( "X1 = %0.3f, X2 = %0.3f,y1 = %0.3f",x1,x2,y1); Memo1->Lines->Add( Str ); } fclose(fp); 我要讀個txt隨機檔,格式如下: 5.00 4.00 0.001 3.00 9.00 0.002 8.00 8.00 0.003 7.00 10.00 0.004 3.00 13.00 0.005 2.00 14.00 0.001 7.00 17.00 0.002 假如我要跳過前3行,讀下面的4行,請問該怎麼掉過去?我fseek不知道該怎麼使用.
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-04 18:44:39 IP:59.104.xxx.xxx 未訂閱
1.fseek 必須要知道要跳過多少BYTE。 所以你必須有另一個”INDEX”來記錄前三行的位置。你才可以直接跳過去。 2.你這個情況只有用 FGETS 來讀入前三行。可是不理那三行的資料。^_^
k804138
一般會員


發表:3
回覆:4
積分:1
註冊:2005-04-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-04 18:55:16 IP:218.166.xxx.xxx 未訂閱
那可以不用fseek,用別的方法掉過嗎? 因為我之後可能要處理到上千的資料,一次就要跳個512比之類的. 假如都要一直讀會不會太浪費.
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-04-04 19:02:37 IP:59.104.xxx.xxx 未訂閱
no. 除非你先用 fgets 去建立一次 index 你下一次才會增快。 不然,你要想辦法在存入時。就要限定每一行的長度要固定。 那樣你的 fseek 才能幫得上忙。
k804138
一般會員


發表:3
回覆:4
積分:1
註冊:2005-04-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-04-04 19:21:30 IP:218.166.xxx.xxx 未訂閱
像是txt檔案,要讀這樣的. x座標 y座標 電容值 8116 4512 6.600000e-14 48404 12720 3.300000e-14 50119 19491 6.400000e-14 54375 18333 4.000000e-14 45204 10920 6.700000e-14 40398 5928 3.200000e-14 那是不是只要把存檔方式改變. 8116 4512 6.600000e-14 <-我無法把空白弄整齊,在8116後面是兩個空白. 48404 12720 3.300000e-14 50119 19491 6.400000e-14 54375 18333 4.000000e-14 45204 10920 6.700000e-14 40398 5928 3.200000e-14 那我可能還要問怎麼統一這樣的格式了? 發表人 - k804138 於 2005/04/04 19:23:53 發表人 - k804138 於 2005/04/04 19:26:36
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-04-04 19:27:12 IP:59.104.xxx.xxx 未訂閱
這個東西喔。 我上次寫過這類的東西。是完全讀到記憶體來動作。 等所有的動作都做完了。再寫回檔案。 它就不能用我說的那樣用固定字數為一行的做法囉。 讀進記憶體吧。 反正。現在的記憶體很大,而硬碟也很快。^_^
k804138
一般會員


發表:3
回覆:4
積分:1
註冊:2005-04-04

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-04-04 21:18:09 IP:218.166.xxx.xxx 未訂閱
那我就這樣用吧!! 反正也能達到我要的功能. 謝謝你唷.
ubong
一般會員


發表:2
回覆:42
積分:23
註冊:2002-10-02

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-04-05 23:41:42 IP:218.170.xxx.xxx 未訂閱
8116 4512 6.600000e-14 <-我無法把空白弄整齊,在8116後面是兩個空白. 48404 12720 3.300000e-14 50119 19491 6.400000e-14 54375 18333 4.000000e-14 45204 10920 6.700000e-14 40398 5928 3.200000e-14 那我可能還要問怎麼統一這樣的格式了? 你可以用: sprintf(str,"%-6s%-6s%-12s",str1,str2,str3); 便可以達到固定長度,-表向左靠,數字表示固定字數,不足部份以space補足。 ubong
------
ubong
系統時間:2024-05-19 13:33:38
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!