36

文字列があるとします

'SomeName'

case ステートメントで値を返す必要がありました。これはできますか?文字列を case ステートメントで使用できますか

Case 'SomeName' of

   'bobby' : 2;
   'tommy' :19;
   'somename' :4000;
else
   showmessage('Error');
end;
4

6 に答える 6

39

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.
于 2013-01-25T07:00:11.063 に答える
36

DelphiCase Statementは序数型のみをサポートします。したがって、文字列を直接使用することはできません。

しかし、次のような別のオプションが存在します

于 2013-01-25T05:11:15.260 に答える
19

@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 に感謝します。

于 2016-03-15T22:21:38.940 に答える