Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   devolver una cadena (https://www.clubdelphi.com/foros/showthread.php?t=24091)

jmlifi 08-08-2005 16:24:16

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.

Neftali [Germán.Estévez] 08-08-2005 16:34:28

Directamente no.
Usa Pos para encontrar la posicion del _ y Copy para extraer la parte anterior y posterior.

dec 08-08-2005 16:51:56

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;

mamcx 08-08-2005 16:52:10

No se puede usar TStringList y cambiarle el separador?

Neftali [Germán.Estévez] 08-08-2005 17:53:54

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;

Lepe 09-08-2005 11:47:37

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


La franja horaria es GMT +2. Ahora son las 22:32:04.

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