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

隨機檔案存取

尚未結案
balado
一般會員


發表:14
回覆:6
積分:4
註冊:2003-12-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-02 15:42:23 IP:211.76.xxx.xxx 未訂閱
假設我現在有一個檔案名叫abc.txt 內容是 123 548 987 987 789 651 310 369 458 157 321 87 我是用getc ungetc scanf把123讀出來 可是要是我讀完123接下來要把檔案的point指到789 也就市說整個檔案我只想要讀取123 接下來789 再來是458 都只要讀一行的第一個數字然後要換行的話 要用啥麼函式將他換行,有沒有這樣的函式,還是我要土法煉鋼 當讀取完123就隔三個數字再讀取一個數字 先謝謝各位高手的指教
nlj859
資深會員


發表:139
回覆:375
積分:322
註冊:2004-03-20

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-02 16:08:52 IP:163.28.xxx.xxx 未訂閱
Hello balado,    如果你每一列都固定有4個數字的話,可以使用:
TStringList *txt=new TStringList;
txt->LoadFromFile("c:\\test.txt");
txt->CommaText=txt->Text; //以空白隔開
for (int i=0;iCount;i=i 4)
    Memo1->Lines->Add(txt->Strings[i]);
delete txt;
如果你每一列的資料是不固定的,如下: 123 548 789 651 310 458 157 321 123 42 2123 534 那可以使用
int SpaceIndex;
AnsiString getTxt;
TStringList *txt=new TStringList;
txt->LoadFromFile("c:\\test.txt");
for (int i=0;iCount;i  )
    {
     SpaceIndex=txt->Strings[i].Pos(" ");
     getTxt=txt->Strings[i].SubString(1,SpaceIndex-1); //取出每列第一個數字
     Memo1->Lines->Add(getTxt);
    }
delete txt;
}
balado
一般會員


發表:14
回覆:6
積分:4
註冊:2003-12-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-10-02 16:46:50 IP:211.76.xxx.xxx 未訂閱
對不起喔! 我問的不是BCB,我是用C,不知道可不可以在這邊問... 我要的是C處理的函式庫有嘛? 在純C下面要如何辦到? 也謝謝這位高手幫我回答... 請大家多多指教
nlj859
資深會員


發表:139
回覆:375
積分:322
註冊:2004-03-20

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-10-02 17:25:56 IP:163.28.xxx.xxx 未訂閱
Hello balado,    不曉得這樣是不是你要的?
#include 
#pragma hdrstop
#include 
#include 
//---------------------------------------------------------------------------    #pragma argsused
int main(int argc, char* argv[])
{
  TStringList *txt=new TStringList;
  txt->LoadFromFile("c:\\test.txt");
  txt->CommaText=txt->Text; //以空白隔開
  for (int i=0;iCount;i=i 4)
      cout << txt->Strings[i].c_str() << endl;
  delete txt;
  getch();
  return 0;
}
我想應該是沒有函式可以用的. 不行的話,我想就要用土法煉鋼的方式了.
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-10-02 21:10:10 IP:211.76.xxx.xxx 未訂閱
balado 您好:    scanf("%*d %*s ", ...)中有個可以scan但會略過資料不讀取的方式,提供您參考。 如:%*d,表示略過這個整數,其他依此類推。 底下程式碼,請參考修改以符合您要的形式。

// index: 要讀取的資料項(由1開始)
// len  : 每列總共的資料項
void readData(FILE *fp, int index, int len)
{ int k, value;
  AnsiString msg="";      while (! feof(fp) )
    { for (k=0; k
RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====#####
justdo
高階會員


發表:2
回覆:359
積分:222
註冊:2004-08-17

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-10-02 21:40:01 IP:221.169.xxx.xxx 未訂閱
TStringList 是BCB獨有的 c大概只能土法煉鋼了吧 用bin模式開檔,將一個一個字元讀進來 遇到'\n'就開始存字元,直到遇到一個空白字元為止 再將存下來的這些字元轉成數字即可
brook
資深會員


發表:57
回覆:323
積分:371
註冊:2002-07-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-10-04 17:00:11 IP:218.160.xxx.xxx 未訂閱
試試fgets,可能比較好用.
系統時間:2024-06-26 13:37:37
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!