2013-01-25 5 views
30

dire che ho una stringaistruzione using Caso con String

'SomeName' 

e ha voluto i valori ritornano in una dichiarazione caso. Può essere fatto? Le stringhe possono essere utilizzati in una dichiarazione caso come in modo

Case 'SomeName' of 

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

Sembra che FreePascal (FPC) già implementato questa caratteristica del linguaggio, vorrei Delphi seguirà! [http://forum.lazarus.freepascal.org/index.php?topic=17983.0] –

risposta

31

Il Delphi Case Statement supporta solo tipi ordinali. Quindi non puoi usare direttamente le stringhe.

ma esistono altre opzioni come

+3

ti piacerebbe pensare con la versione xe2, avrebbero aggiunto qualcosa .. –

31

In biblioteca Jcl si ha la funzione di StrIndex StrIndex(Index, Array Of String) che funziona in questo modo:

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

Oppure usa semplicemente la funzione standard AnsiIndexStr. –

+14

Oppure solo "IndexStr" nelle versioni Delphi più recenti. (Esistono anche le versioni '-Text' se si desidera un confronto senza distinzione tra maiuscole e minuscole.) – afrazier

8

@ risposta di Daniel mi ha segnalato nella giusta direzione, ma mi c'è voluto un po 'per notare la "Jcl Biblioteca" parte e i commenti sulle versioni standard.

In [almeno] XE2 e in seguito, è possibile utilizzare:

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; 

Questa versione è case-sensitive, quindi se il primo argomento è stato 'SomeName' ci sarebbe voluto il percorso not present in array. Utilizzare IndexText per il confronto senza distinzione tra maiuscole e minuscole.

Per le versioni Delphi precedenti, utilizzare AnsiIndexStr o AnsiIndexText, rispettivamente.

Complimenti a @Daniel, @The_Fox e @afrazier per la maggior parte dei componenti di questa risposta.

2

Funziona su D7 e Delphi Seattle, usa system.Ansistring

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