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

case 比對問題

尚未結案
larrytyan
一般會員


發表:51
回覆:38
積分:17
註冊:2004-08-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-03-18 16:19:57 IP:211.74.xxx.xxx 未訂閱
Dear all. 請問 case 真的不能做字串比對嗎??? 有什麼變通的方法嗎? case v1 of '1': '2': 'a1': 'a2': 'aa': end 如果不能比對字串那不是要寫一大堆 IF IF IF
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-03-18 16:31:28 IP:202.62.xxx.xxx 未訂閱
您好﹗    在Delphi中Case的語法﹐只适用于以下四種形態的資料﹕ Integer整數資料形態, Char字元資料形態, Enumerated列舉資料形態, SubRange範圍資料形態    ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟
larrytyan
一般會員


發表:51
回覆:38
積分:17
註冊:2004-08-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-03-18 16:53:21 IP:60.248.xxx.xxx 未訂閱
Dear Sir. 我覺得字串也很重要不是嗎?? 如果不能比對字串那不就只好用 IF 一個一個往下比了... 為什麼 borland 不能改善一下呢?? TKS.    
引言: 您好﹗ 在Delphi中Case的語法﹐只适用于以下四種形態的資料﹕ Integer整數資料形態, Char字元資料形態, Enumerated列舉資料形態, SubRange範圍資料形態 ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-03-18 17:22:48 IP:202.62.xxx.xxx 未訂閱
larrytyan兄﹐即使小弟也這樣想﹐這似乎都不能影響到case的標准語法吧﹐呵呵﹗同您所想﹐希望Borland改進﹒    ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-03-18 20:15:07 IP:60.248.xxx.xxx 未訂閱
引言: 請問 case 真的不能做字串比對嗎??? 有什麼變通的方法嗎?
larrytyan 你好
第一個變通方法,利用TStrings的IndexOf Method
Var
  Sl : TStrings;
  s : String;
begin
  sl := TStringList.Create;
  Sl.Commatext := '1,2,a1,a2,aa';
  S := 'A1';
  Case Sl.IndexOf(s) of
    -1:ShowMessage('無符合資料 ');
    0:ShowMessage('你選到的是 1');
    1:ShowMessage('你選到的是 2');
    2:ShowMessage('你選到的是 a1');
    3:ShowMessage('你選到的是 a2');
    4:ShowMessage('你選到的是 aa');
  end;
  sl.free;
end;    第二個 也是與上個方法相同關念,只是沒有使用 TStrings,但要自已寫個Function,自行解析字串,找出你選的是第幾個子字串    Function IndexOfStrs(Const cList,value:String):Integer;
Var
  L1, L2, i, j, p :Integer ;
Begin
  Result := -1 ;
  L1:= Length(cList);
  L2:= Length(value);
  If (L1 =0) or (L2=0) Then Exit;
  p := 0 ;
  i := 1 ;
  Repeat
    // 檢查是否符合
    For j:= 1 To L2 Do Begin
      If ((i j-1)>L1) Or (UpCase(cList[i j-1]) <> UpCase(value[j])) Then Break ;
    End;
    If (j > L2) And ((cList[i j-1]=',') or ((i L2)>L1)) Then Begin
      Result := p ;
      Break;
    End;
    Inc(i);
    For j := i To L1 Do Begin
      If cList[j]=',' Then Begin
        i:=j 1;
        Inc(p);
        Break;
      End;
    End;
  Until i > L1 ;
End;    使用時如下方式呼叫
  cItems := '1,2,a1,a2,aa';
  Case IndexOfStrs(cItems ,'a2') of
    -1:ShowMessage('無符合資料 ');
    0:ShowMessage('你選到的是 1');
    1:ShowMessage('你選到的是 2');
    2:ShowMessage('你選到的是 a1');
    3:ShowMessage('你選到的是 a2');
    4:ShowMessage('你選到的是 aa');
  end;
_______________________________________ 深藍的魚,祝您好運..........連連 發表人 - chance36 於 2005/03/18 20:17:59
miteamb
一般會員


發表:0
回覆:2
積分:0
註冊:2002-10-29

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-04-26 05:55:15 IP:66.85.xxx.xxx 未訂閱
以下寫法,可參考 function StringIndex ( const SearchString: string;StrList: array of string): Integer; var zi:Integer; begin for zi:=0 to High(StrList) do if CompareText(SearchString,StrList[zi])=0 then begin Result:=zi; Break; end; end; procedure TForm1.Button1Click(Sender: TObject); begin case StringIndex ( edit1.text,['Label1','Label2']) of 0: edit1.text:='TT1'; 1: edit1.text:='TT2'; else edit1.text:='FF'; end; end;
系統時間:2024-05-17 13:35:31
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!