入力された文字列に、指定された要素が含まれているか調べるには?

解決


すなくじら  2005-12-21 14:49:48  No: 19356  IP: 192.*.*.*

RichEditに入力された文字列が、指定された要素の中に含まれていたら
イベントが起きるという事をしたく下記のようなプログラムを組んだのですが、

[エラー] main.pas(726): E2001 順序型が必要です

というエラーがでました。どのようにしたらよいのでしょうか?



var
  stringset:set of String;
begin
  stringset:=['abc','def','gef'];

  if RichEdit1.SelText in stringset then
  begin
    
  end;
end;

編集 削除
Syake  2005-12-21 15:33:16  No: 19357  IP: 192.*.*.*

>stringset:set of String
これ自体無効です。
Set Of XXXX;
これは集合型の宣言ですので、列挙型か、Byte、Char、Booleanのみ
有効です。
当然、列挙型でも上記のような判断には使えません。

別の方法で判断するようにした方が良いでしょう。

編集 削除
すなくじら  2005-12-21 19:42:12  No: 19358  IP: 192.*.*.*

御丁寧に教えていただきありがとうございます!!
別の方法を試してみます。

編集 削除
すなくじら  2005-12-21 19:42:43  No: 19359  IP: 192.*.*.*

チェック入れるの忘れてました(笑)

編集 削除
りおりお  2005-12-21 20:04:17  No: 19360  IP: 192.*.*.*

TStringList の IndexOf() メソッドは二分探索で高速です。これを利用できませんか?

procedure TForm1.Button1Click(Sender: TObject);
var
  sl: TStringList;
begin
  sl := TStringList.Create;
  try
    sl.Add('abc');
    sl.Add('def');
    sl.Add('gef');
    if sl.IndexOf(Edit1.Text) <> -1 then
    begin
      Label1.Caption := 'Include';
    end
    else
    begin
      Label1.Caption := 'Not include';
    end;
  finally
    sl.Free;
  end;
end;

編集 削除
B  2005-12-24 00:31:44  No: 19361  IP: 192.*.*.*

横から失礼
>TStringList の IndexOf() メソッドは二分探索で高速です
TStringListのSortedがTrueなら二分探索ですが(内部でFindを呼び出している)、Falseなら順次検索となります。

編集 削除
りおりお  2005-12-24 00:36:50  No: 19362  IP: 192.*.*.*

> TStringListのSortedがTrueなら二分探索ですが

おう、そうでした。

sl.Sorted := true;

を忘れました。ご指摘ありがとうございます。

編集 削除