如何在Delphi7中自訂且動態的使用集合於IF敘述句中? |
尚未結案
|
NO.5
初階會員 發表:18 回覆:35 積分:25 註冊:2005-02-23 發送簡訊給我 |
請問各位先進:
在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 發送簡訊給我 |
你可以參考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 發送簡訊給我 |
感謝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 發送簡訊給我 |
|
yyu10
中階會員 發表:9 回覆:99 積分:96 註冊:2005-02-18 發送簡訊給我 |
简单地说, 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 發送簡訊給我 |
|
yyu10
中階會員 發表:9 回覆:99 積分:96 註冊:2005-02-18 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |