文字列を持っていると言う
'SomeName'
そして、case文で値が返されることを望んでいました。この寝ることができますか?文字列は次のようにcase文で使用できますか
Case 'SomeName' of
'bobby' : 2;
'tommy' :19;
'somename' :4000;
else
showmessage('Error');
end;
Delphi Case Statement
は順序型のみをサポートします。したがって、文字列を直接使用することはできません。
しかし、次のような別のオプションが存在します
Jclライブラリには、次のように機能するStrIndex関数StrIndex(Index, Array Of String)
があります。
Case StrIndex('SomeName', ['bobby', 'tommy', 'somename']) of
0: ..code.. ;//bobby
1: ..code..;//tommy
2: ..code..;//somename
else
ShowMessage('error');
end.
@Danielの答えは正しい方向を示してくれましたが、「Jclライブラリ」の部分と標準バージョンに関するコメントに気付くまでに少し時間がかかりました。
[少なくとも] 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に称賛を送ります。
D7およびDelphi Seattleで動作し、system.Ansistringを使用します
case AnsiIndexStr(tipo, ['E','R'] ) of 0: result := 'yes'; 1: result := 'no'; end;