こんばんは。
以下の環境でプログラム作成しています初心者です。
CASE文についてですが
DelphiではCase文の分岐条件は整数値のみのようですが
何か細工ををして文字列も条件式にすることはできないのでしょうか。
アドバイスを頂けましたらとっても助かります。
よろしくお願いいたします。
Delphi Tokyo Enter 64bit
Windows 10 PRO
順序型以外でcaseの分岐はできないですね。
やるとすると、いったん列挙型に変換して、それでcaseの分岐、という感じかなと思います。
uses
System.TypInfo, System.SysConst,
type
TFoo = (ABC, DEF, GHI);
TFooHelper = record helper for TFoo
class function FromString(const S: String): TFoo; static;
end;
class function TFooHelper.FromString(const S: String): TFoo;
var
P: PTypeInfo;
IValue: Integer;
begin
P := TypeInfo(TFoo);
IValue := System.TypInfo.GetEnumValue(P,S);
with GetTypeData(P)^ do
begin
if (IValue < MinValue) or (IValue > MaxValue) then
begin
raise ERangeError.CreateRes(@SRangeError);
end;
end;
Result := TFoo(IValue);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Foo: TFoo;
begin
Foo := TFoo.FromString(Edit1.Text);
case Foo of
ABC:
begin
Label1.Caption := 'ABC';
end;
DEF:
begin
Label1.Caption := 'DEF';
end;
GHI:
begin
Label1.Caption := 'GHI';
end;
end;
end;
こんな感じかな
function Select(Text: String; DATA: Array of String): Integer;
var
I: Integer;
begin
RESULT := -1;
for I:=0 to High(DATA) do
begin
//大小区別するなら LowerCase 外す
if LowerCase(TEXT) = LowerCase(DATA[I]) then RESULT := I;
end;
end;
procedure TForm3.Button1Click(Sender: TObject);
var
S: String;
begin
S := 'AA';
case Select(S,['AA','BB']) of
0:
begin
Caption := 'AA';
end;
1:
begin
Caption := 'BB';
end
else
begin
Caption := 'CC';
end;
end;
end;
HFUKUSHIさん、AAAさん ご回答ありがとうございます。
お陰様で文字列分岐ができました。
これを使ってプログラミングを進めさせていただきます。
ありがとうございました。
ツイート | ![]() |