Dis que j'ai une chaîne
'SomeName'
et voulait que les valeurs retournent dans une déclaration de cas. Est-ce que ce bedone? Les chaînes peuvent-elles être utilisées dans une déclaration de cas comme ceci
Case 'SomeName' of
'bobby' : 2;
'tommy' :19;
'somename' :4000;
else
showmessage('Error');
end;
Le Delphi Case Statement
ne prend en charge que les types ordinaux. Vous ne pouvez donc pas utiliser directement des chaînes.
Mais il existe d'autres options comme
Dans la bibliothèque Jcl, vous avez la fonction StrIndex StrIndex(Index, Array Of String)
qui fonctionne comme ceci:
Case StrIndex('SomeName', ['bobby', 'tommy', 'somename']) of
0: ..code.. ;//bobby
1: ..code..;//tommy
2: ..code..;//somename
else
ShowMessage('error');
end.
@ La réponse de Daniel m'a orienté dans la bonne direction, mais il m'a fallu un certain temps pour remarquer la partie "Bibliothèque Jcl" et les commentaires sur les versions standard.
Dans [au moins] XE2 et versions ultérieures, vous pouvez utiliser:
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;
Cette version est sensible à la casse, donc si le premier argument était 'SomeName', il faudrait le not present in array
chemin. Utilisez IndexText
pour une comparaison insensible à la casse.
Pour les anciennes versions de Delphi, utilisez AnsiIndexStr
ou AnsiIndexText
, respectivement.
Félicitations à @Daniel, @The_Fox et @afrazier pour la plupart des composants de cette réponse.
Fonctionne sur D7 et Delphi Seattle, utilise le système.
case AnsiIndexStr(tipo, ['E','R'] ) of 0: result := 'yes'; 1: result := 'no'; end;