Подтвердить что ты не робот

Использование случая с строкой

Скажем, у меня есть строка

'SomeName'

и хотел, чтобы значения возвращались в случае case. Может ли это быть? Можно ли использовать строки в случае case

Case 'SomeName' of

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

Ответ 1

Delphi Case Statement поддерживает только порядковые типы. Таким образом, вы не можете напрямую использовать строки.

Но существуют другие варианты, например

Ответ 2

В библиотеке 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.

Ответ 3

@Даниэль ответ указал мне в правильном направлении, но мне потребовалось некоторое время, чтобы заметить часть "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 для большинства компонентов этого ответа.

Ответ 4

Работает на D7 и Delphi в Сиэтле, использует system.Anistring

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