文字列があるとします
'SomeName'
case ステートメントで値を返す必要がありました。これはできますか?文字列を case ステートメントで使用できますか
Case 'SomeName' of
'bobby' : 2;
'tommy' :19;
'somename' :4000;
else
showmessage('Error');
end;
文字列があるとします
'SomeName'
case ステートメントで値を返す必要がありました。これはできますか?文字列を case ステートメントで使用できますか
Case 'SomeName' of
'bobby' : 2;
'tommy' :19;
'somename' :4000;
else
showmessage('Error');
end;
Jcl ライブラリには、次のStrIndex(Index, Array Of String)
ように機能する StrIndex 関数があります。
Case StrIndex('SomeName', ['bobby', 'tommy', 'somename']) of
0: ..code.. ;//bobby
1: ..code..;//tommy
2: ..code..;//somename
else
ShowMessage('error');
end.
DelphiCase Statement
は序数型のみをサポートします。したがって、文字列を直接使用することはできません。
しかし、次のような別のオプションが存在します
@Danielの答えは正しい方向を示してくれましたが、「Jcl Library」の部分と標準バージョンに関するコメントに気付くのに時間がかかりました。
[少なくとも] XE2 以降では、以下を使用できます。
Case IndexStr('somename', ['bobby', 'tommy', 'somename', 'george']) of
0: ..code..; // bobby
1: ..code..; // tommy
2: ..code..; // somename
-1: ShowMessage('Not Present'); // not present in array
else
ShowMessage('Default Option'); // present, but not handled above
end;
このバージョンでは大文字と小文字が区別されるため、最初の引数が「SomeName」の場合はnot present in array
パスになります。IndexText
大文字と小文字を区別しない比較に使用します。
古いバージョンの Delphi の場合は、それぞれAnsiIndexStr
またはを使用します。AnsiIndexText
この回答のほとんどのコンポーネントについて、@Daniel、@The_Fox、および @afrazier に感謝します。