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

如何在Delphi7中自訂且動態的使用集合於IF敘述句中?

尚未結案
NO.5
初階會員


發表:18
回覆:35
積分:25
註冊:2005-02-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-03-10 17:28:26 IP:210.64.xxx.xxx 未訂閱
請問各位先進:     在Oracle中可以使用"IN"這個集合運算子,而且不需預先宣告,隨時隨地想用就用,例如: DECLARE    A   VARCHAR2(10); BEGIN    .......    IF A IN ('SS','TT','FG','TG')    THEN       ..............    END IF; END; 只要A符合小括號裡的任一個字串值,就會執行設定的敘述,當然不必一定是字串,無序列的數字也可以,例如:(1,5,7,2,9,22),如果A依據前後程式的影響,而有不同的適用範圍,有時是'SS','TT','FG','TG'其中之一,有時是'ST','MA','FV','FG','TG'其中之一,事實上不管是'SS','TT','FG','TG'還是'ST','MA','FV',都只是A的其中一種可能,請問如何撰寫符合下列功能的Delphi程式碼: (Oracle) IF A IN ('SS','TT','FG') THEN ................ END IF; IF A IN ('ST','MA','FV') THEN ................ END IF; IF (A IN ('SS','TT','MA','FV') AND (............)) OR (A IN ('FG','ST','TG') AND (............)) THEN ............... END IF; PS.每一行前頭的空白都自動被削掉,無法排版,還請各位先進不吝指教!!
yorkland
高階會員


發表:2
回覆:138
積分:108
註冊:2004-12-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-03-10 18:11:31 IP:220.130.xxx.xxx 未訂閱
你可以參考Delphi裡Sets的說明.. 另外, 你在發表文章時, 如果遇到程式碼, 按一下編輯窗上的#按鈕即可。 然後把程式碼包在 Code ... /Code 之間。    
type      TSomeInts = 1..250;
  TIntSet = set of TSomeInts;    create a set type called TIntSet whose values are collections of integers in the range from 1 to 250. You could accomplish the same thing with
type TIntSet = set of 1..250;
Given this declaration, you can create a sets like this:
var Set1, Set2: TIntSet;
 ...
Set1 := [1, 3, 5, 7, 9];
Set2 := [2, 4, 6, 8, 10]    You can also use the set of ... construction directly in variable declarations:
var MySet: set of 'a'..'z';
 ...
MySet := ['a','b','c'];
Other examples of set types include
set of Byte
set of (Club, Diamond, Heart, Spade)
set of Char;
The in operator tests set membership:
if 'a' in MySet then ... { do something } ;
Every set type can hold the empty set, denoted by [].
NO.5
初階會員


發表:18
回覆:35
積分:25
註冊:2005-02-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-03-14 09:51:32 IP:210.64.xxx.xxx 未訂閱
感謝yorkland的說明,但遺憾的是就本人的理解,還是無法解決這個問題: 僅就達成下列的要求,依照我所了解的部分,撰碼如下:
VAR
   STUS_CDS: SET OF 'FV','FF','FG','MA','CC','FH','RF';
BEGIN
   IF E.Text IN STUS_CDS
   THEN
      SHOWMESSAGE('TEST OK !!');
END;
 
DELPHI編譯器告訴我"要使用'..'而不是用','",如果改成下列方式:
VAR
   STUS_CDS: SET OF (FV,FF,FG,MA,CC,FH,RF);
編譯雖然會通過檢查,但是"IF E.Text IN STUS_CDS"卻會產生問題,請問何解?
NO.5
初階會員


發表:18
回覆:35
積分:25
註冊:2005-02-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-03-25 14:03:22 IP:210.64.xxx.xxx 未訂閱
請問有哪位先進願意回答這個問題?還是我有表示不夠清楚的地方,請不吝指教. 如果沒有的話,很遺憾的必須要結案了,置頂太久了,不好意思!!
yyu10
中階會員


發表:9
回覆:99
積分:96
註冊:2005-02-18

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-03-25 15:19:22 IP:220.244.xxx.xxx 未訂閱
简单地说, Delphi的语法并不直接支持你要的东西. 不过可以通过一个简单的函数来实现.    如果你不介意用函数, 可以试试:
function InList(s: string; strs: array of const): boolean;
var
  i: integer;
  ss: string;
begin
  Result := True;
  for i := 0 to High(strs)-1 do
  begin
    case strs[i].VType of
    vtChar:
      ss := strs[i].VChar;
    vtAnsiString:
      ss := string(strs[i].VAnsiString);
    else
      ss := '';
    end;        if ss = s then
      Exit;
  end;
  Result := False;
end;
使用函数InList:
var
  a, b, c: string;    if (InList(a, ['SS','TT','MA']) and (...)) OR (InList(a, ['ST','TG']) AND (...)) then
begin
end;    if InList(a, ['SS', 'ST', b, c, 'PP', 'A', 'B', 'C']) then .....    if InList('MA', [a, b, c]) then .....    
_________________________ Programming is a passion 發表人 - yyu10 於 2005/03/25 15:23:30
NO.5
初階會員


發表:18
回覆:35
積分:25
註冊:2005-02-23

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-03-28 10:08:47 IP:210.64.xxx.xxx 未訂閱
感謝回覆!! 在實做之後的確能解決我的問題. 請包涵在下學淺,請您撥空解釋一下"V"開頭的字的意義及用法,在Help中沒找到,或者在哪可以找到相關資訊!?
yyu10
中階會員


發表:9
回覆:99
積分:96
註冊:2005-02-18

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-03-28 14:55:18 IP:220.244.xxx.xxx 未訂閱
请在Delphi Help里查找"Variant open array parameters". 如果你用的是中文版Delphi, 我不清楚怎么翻译成对应的中文. 不过, 它是Procedures and functions这一章的倒数几个topic之一, 应该比较容易找到. _________________________ Programming is a passion
系統時間:2024-07-04 20:29:54
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!