Say i have a string

'SomeName' 

and wanted the values return in a case statement. Can this bedone? Can strings be used in a case statement like so

Case 'SomeName' of 'bobby' : 2; 'tommy' :19; 'somename' :4000; else showmessage('Error'); end; 
1

6 Answers

In Jcl library you have the StrIndex function StrIndex(Index, Array Of String) which works like this:

Case StrIndex('SomeName', ['bobby', 'tommy', 'somename']) of 0: ..code.. ;//bobby 1: ..code..;//tommy 2: ..code..;//somename else ShowMessage('error'); end. 
3

The Delphi Case Statement only supports ordinal types. So you cannot use strings directly.

But exist another options like

0

@Daniel's answer pointed me in the right direction, but it took me a while to notice the "Jcl Library" part and the comments about the standard versions.

In [at least] XE2 and later, you can use:

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; 

This version is case-sensitive, so if the first argument was 'SomeName' it would take the not present in array path. Use IndexText for case-insensitive comparison.

For older Delphi versions, use AnsiIndexStr or AnsiIndexText, respectively.

Kudos to @Daniel, @The_Fox, and @afrazier for most of the components of this answer.

2

Works on D7 and Delphi Seattle,

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; 

I used AnsiStringIndex and works, but if you can convert to number without problems:

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

try this it uses 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; 

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.