Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-10-2007
Avatar de Milperrimo
Milperrimo Milperrimo is offline
Miembro
 
Registrado: sep 2007
Ubicación: Guadalajara
Posts: 57
Poder: 17
Milperrimo Va por buen camino
Case para strings??

Se puede hacer un case para strings????????? utilizo delphi 7, y ando buscando como hacer algo como un case pero con strings, aunque lo puedo hacer con if, pero serian como 25 ifs y kedaria un chorizote, alguien sabe como o de plano tendre ke hacerlo con ifs??
Responder Con Cita
  #2  
Antiguo 26-10-2007
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Si es para vocales algo como esto te puede servir:


Código Delphi [-]
    Case cPeriodo[1] of
      '1':begin


Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 26-10-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por Marcos
Si es para vocales (...)
Más que para vocales para "chars", puesto que "char" es un tipo ordinal, tal como requieren los "case" en Delphi.

De todas formas es posible que sea más costoso un "case" que usar "if". Y, digo yo, que, probablemente pudiera hacerse lo que el compañero necesita de otro modo, sólo que así sin más datos... no es posible adivinar cómo es que se plantea lo que dice necesitar.

Si se quiere liar la cosa... y tal vez a costa de que todo resulte más costoso, podríamos preparar un "conjunto" que "emparejar" a un "Array de strings", de modo que pudiera quedarnos algo como lo de más abajo... que puede ser una tremenda tontería, fruto de llevar toda la noche picando código y sin dormir, y el que avisa no es traidor.

Pero, vengamos al caso, o al "case", como queráis. Declaramos un conjunto tal que así:

Código Delphi [-]
type
  TStringsCase = (scInvalid, scOne, scTwo, scThird);

Y preparamos un "Array de strings" que estará "emparejado" con el tipo de más arriba:

Código Delphi [-]
var
  StringsCase: array [0..3] of string = (
    '', // scInvalid salt
    'One',
    'Two',
    'Third'
  );

Ahora, podemos preparar un procedimiento que requiera una cadena, de modo que en el mismo podamos comprobar con qué elemento del conjunto se "empareja". Acto seguido usaremos una variable del tipo del "conjunto" para determinar el "caso" correspondiente a la cadena en cuestión:

Código Delphi [-]
procedure DoStringCase(aString: string);
var
  i: byte;
  sc: TStringsCase;
begin
  sc := scInvalid; // Default case
  for i := Low(StringsCase) to High(StringsCase) do begin
    if (aString = StringsCase[i]) then begin
      sc := TStringsCase(integer(i));
      Break;
    end;
  end;
  case sc of
      scOne: ShowMessage('aString = One');
      scTwo: ShowMessage('aString = Two');
    scThird: ShowMessage('aString = Third');
  else
    raise Exception.Create('Invalid case string');
  end;
end;

El tema está en que al procedimiento "DoStringCase" le pasamos un "string" como parámetro, de modo que, en el ejemplo, se ejecutará el "ShowMessage()" correspondiente a dicho "string", en realidad al elemento del conjunto que emparejamos con el "string":

Código Delphi [-]
begin
  // Mostraría: aString = One
  DoStringCase('One');

  // Mostraría: aString = Two
  DoStringCase('Two');

  // Se elevaría la excepción
  // DoStringCase('');

  // Se elevaría la excepción
  // DoStringCase('Four');
end;

Pero,... creo que después de esto ya me puedo echar a dormir... Sinceramente, es probable que haya otras formas de hacer lo que se plantea el compañero. Aun habiendo escrito lo anterior, dudo mucho que algún día lo utilizase... pero, en fin, ahí queda, por si puede servir de algo.

PD. Tiene el inconveniente principal de tener que añadir tantos elementos al "conjunto" como sean precisos... y hacer lo propio con el "Array de string" correspondiente. Por no mencionar otra vez el posible costo de llevar a cabo el "bucle for", a continuación el "case"... y el resto de defecos que se os ocurran.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 26-10-2007 a las 08:49:43.
Responder Con Cita
  #4  
Antiguo 26-10-2007
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
En realidad quería decir para tipo Char, según ha corregido David.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #5  
Antiguo 26-10-2007
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola Milperrimo, tambien lo puedes hacer de esta forma

Código Delphi [-]

 case AnsiIndexStr(cadena,['Uno', 'Dos', 'Tres']) of
  0 : showmessage('Uno');
  1 : showmessage('Dos');
  2 : showmessage('Tres');
  -1 : //la cadena no se encuentra en el arreglo, seria como el else del Case;
 end;


La función AnsiIndexStr te devuelve el indice de una cadena dentro de un arreglo de cadenas y -1 si no encuentra dentro de ese arreglo.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #6  
Antiguo 26-10-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Caro apunte Caro.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #7  
Antiguo 26-10-2007
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Abundando en lo dicho por David Carísimo apunte Caro.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #8  
Antiguo 26-10-2007
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola dec y marcoszorrilla, solo queria comentarles que mi nick no tiene nada que ver con la palabra caro, sino que es una abreviación de Carolina que es el nombre que me gusta mucho .

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #9  
Antiguo 26-10-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Bueno. Pues fatal el apunte Caro, cómo puedes escribir código tan malo.

PD. Es broma... ¿eh? Lo dicho, dicho.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #10  
Antiguo 26-10-2007
Avatar de Milperrimo
Milperrimo Milperrimo is offline
Miembro
 
Registrado: sep 2007
Ubicación: Guadalajara
Posts: 57
Poder: 17
Milperrimo Va por buen camino
Gracias compañeros por sus respuestas, voy a probar con las soluciones dadas, haber cual me funciona mejor para lo que necesito
Responder Con Cita
  #11  
Antiguo 21-01-2009
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¡Estupendo truco Caro! Recién hoy me entero y con éste es el segundo tuyo que veo hoy. ¿Los has puesto en la sección de trucos?

// Saludos
Responder Con Cita
  #12  
Antiguo 21-01-2009
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Ah!

Cita:
Carolina, nombre femenino de origen germánico derivado de Carlos "Karl", su significado es "Aquella que es inteligente"

Historia y el Santo:
Carolina Kózka, virgen y mártir. Nació en Polonia en 1898, en una familia de gran fervor cristiano. Durante la primera Guerra Mundial, en la invasión a Polonia, Carolina es atacada y ultrajada; muere defendiendo su virginidad. Se la conoce como "La estrella de Tarnow". Juan Pablo II la beatifico el 10 de junio de 1987. Se conmemora el 18 noviembre.

Variantes de Carolina: en su forma abreviada: Lina (Lino); diminutivo de Carolina: Carol, derivado de Carlos y Carla.

Carolina en otros idiomas, catalán: Carolina; francés e ingles: Caroline; italiano: Caroline.

Famosos, personales históricos celebres con el nombre de Carolina:

* Carolina Coronado, nació en Badajoz en el año 1823; poeta romántica; entre sus poemas mas destacados, citaremos: "La Palma"; "La rosa blanca" o "A Alberto" entre otros.
* Carolina Herrera, nació en Venezuela en el año 1939, diseñadora con fama internacional representante de la moda del ultimo cuarto del siglo XX; a marcado tendencia en la alta costura.
*

Carolina de Mónaco, princesa de Mónaco, nació en el año 1957, hija del príncipe Rainero y la princesa Grace de kelly
Un Saludo caro Caro.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #13  
Antiguo 21-01-2009
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Ey, ¿Como es que yo no había visto este apunte?, pues esta muy bueno, que bien Caro, gracias .
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Función para strings Jesús Pena Varios 4 26-04-2007 01:48:33
case con strings molinero1 Varios 1 23-04-2007 13:34:24
Punteros Strings jlrbotella OOP 7 01-03-2007 17:46:39
Herramienta case para diccionario de datos de base de datos firebird mcalmanovici Firebird e Interbase 1 11-02-2007 15:17:37
showmessage y strings Elfoscuro Varios 1 19-04-2005 20:00:03


La franja horaria es GMT +2. Ahora son las 11:59:31.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi