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

解決


すなくじら  2005-12-21 23:49:48  No: 19356

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-22 00:33:16  No: 19357

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

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


すなくじら  2005-12-22 04:42:12  No: 19358

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


すなくじら  2005-12-22 04:42:43  No: 19359

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


りおりお  2005-12-22 05:04:17  No: 19360

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 09:31:44  No: 19361

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


りおりお  2005-12-24 09:36:50  No: 19362

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

おう、そうでした。

sl.Sorted := true;

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加