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

TStringList的問題

尚未結案
ultradev
一般會員


發表:5
回覆:2
積分:1
註冊:2004-11-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-27 10:14:24 IP:61.220.xxx.xxx 未訂閱
各位好,如果我在Form1宣告一個StringList儲存了文字資料,請問要如何在另一個Form2使用它呢?因為我在Form2想要將一個有多筆記錄的文字檔讀進StringList,再和Form1的那個StringList比對,若Form1 StringList的某筆資料是Form2 StringList所沒有的,則新增至Form2 StringList,若已經有的資料則不動作…此外這個比對的動作應該如何寫比較好呢?我用兩個迴圈結果非常慢,幾乎要當了…請問有何比較好的方式或是StringList有何方法可用呢? Thanks a lot!!
Brian77
中階會員


發表:8
回覆:114
積分:94
註冊:2002-05-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-27 11:08:55 IP:61.61.xxx.xxx 未訂閱
在 Form2 的 implementation 下 uses Form1 參照 Form1 的 TStringList 時使用 Form1.StringList 相關方法 sort() 和 find() 可以比較看看, 使用 find() 或自行寫迴圈比對(利用雙方皆已排序這個特色來設計) 兩種方法哪個快 (個人認為在這個運用中自己寫迴圈可以比較快) 發表人 - Brian77 於 2004/12/27 11:13:10
李國維
高階會員


發表:42
回覆:287
積分:235
註冊:2003-02-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-27 11:39:11 IP:219.84.xxx.xxx 未訂閱
ultradev: 你可以利用extern來宣告.範例如下
//Form1.hpp
extern TStringList *SL;
//Form1.cpp
TStringList *SL;    //Form2.hpp
#include "Form1.h"
這樣一來你就可以在Form2使用SLㄌ.
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-27 18:25:59 IP:220.130.xxx.xxx 未訂閱
幫忙實作Brian77大大的方法, 因為手上沒有BCB,謹供參考.
procedure TForm1.Button1Click(Sender: TObject);
var
  I, Index: Integer;
  SL: TStringList;
begin
  SL := TStringList.Create;
  try
    SL.Duplicates := dupIgnore;
    SL.Sorted := True;
    SL := Self.StringList.Text;
    for I := 0 to From1.StringList.Count-1 do
      if not SL.Find(From1.StringList[I], Index) then
      begin
        SL.Add(From1.StringList[I]);
        Self.StringList.Add(From1.StringList[I]);
      end;
  finally
    FreeAndNil(SL);
  end;
end;    
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-12-27 18:28:15 IP:220.130.xxx.xxx 未訂閱
更正,
 
procedure TForm2.Button1Click(Sender: TObject);
var
  I, Index: Integer;
  SL: TStringList;
begin
  SL := TStringList.Create;
  try
    SL.Duplicates := dupIgnore;
    SL.Sorted := True;
    SL := Self.StringList.Text;
    for I := 0 to From1.StringList.Count-1 do
      if not SL.Find(From1.StringList[I], Index) then
      begin
        SL.Add(From1.StringList[I]);
        Self.StringList.Add(From1.StringList[I]);
      end;
  finally
    FreeAndNil(SL);
  end;
end;
ultradev
一般會員


發表:5
回覆:2
積分:1
註冊:2004-11-25

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