delphi - example - free pascal case of
Usando Case Statement con String (4)
En la biblioteca Jcl tiene la función StrIndex(Index, Array Of String)
que funciona así:
Case StrIndex(''SomeName'', [''bobby'', ''tommy'', ''somename'']) of
0: ..code.. ;//bobby
1: ..code..;//tommy
2: ..code..;//somename
else
ShowMessage(''error'');
end.
Digamos que tengo una cuerda
''SomeName''
y quería que los valores retornaran en una declaración de caso. ¿Se puede hacer esto? ¿Se pueden usar cadenas en una declaración de caso como tal?
Case ''SomeName'' of
''bobby'' : 2;
''tommy'' :19;
''somename'' :4000;
else
showmessage(''Error'');
end;
Funciona en D7 y Delphi Seattle, usa el sistema.Ansistring
case AnsiIndexStr(tipo, [''E'',''R''] ) of 0: result := ''yes''; 1: result := ''no''; end;
La Case Statement
Delphi solo admite tipos ordinales. Entonces no puedes usar cadenas directamente.
Pero existen otras opciones como
- construir una función que devuelve un entero (hash) basado en una cadena
- usando genéricos y métodos anónimos ( Un caso genérico para cadenas )
- usando una función que recibe un conjunto de cadenas ( haciendo un caso para cuerdas, la manera correcta )
- y así.
La respuesta de @ Daniel me indicó la dirección correcta, pero me tomó un tiempo darme cuenta de la parte "Jcl Library" y los comentarios sobre las versiones estándar.
En [al menos] XE2 y posterior, puede usar:
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;
Esta versión distingue entre mayúsculas y minúsculas, por lo que si el primer argumento fuera ''SomeName'' tomaría el not present in array
ruta de la not present in array
. Use IndexText
para comparar mayúsculas y minúsculas.
Para versiones anteriores de Delphi, use AnsiIndexStr
o AnsiIndexText
, respectivamente.
Felicitaciones a @Daniel, @The_Fox y @afrazier por la mayoría de los componentes de esta respuesta.