Ir al contenido


Foto

[RESUELTO] Case ... of de cadenas


  • Por favor identifícate para responder
20 respuestas en este tema

#1 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 06 marzo 2010 - 04:14

¿Hay alguna manera de hacer un case no con Enteros sino con Strings?.

Saludos.
  • 0

#2 Delphius

Delphius

    Advanced Member

  • Moderador
  • PipPipPip
  • 6.295 mensajes
  • LocationArgentina

Escrito 06 marzo 2010 - 04:21

Ummm, la verdad es que nunca lo he probado con un string pero si es válido con char:



delphi
  1. case Opcion of
  2. 'A': ....
  3. 'B', 'C': ...
  4. end;



Saludos,
  • 0

#3 Delphius

Delphius

    Advanced Member

  • Moderador
  • PipPipPip
  • 6.295 mensajes
  • LocationArgentina

Escrito 06 marzo 2010 - 04:26

Pues una prueba que acabo de hacer me lo confirmó. No es permitido el uso de string.
El uso de char si.
  • 0

#4 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 06 marzo 2010 - 04:33

Gracias Delphius, encontré esto de parte de Zarko Gajic:



delphi
  1. function StringToCaseSelect
  2.   (Selector : string;
  3. CaseList: array of string): Integer;
  4. var cnt: integer;
  5. begin
  6.   Result:=-1;
  7.   for cnt:=0 to Length(CaseList)-1 do
  8. begin
  9.     if CompareText(Selector, CaseList[cnt]) = 0 then
  10.     begin
  11.       Result:=cnt;
  12.       Break;
  13.     end;
  14.   end;
  15. end;



Muy ingenioso verdad? :p. (y), su uso sería:



delphi
  1. case StringToCaseSelect('Delphi',
  2.       ['About','Borland','Delphi']) of
  3.   0:ShowMessage('You''ve picked About') ;
  4.   1:ShowMessage('You''ve picked Borland') ;
  5.   2:ShowMessage('You''ve picked Delphi') ;
  6. end;



Aquí el link

Saludos.
  • 0

#5 Delphius

Delphius

    Advanced Member

  • Moderador
  • PipPipPip
  • 6.295 mensajes
  • LocationArgentina

Escrito 06 marzo 2010 - 04:51

¿Me creerías que a ese "truco" ya lo había leído de su página pero se me olvidó por completo de que existía?

¡Las cosas de la vida! Eso me pasa por no agregar esas pequeñeces a mi biblioteca.

Mi cabeza estaba pensando en algo parecido. Tener un TStringList y asociar a cada string con una posición. Luego, emplear esa posición para el case.

Saludos,
  • 0

#6 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 06 marzo 2010 - 05:00

La mente es como cualquier computador, en algún momento debe fallar :p :p
  • 0

#7 Delphius

Delphius

    Advanced Member

  • Moderador
  • PipPipPip
  • 6.295 mensajes
  • LocationArgentina

Escrito 06 marzo 2010 - 05:11

La mente es como cualquier computador, en algún momento debe fallar :p :p

No si tuviera Linux :D

Saludos,
  • 0

#8 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 06 marzo 2010 - 05:13

...No si tuviera Linux :D


jeje ¡claro! :D (y)
  • 0

#9 rgstuamigo

rgstuamigo

    Member

  • Miembros
  • PipPip
  • 33 mensajes
  • LocationSanta Cruz-Bolivia

Escrito 25 marzo 2010 - 03:26

¿Hay alguna manera de hacer un case no con Enteros sino con Strings?.

Saludos.

Bueno  me parece que ésta vez Zarko Gajic reinventó la rueda. *-) :D :D..
Podrías haberlo hecho asi:



delphi
  1. Uses ...,...,StrUtils;
  2. ...
  3. case AnsiIndexStr(cadena,['Uno', 'Dos', 'Tres']) of
  4.   0 : showmessage('Uno');
  5.   1 : showmessage('Dos');
  6.   2 : showmessage('Tres');
  7.   -1 : //la cadena no se encuentra en el arreglo, seria como el else del Case;
  8. end;


Saludos... (y)
  • 0

#10 Caral

Caral

    Advanced Member

  • Administrador
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 25 marzo 2010 - 03:30

Hola
Muy interesante, no lo sabia.
Saludos
  • 0

#11 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 25 marzo 2010 - 04:26

Ah caray, qué fácil fue eso *-), muchas gracias rgstuamigo (y).
  • 0

#12 Delphius

Delphius

    Advanced Member

  • Moderador
  • PipPipPip
  • 6.295 mensajes
  • LocationArgentina

Escrito 25 marzo 2010 - 06:54

AnsiIndexStr... ¿Donde estabas cuando Fernando te necesitaba? :D

Vaya, rgstuamigo me has sorprendido :o. ¿Quien diría que ya había algo de fábrica? Hay tantas funciones que es casi imposible saberse todas...

¿Cómo supiste o te enteraste de ella?

Saludos,

  • 0

#13 rgstuamigo

rgstuamigo

    Member

  • Miembros
  • PipPip
  • 33 mensajes
  • LocationSanta Cruz-Bolivia

Escrito 30 marzo 2010 - 04:22

AnsiIndexStr... ¿Donde estabas cuando Fernando te necesitaba? :D

Vaya, rgstuamigo me has sorprendido :o. ¿Quien diría que ya había algo de fábrica? Hay tantas funciones que es casi imposible saberse todas...

¿Cómo supiste o te enteraste de ella?

Saludos,

Bueno yo me enteré  :( gracias a nuestra buen amiga y colega Caro en éste tema >http://www.clubdelph...ead.php?t=49653 :wink:
  • 0

#14 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.288 mensajes
  • LocationMéxico

Escrito 30 marzo 2010 - 04:26

Bueno yo me enteré  :( gracias a nuestra buen amiga y colega Caro


No se podía esperar menos de nuestra amiguita Caro.

Por cierto, felicidades por tu nombramiento en ClubDelphi amigo rgstuamigo  (y)

Salud OS
  • 0

#15 Delphius

Delphius

    Advanced Member

  • Moderador
  • PipPipPip
  • 6.295 mensajes
  • LocationArgentina

Escrito 30 marzo 2010 - 04:31

Gracias rgstuamigo por la referencia.

Secundo lo dicho por Eliseo, no se puede pedir menos de la gran maestra Caro.
Es sorprendente descubrir que hay cosas que desconocemos. Habría que investigar más a fondo las unidades (lo digo por mí). Muy seguramente hay tantos secretos entre las centenares líneas de código que esperan ser hallados.

Saludos,
  • 0

#16 rgstuamigo

rgstuamigo

    Member

  • Miembros
  • PipPip
  • 33 mensajes
  • LocationSanta Cruz-Bolivia

Escrito 30 marzo 2010 - 04:35

...
Por cierto, felicidades por tu nombramiento en ClubDelphi amigo rgstuamigo  (y)

Salud OS

Muchas gracias... :D y ahí estamos para las que podamos.. ;). Siempre me estoy dando una vueltita por acá para ver cómo están? :D

...
Secundo lo dicho por Eliseo, no se puede pedir menos de la gran maestra Caro.
Es sorprendente descubrir que hay cosas que desconocemos. Habría que investigar más a fondo las unidades (lo digo por mí). Muy seguramente hay tantos secretos entre las centenares líneas de código que esperan ser hallados.

Tienen toda la razón Caro es una maestra, yo en lo personal siempre estoy aprendiendo algo nuevo de ella. ;).
Y es verdad que investigar más a fondo las unidades se aprende bastante. ;).
Saludazos... (y) (y)
  • 0

#17 Al González

Al González

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 99 mensajes

Escrito 02 abril 2010 - 02:07

Bueno  me parece que ésta vez Zarko Gajic reinventó la rueda. *-) :D :D..
Podrías haberlo hecho asi:



delphi
  1. Uses ...,...,StrUtils;
  2. ...
  3. case AnsiIndexStr(cadena,['Uno', 'Dos', 'Tres']) of
  4.   0 : showmessage('Uno');
  5.   1 : showmessage('Dos');
  6.   2 : showmessage('Tres');
  7.   -1 : //la cadena no se encuentra en el arreglo, seria como el else del Case;
  8. end;


No creo que Zarko haya reinventado la función, Roberto.  Tal vez creó su función cuando la unidad StrUtils aún no existía en Delphi (apareció alrededor de la versión 6). :)

Sobre lo que comenta Marcelo, acerca de la gran cantidad de funciones desconocidas, mi primera recomendación es que se tenga el hábito de consultar la ayuda buscando por palabras claves.  Al menos la ayuda clásica de Delphi es estupenda para ello:

Imagen Enviada

Otra cosa igual o más útil es hacer búsquedas de expresiones regulares con la opción Find in files del menú Search, sobre los archivos de código fuente de las bibliotecas nativas:

Imagen Enviada


Volviendo al tema, me gustaría comentar que GH Freebrary tiene una función para el mismo propósito, pero opcionalmente se le puede indicar que ignore acentos y espacios laterales.



delphi
  1. Uses
  2.   GHFStrings;
  3.  
  4. procedure TForm1.Button1Click(Sender: TObject);
  5. Var
  6.   I :Integer;
  7. begin
  8.   I := ghPosStr (['viernes', 'sábado', 'domingo'], ' SABADO ', ghstcEssential);
  9.   ShowMessage (IntToStr (I));
  10. end;



Saludos afectuosos.

Al González. :)
  • 0

#18 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 02 abril 2010 - 02:10

Muchas gracias por los Tips amigo Al (y).

Saludos.
  • 0

#19 Delphius

Delphius

    Advanced Member

  • Moderador
  • PipPipPip
  • 6.295 mensajes
  • LocationArgentina

Escrito 02 abril 2010 - 08:49

Gracias Al,
Sabía desde hace tiempo de esa posibilidad de buscar mediante expresiones regulares. Pero nunca la usé :(... creo que debería empezar,... primero a leer la ayuda sobre como usar las expresiones :s.

GExpert también incluye su propio Search, me gusta este porque clasifica y ordena todo.

Noto unas diferencias entre la página de resultados que ofrece D6 con la que muestras en D7. En tu imagen se aprecia un "tab" con la leyenda "Search for...". En D6 no... la ventana de Mensajes es una sola. ¿Será que hay que configurar algo? 8-)

Saludos,
  • 0

#20 rgstuamigo

rgstuamigo

    Member

  • Miembros
  • PipPip
  • 33 mensajes
  • LocationSanta Cruz-Bolivia

Escrito 07 abril 2010 - 03:49

No creo que Zarko haya reinventado la función, Roberto.  Tal vez creó su función cuando la unidad StrUtils aún no existía en Delphi (apareció alrededor de la versión 6). :)
....

Bueno...tal parece que la funcion creada por Zarko fué posteada en Febrero del 2002 segun ésta página>http://delphi.about....g_Tips_2002.htm, eso quiere decir que la version 6 ya existía. ;).Lo que puede haber pasado es que quizás Zarko no lo conocía, cosa que a mi me a pasado miles de veces. :D :D, hago una funcion que me fascilite alguna tarea y resulta que en delphi ya existe una funcion similar, lo cual me agrada ya que eso quiere decir que me falta muchisimo por conocer Delphi. ;) :D.

Sobre tus TIPs, la verdad no sabía que se podía  buscar de esa forma...lo cual me viene de maravilla ;) :D...muchas gracias por compartir tus conocimientos  ;).
Un saludo Sudamericano... (y)

  • 0