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 08-08-2005
jmlifi jmlifi is offline
Miembro
 
Registrado: abr 2005
Posts: 188
Poder: 20
jmlifi Va por buen camino
devolver una cadena

tengo la siguiente cadena: "hoy_mañana"

existen alguna funcion en Delphi que me devuelva lo anterior y posterior del guión bajo.
Responder Con Cita
  #2  
Antiguo 08-08-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Directamente no.
Usa Pos para encontrar la posicion del _ y Copy para extraer la parte anterior y posterior.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 08-08-2005
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,

Si leíste ya lo que te dice Neftali seguro seguramente lo tienes hecho, porque así es como puede hacerse. Sin embargo, sabe que habrá varias formas de plantear el asunto, sin que esto quiera decir que es complicado. Ahí va lo que se me ocurrió a mí:

Código Delphi [-]
 
// Parte una determinada cadena separada por un
// determinado caracter separador: se devuelven
// en sendas variables la primera y segunda partes.
//
procedure PartirCadena(cadena, separador: string;
  var primeraParte, segundaParte: string);
var
  i: integer;
begin
  i := Pos(separador, cadena);
  primeraParte := Copy(cadena, 0, i-1);
  segundaParte := Copy(cadena, i+1, Length(cadena)-i);
end;
 
// Ejemplo de llamada
//
procedure TForm1.Button1Click(Sender: TObject);
var
  primeraParte,
  segundaParte: string;
begin
  PartirCadena('hoy_mañana', '_',
    primeraParte, segundaParte);
  ShowMessage(primeraParte);
  ShowMessage(segundaParte);
end;
Así lo hice después de leer a Neftali. Antes lo había hecho de este otro modo, obteniendo el mismo resultado (en ambos casos sin probar demasiado posibles consecuencias inesperadas u otros errores):

Código Delphi [-]
 
uses
  StrUtils;
 
// Parte una determinada cadena separada por un
// determinado caracter separador: se devuelven
// en sendas variables la primera y segunda partes.
// 
procedure PartirCadena(cadena, separador: string;
  var primeraParte, segundaParte: string);
var
  i: integer;
begin
  i := Pos(separador, cadena);
  primeraParte := AnsiLeftStr(cadena, i-1);
  segundaParte := AnsiRightStr(cadena, Length(cadena)-i);
end;
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #4  
Antiguo 08-08-2005
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
No se puede usar TStringList y cambiarle el separador?
__________________
El malabarista.
Responder Con Cita
  #5  
Antiguo 08-08-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Hombre, por poder, sí se puede. Utilizando la rutina de dec, sería algo así:

Código Delphi [-]
   procedure PartirCadena(cadena: string; separador: char;
     var primeraParte, segundaParte: string);
   var
     TS:TStringList;
   begin
     // Crear
     TS := TStringList.Create();
     // proteccion para liberar
     try
       // Asignar
       TS.Delimiter := separador;
       TS.DelimitedText := cadena;
       // Obtener los trozos
       primeraParte := TS[0];
       segundaParte := TS[1];
     finally
       // Liberar
       TS.Free;
     end;
   end;
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 09-08-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Ya puestos a crear un TStringList....
Código Delphi [-]
// Advertencia: La función crea el StringList, 
// el usuario de la función tendrá que liberarla
function PartirCadena(cadena: string; separador: char):TStringList;
   begin
     // Crear
     Result := TStringList.Create();
     // Asignar
       Result.Delimiter := separador;
       Result.DelimitedText := cadena;
   end;

Uso de la misma:
Código Delphi [-]
var s:TStringList;
begin
try
  s := PartirCadena('Este texto ; se partirá en 2',';');
finally
  s.free;
end;
He visto hacer cosas como estas en rutinas, y funcionar funciona, aunque se sale del "estandar de trabajo con delphi".

Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
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


La franja horaria es GMT +2. Ahora son las 16:23:47.


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