例えば配列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;
のようにしているのですが、皆さんはどのようにやっているのでしょうか。
もっとスマートな方法がありましたら教えてください。
こんな感じですかねぇ。
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;
見間違えました。
処理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;
Delphi6からは
AnsiMatchStr 関数
というものがあるようです。
HELPより
>AnsiMatchStr 関数は,文字列の配列内に指定の文字列と正確に一致するものがあるかどうかを示します。
>function AnsiMatchStr(const AText: string; const AValues: array of string): Integer;
ありがとうございました。
私もできるだけラベルを使うのを避けたかったのでとても参考になりました。
ツイート | ![]() |