全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:865
推到 Plurk!
推到 Facebook!

TStringList 疑慮 - 有關讀存檔案內容格式

答題得分者是:RaynorPao
e_snare
一般會員


發表:26
回覆:35
積分:12
註冊:2004-03-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-03-22 20:42:51 IP:210.66.xxx.xxx 未訂閱
我有幾筆資料欄位是存在AnsiString, 用TStringList存入檔案, 所以會像下面這樣:比如三筆 第一筆 123 第二筆 456 第三筆 789 但我想要的是每行5個或其它,雖然欄位是那三筆,但存入檔案我要這樣 12345 6789 依照我想要的每行五個,將多筆資料按照這樣的格式存入接在一起。 且叫出來要回到欄位三筆三個欄位。 希望給點提示,弄了兩天了,不懂。
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-03-22 21:13:11 IP:61.221.xxx.xxx 未訂閱
引言: 我有幾筆資料欄位是存在AnsiString, 用TStringList存入檔案, 所以會像下面這樣:比如三筆 第一筆 123 第二筆 456 第三筆 789 但我想要的是每行5個或其它,雖然欄位是那三筆,但存入檔案我要這樣 12345 6789 依照我想要的每行五個,將多筆資料按照這樣的格式存入接在一起。 且叫出來要回到欄位三筆三個欄位。 希望給點提示,弄了兩天了,不懂。
e_snare 你好: 請參考以下的做法 (主要利用 TStringList 及 AnsiString.SubString) < class="code"> // 寫入檔案 AnsiString sz1="123"; AnsiString sz2="456"; AnsiString sz3="789"; AnsiString sz=sz1+sz2+sz3; TStringList *sl=new TStringList; int iTime=(sz.Length()%5==0)? sz.Length()/5: sz.Length()/5+1; for(int i=0; iAdd(sz.SubString(1+i*5, iCount)); } sl->SaveToFile("test2.txt"); delete sl; // 讀取檔案 AnsiString sz1; AnsiString sz2; AnsiString sz3; AnsiString sz; TStringList *sl=new TStringList; sl->LoadFromFile("test2.txt"); for(int i=0; iCount; i++) { sz+=sl->Strings[i]; } sz1=sz.SubString(1+3*0, 3); sz2=sz.SubString(1+3*1, 3); sz3=sz.SubString(1+3*2, 3); ShowMessage(sz1); ShowMessage(sz2); ShowMessage(sz3); delete sl; -- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
e_snare
一般會員


發表:26
回覆:35
積分:12
註冊:2004-03-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-03-22 22:46:31 IP:210.66.xxx.xxx 未訂閱
簡直是神    如果我的功力有RaynorPao五分之一就好了    此方法沒有問題,需要的朋友可以參考,很有用的,謝謝了。    
e_snare
一般會員


發表:26
回覆:35
積分:12
註冊:2004-03-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-03-23 20:18:40 IP:203.67.xxx.xxx 未訂閱
e_snare 你好: 請參考以下的做法 (主要利用 TStringList 及 AnsiString.SubString) < class="code"> // 寫入檔案 AnsiString sz1="123"; AnsiString sz2="456"; AnsiString sz3="789"; AnsiString sz=sz1+sz2+sz3; TStringList *sl=new TStringList; int iTime=(sz.Length()%5==0)? sz.Length()/5: sz.Length()/5+1; for(int i=0; iAdd(sz.SubString(1+i*5, iCount)); } sl->SaveToFile("test2.txt"); delete sl; // 讀取檔案 AnsiString sz1; AnsiString sz2; AnsiString sz3; AnsiString sz; TStringList *sl=new TStringList; sl->LoadFromFile("test2.txt"); for(int i=0; iCount; i++) { sz+=sl->Strings[i]; } sz1=sz.SubString(1+3*0, 3); sz2=sz.SubString(1+3*1, 3); sz3=sz.SubString(1+3*2, 3); ShowMessage(sz1); ShowMessage(sz2); ShowMessage(sz3); delete sl; -- Enjoy Researching & Developing -- [/quote] 上面可以了,但 我讀取檔案時加了以下程式碼來將hex轉回相對應的字 int iCount=sl->sz1.Length()/2; //這行改成長度3,因為上面是三個字 AnsiString sz[3] = {sz1,sz2,sz3}; for(int i=0; isz[i].SubString(1+i*2, 2))); } Edit1->Text=sz[0]; Edit2->Text=sz[1]; Edit3->Text=sz[3]; 我的問題是比如我檔案裡是 410000 結果叫出來 410000A 看來A有轉出來,但410000也還在,應該只有A才對! 還有sz[1].....等就抓不出來了,都是空的或有問題! 不知我哪裡弄錯了! 發表人 - e_snare 於 2004/03/23 20:21:20
e_snare
一般會員


發表:26
回覆:35
積分:12
註冊:2004-03-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-03-23 22:46:35 IP:203.67.xxx.xxx 未訂閱
問題已自行解決
系統時間:2024-05-19 5:58:26
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!