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

有關TXT檔轉檔問題

答題得分者是:RedSnow
paulcaptain
一般會員


發表:13
回覆:9
積分:4
註冊:2004-11-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-06-16 01:43:05 IP:211.78.xxx.xxx 未訂閱
我現在有一個.TXT檔,裡面有一串數字,每個數字之間有一個空白做間隔隔開 EX:12 58 66 23 69 100 200 199 54 我想把這些數字抓出來 最後存成一個RAW檔(每個數字用BYTE存) 請問我該怎麼做?... 如果知道,可以解答一下嗎?謝謝看完...
limeca
中階會員


發表:2
回覆:74
積分:60
註冊:2005-05-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-06-16 09:21:53 IP:202.145.xxx.xxx 未訂閱
以下的程式應有你要的功能,自己再改改囉 int x=255; char buf[80]; TStringList *s3=new TStringList(); sprintf(buf,"%c",x); s3->Add(buf); s3->SaveToFile("1.txt");
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-06-16 09:30:38 IP:219.137.xxx.xxx 未訂閱
paulcaptain 您好:    請參考下列範例,以瞭解如何透過 TStringList 來拆解文字資料、抓取數字資料:
AnsiString sz = "12 58 66 23 69 100 200 199 54";
unsigned char tmp;
TStringList *sl = new TStringList;    // 將欲拆解字串設給 TStringList 的 CommaText,
// 可將 "以空白字元分隔" 的字串拆解成多個文字陣列
sl->CommaText = sz;    FILE *file = fopen("test.bin", "wb");  // 建立檔案    for (int i=0; iCount; i  ) {  // sl->Count 為拆解後的元素數量
    tmp = (char)StrToInt(sl->Strings[i]); // 轉成數字
    fwrite(&tmp, sizeof(tmp), 1, file);  // 寫入檔案
}    fclose(file);
delete sl;
以上敘述未做最佳化處哩,請自己加強,另外如果您想要先一次轉換好數字資料後,再寫入檔案,那就先設一個 char 陣列來存放轉換後的數字,等所有數字均取得並轉換好之後,再一次性寫到檔案裡亦可。 7 天天敲鍵盤 v 時時按滑鼠 8 發表人 - RedSnow 於 2005/06/16 09:54:45
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-06-16 10:39:36 IP:219.137.xxx.xxx 未訂閱
另外給您一個配合檔案讀取動作的範例:
if (OpenDialog1->Execute()) {  // 如果透過 OpenDialog 選取了欲讀取的檔案
    // 設定欲讀取的檔案名稱
    AnsiString inFile = OpenDialog1->FileName;
    // 設定欲寫入的檔案名稱
    AnsiString outFile = "test.bin";
    // 存放讀入的資料行
    TStringList *slRow = new TStringList;
    // 存放拆解資料行後的各個數字字串
    TStringList *slCol = new TStringList;
    // 存放數字字串轉換後的數字
    unsigned char tmp;        slRow->LoadFromFile(inFile);  // 將檔案內容載至 slRow
    FILE *file = fopen(outFile.c_str(), "wb");  // 建立檔案        for (int row=0; rowCount; row  ) {
        slCol->CommaText = slRow->Strings[row];    // 拆解資料行為 slCol
        for (int col=0; colCount; col  ) {
            tmp = StrToInt(slCol->Strings[col]);  // 將字串轉為數字
            fwrite(&tmp, sizeof(tmp), 1, file);  // 寫入檔案
        }
    }        fclose(file);  // 關閉檔案
    delete slRow;
    delete slCol;
}
如果處理檔案不需要用到 OpenDialog,那您可以將上述的第一個判斷刪除掉,然後設定 inFile 與 outFile 的值即可。 7 天天敲鍵盤 v 時時按滑鼠 8
deity
尊榮會員


發表:90
回覆:876
積分:678
註冊:2003-05-09

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-06-16 11:04:27 IP:218.15.xxx.xxx 未訂閱
引言: 我現在有一個.TXT檔,裡面有一串數字,每個數字之間有一個空白做間隔隔開 EX:12 58 66 23 69 100 200 199 54 我想把這些數字抓出來 最後存成一個RAW檔(每個數字用BYTE存) 請問我該怎麼做?... 如果知道,可以解答一下嗎?謝謝看完...
插个花,各位 class="code"> procedure TForm1.Button1Click(Sender: TObject); var sl: TStringList; YourString, YourDelimiter: string; i: Integer; begin YourString := '12 58 66 23 69 100 200 199 54'; YourDelimiter := ' '; sl := TStringList.Create; try sl.Text := StringReplace(YourString, YourDelimiter, #13#10, [rfReplaceAll]); for i := 0 to sl.Count - 1 do ShowMessage(sl.Strings[i]); //这里就是得出您上面的单个数字 finally sl.Free; end; end; 方法二: procedure TForm1.Button2Click(Sender: TObject); var ss,token:string; z:integer; begin ss:='12 58 66 23 69 100 200 199 54'; for z:=1 to 9 do showmessage(fetch(ss,' ',true)); end; 试试看< >希望能对您有所帮助< > ============================ 为什么经过多年以后,得失的过程如此冷漠 ============================
paulcaptain
一般會員


發表:13
回覆:9
積分:4
註冊:2004-11-17

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-06-16 15:59:11 IP:211.72.xxx.xxx 未訂閱
感謝limeca,RedSnow,deity這三位朋友~ 謝謝你們 不過RedSnow給的方法馬上解決了我的問題 所以我把分數結給RedSnow囉... 謝謝各位的幫忙=)
系統時間:2024-05-03 18:39:12
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!