delphi 将Case语句与String一起使用

uinbv5nw  于 12个月前  发布在  其他
关注(0)|答案(6)|浏览(150)

说我有一根弦

'SomeName'

字符串
并希望在case语句中返回值。可以这样做吗?字符串可以在这样的case语句中使用吗

Case 'SomeName' of

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

sczxawaw

sczxawaw1#

在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.

字符串

ecfdbz9o

ecfdbz9o2#

Delphi Case Statement只支持序数类型。所以你不能直接使用字符串。
但还有其他选择,

pexxcrt2

pexxcrt23#

@丹尼尔的回答为我指出了正确的方向,但我花了一段时间才注意到“Jcl库”部分和关于标准版本的评论。
在[至少] XE 2和更高版本中,您可以使用:用途:

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 版本,分别使用AnsiIndexStrAnsiIndexText
感谢@丹尼尔、@The_Fox和@afrazier对这个答案的大部分回答。

q3qa4bjr

q3qa4bjr4#

在D7和 Delphi 西雅图工作,

uses StrUtils (D7) system.Ansistring (Delphi Seattle) system.StrUtils (Berlin 10.1)

case AnsiIndexStr(tipo, ['E','R'] )   of
      0: result := 'yes';
      1: result := 'no';
end;

字符串

csga3l58

csga3l585#

我使用AnsiStringIndex和作品,但如果你可以转换为数字没有问题:

try
  number := StrToInt(yourstring);
except
  number := 0;
end;

字符串

ogsagwnx

ogsagwnx6#

试试这个它使用System.StrUtils

procedure TForm3.Button1Click(Sender: TObject);
const
  cCaseStrings : array [0..4] of String = ('zero', 'one', 'two', 'three', 'four');
var
  LCaseKey : String;
begin
  LCaseKey := 'one';
  case IndexStr(LCaseKey, cCaseStrings) of
    0: ShowMessage('0');
    1: ShowMessage('1');
    2: ShowMessage('2');
    else ShowMessage('-1');
  end;
end;

字符串

相关问题