Hacer un Case con un string

6780 vistas

De todos es sabido que la estructura Case Of requiere un tipo de datos ordinal, por lo que es imposible hacer un Case Of directamente con strings.

Veamos una manera de poder salvar esta adversidad:

Para ello vamos a usar la función AnsiIndexStr de la unidad StrUtils:



delphi
  1. uses StrUtils;
  2. ...
  3. case AnsiIndexStr(Str, ['Cadena1', 'Cadena2', 'Cadena3']) of
  4.   0 : // Str = 'Cadena1'
  5.   1 : // Str = 'Cadena2'
  6.   2 : // Str = 'Cadena3'
  7.   -1 : // Str no vale ninguna de las anteriores
  8. end;



Si nuestra versión de Delphi no nos brinda con esta función, podemos implementarla de la siguiente manera:



delphi
  1. function AnsiIndexStr(AText : string; const AValues : array of string) : integer;
  2. begin
  3.   Result := 0;
  4.   while Result <= High(AValues) do
  5.     if AValues[Result] = AText then exit
  6.     else inc(Result);
  7.   Result := -1;
  8. end;



Otra idea, en el caso de un Case Of dinámico, es el uso de un objeto TStrings y su método IndexOf