配列から検索

解決


Bool  2002-08-17 06:33:49  No: 1292

例えば配列Nに'ABC'という文字列があった場合は処理Aを、ない場合は処理Bを行い、さらに両処理後に処理Cを行いたいときに
var
  N: array[1..5] of string;
  i: integer;
label
  A;
として、
begin
for i := Low(N) to High(N) do begin
  if N[i] = 'ABC' then begin

    *処理A*

    goto A;
  end;
end;

*処理B*

A:
*処理C*

end;

のようにしているのですが、皆さんはどのようにやっているのでしょうか。
もっとスマートな方法がありましたら教えてください。


にしの  2002-08-17 07:10:13  No: 1293

こんな感じですかねぇ。
goto と labelを使い始めると、見づらくなるので僕は控えます。

var
  N: array[1..5] of string;
  i: integer;
  Found: boolean;
  procedure 処理A;
  begin
    ...
    Found := True;
  end;
  procedure 処理B;
  begin

  end;
  procedure 処理C;
  begin

  end;
begin
  Found := False;
  for i := Low(N) to High(N) do if N[i] = 'ABC' then 処理A;
  if Not Found then 処理B;
  処理C;
end;


にしの  2002-08-17 07:15:24  No: 1294

見間違えました。
処理Aは、ABCを見つけたら何度も、ではないのですね。
そうなると、こうです。

var
  N: array[1..5] of string;
  i: integer;
  Found: boolean;
  procedure 処理A;
  begin
    ...
  end;
  procedure 処理B;
  begin

  end;
  procedure 処理C;
  begin

  end;
begin
  Found := False;
  for i := Low(N) to High(N) do if N[i] = 'ABC' then
  begin
    処理A;
    Found := True;
    break;
  end;
  if Not Found then 処理B;
  処理C;
end;


DF  2002-08-17 12:38:56  No: 1295

Delphi6からは
AnsiMatchStr 関数
というものがあるようです。

HELPより
>AnsiMatchStr 関数は,文字列の配列内に指定の文字列と正確に一致するものがあるかどうかを示します。
>function AnsiMatchStr(const AText: string; const AValues: array of string): Integer;


Bool  2002-08-19 02:21:10  No: 1296

ありがとうございました。
私もできるだけラベルを使うのを避けたかったのでとても参考になりました。


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








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