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

用ListView呈現文字檔

尚未結案
enu
中階會員


發表:36
回覆:93
積分:55
註冊:2003-10-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-02-23 02:24:19 IP:220.142.xxx.xxx 未訂閱
請教各位先進,小弟有一個文字檔如下: aaa: bbb: yes abcde: unspecified ccc: vv: 1 id: 123455 exttt: test 小弟想要用ListView將其讀出來,就如下所示: TListItem *Data; Data=ListView1->Items->Add(); Data->Caption="…";//文字檔:之前的欄位 Data->SubItems ->Add("…");//文字檔:之後的值 …… 不知道可以怎樣來寫?run了半天還是run不出來,懇請賜教!謝謝! 發表人 - taishyang 於 2004/02/23 13:31:28
ENIX007
高階會員


發表:28
回覆:274
積分:185
註冊:2003-11-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-02-23 08:48:50 IP:210.243.xxx.xxx 未訂閱
enu您好 假如您要的是詳細模式,ViewStyle屬性請調成vsReport,並在Columns屬性 加入至少2個欄位(0和1),這樣您上面那段程式碼才會正確的顯示 不知是不是您要的 程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
------
程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
enu
中階會員


發表:36
回覆:93
積分:55
註冊:2003-10-22

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-02-23 12:20:26 IP:163.27.xxx.xxx 未訂閱
謝謝ENIX007,您所說的我都有設定了。 因為是初學者,只是不知道如何將文字檔裡的資料填到Caption和 SubItems內 原來用    TStringList *slTxt=new TStringList;    slTxt->LoadFromFile("test.txt");    for(int i=0; iCount; i ) 的用法,可是它讀出來是一列一列的。(等於是直接loadfile了) 不知道可不可以將文字檔裡冒號之前和之後分別讀到Caption和 SubItems裡去?
ENIX007
高階會員


發表:28
回覆:274
積分:185
註冊:2003-11-27

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-02-23 15:23:29 IP:210.243.xxx.xxx 未訂閱
enu您好 我有想到一個能達到您目的的做法,不過是屬於土法煉鋼型的 < class="code"> TStringList *work = new TStringList; int pos=0; work->LoadFromFile("D:\\1.txt"); pos = work->Strings[1].LastDelimiter(":"); AnsiString caption = work->Strings[1].SubString(1,pos-1); AnsiString item = work->Strings[1].SubString(pos 1,100); delete work; 以上caption與item分別存放冒號前後的字串,只要把它填入ListView就行囉, 因為是冒號,小弟只想到這個做法,如果是用逗號分隔的話,可以使用AnsiString 提供的CommaText來取得所需要的字串 程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
------
程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
m8815010
版主


發表:99
回覆:372
積分:289
註冊:2003-11-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-02-23 16:21:31 IP:61.63.xxx.xxx 未訂閱
引言: enu您好 我有想到一個能達到您目的的做法,不過是屬於土法煉鋼型的 < class="code"> TStringList *work = new TStringList; int pos=0; work->LoadFromFile("D:\\1.txt"); pos = work->Strings[1].LastDelimiter(":"); AnsiString caption = work->Strings[1].SubString(1,pos-1); AnsiString item = work->Strings[1].SubString(pos 1,100); delete work; ~~~~
enu你好,我覺得ENIX007這方法很好,因為這問題已經很細了,直接做(就是土法)應該就 >! 查了一下 class="code">//注意冒號兩旁至少有一個空白間隔 abc : 123 bcd : 234 .... .... 然後就可以用:

void __fastcall TForm1::FormCreate(TObject *Sender)
{
 TStringList* sl1=new TStringList;
 TStringList* sl2=new TStringList;
 AnsiString filename="C:\\test.txt";
 sl1->LoadFromFile(filename);     TListItem* lvdata;     for (int Lne=0;LneCount;Lne  ) {
      sl2->CommaText=sl1->Strings[Lne];
      
     //依情況下判斷,例如冒號後面是空字串等等…
      if (sl2->Count==3 && sl2->Strings[1]==":") {
          lvdata=ListView1->Items->Add();
          lvdata->Caption=sl2->Strings[0];
          lvdata->SubItems->Add(sl2->Strings[2]);
      }
 }     delete sl1;
 delete sl2;
}
that's all!
enu
中階會員


發表:36
回覆:93
積分:55
註冊:2003-10-22

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-02-27 11:30:12 IP:163.27.xxx.xxx 未訂閱
謝謝ENIX007 和m8815010先生, 我使用ENIX007先生的方式,結果為什麼第一行的aaa:沒有印出來,是印出第二行的bbb: yes? 我也試了m8815010先生的方式,compile過了,可是程式執行後卻告訴我在 for (int Lne=0;LneCount;Lne ) { 發生了問題,然後就顯示了can't open file的訊息。 可以再請教幫忙解答嗎? 感謝各位先進!
ENIX007
高階會員


發表:28
回覆:274
積分:185
註冊:2003-11-27

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-02-27 15:41:01 IP:210.243.xxx.xxx 未訂閱
enu您好 真不好意思,我只是做個比喻,TStringList的Strings是從0開始的, 按照您的需要,只要加個迴圈即可  
 TStringList *work = new TStringList;
    int pos=0;
    work->LoadFromFile("D:\\1.txt");
    for(int i=0 ; iCount ; i  )
    {
        pos = work->Strings[i].LastDelimiter(":");
        AnsiString caption = work->Strings[i].SubString(1,pos-1);
        AnsiString item = work->Strings[i].SubString(pos 1,100);
    }
    delete work;
另外m8815010兄的code感覺沒問題耶,請您確定一下C碟是否有放該文字檔 程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
------
程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
enu
中階會員


發表:36
回覆:93
積分:55
註冊:2003-10-22

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-02-27 16:21:21 IP:163.27.xxx.xxx 未訂閱
再次謝謝ENIX007先生,原則上可行了,但是出現了一個小問題,文字檔裡有一列為 Time: Sep 30 17:39:34 2003 結果執行出來後變成 Time:Sep 30 17:39: 34 2003 可否再請教,該如何去修改程式呢? 授教了,感謝!
enu
中階會員


發表:36
回覆:93
積分:55
註冊:2003-10-22

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-02-27 16:44:23 IP:163.27.xxx.xxx 未訂閱
謝謝ENIX007 和m8815010先生, 我找到解決的方法了, 因為是用ENIX007先生的方法try出來的, 所以只好把分數給ENIX007先生了; 但是還是感謝m8815010先生。 受教了!感謝!
m8815010
版主


發表:99
回覆:372
積分:289
註冊:2003-11-13

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-02-27 18:18:05 IP:61.63.xxx.xxx 未訂閱
引言: 謝謝ENIX007 和m8815010先生, 我找到解決的方法了, 因為是用ENIX007先生的方法try出來的, 所以只好把分數給ENIX007先生了; 但是還是感謝m8815010先生。 受教了!感謝!
嗯,enu兄 don't care! >>"問題,正如 >! 不過也沒關係,因為我是在假設你的文字檔是這樣單冒號的形式: "<>>" ,而你後來 "<>>" 這樣多冒號的形式可能就不適用啦! 所以問題解決就 >! 發表人 -
系統時間:2024-11-25 23:21:30
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!