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-07-2008
octalh octalh is offline
Miembro
 
Registrado: feb 2008
Posts: 18
Poder: 0
octalh Va por buen camino
Recorrer y Cortar String

Hola a todos, les comento, tengo el siguiente problema.

Cuento con una funcion split para cortar partes de una string


Código:
function TForm1.CopyEntre(Cadena:string; Desde,Hasta:string):string;
var
Inicio,Final: integer;
begin
  Inicio:=Pos(Desde,Cadena)+Length(Desde);
  Final :=PosEx(Hasta,Cadena,Inicio);
  If (Inicio>0) and (Final>Inicio) then Result:=Copy( Cadena, Inicio, Final-Inicio );
end;
funciona bastante bien pero tengo el problema que necesito cortar varias veces una sola string y no entiendo muy bien el bucle para hacerlo

supongamos que quiero cortar la siguiente cadena

cadena : string;
cadena := '+hola-xxxxx+como-xxxxx+estas-';

usaria la funcion split para obtener "hola"

trozo :string;
trozo := CopyEntre(cadena,'+','-');

esto me daria "hola"
pero como corto lo demas de la string para obtener hola como estas ??

Bueno gracias po su ayuda
Responder Con Cita
  #2  
Antiguo 09-07-2008
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 octalh, yo utilizaria un StringList y sus propiedades Delimiter y DelimitedText, donde el separador entre palabras no sería el + y - sino talvez un vacio, pero el mismo separador para toda la cadena, le pasas la cadena a delimitedText el cual te lo separa en el StringList, despues solo sería recorrer tu StringList.

Código Delphi [-]
slLinea : TStringList;
begin
 slLinea := TStringList.Create;

 slLinea.Delimiter:=#32; //separador que utilizara DelimitedText
 slLinea.DelimitedText := 'hola como estas';

la otra forma utilizando pos y copy

Código Delphi [-]
var
 Cadena, CadenaTmp, Palabra : String;
 PosIni, PosFin : Integer;
begin
 Cadena := '+hola-xxxxx+como-xxxxx+estas-';
 CadenaTmp := Cadena;
 while Pos('-',CadenaTmp)>0 do
  begin
    PosIni := Pos('+',CadenaTmp);
    PosFin := Pos('-',CadenaTmp);
    Palabra := Copy( CadenaTmp, PosIni+1, PosFin-PosIni-1);
    CadenaTmp[PosIni] := ' ';
    CadenaTmp[PosFin] := ' ';
    showmessage(Palabra);
  end;

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
  #3  
Antiguo 09-07-2008
octalh octalh is offline
Miembro
 
Registrado: feb 2008
Posts: 18
Poder: 0
octalh Va por buen camino
Muchas gracias funciona muy bien , pero queria preguntarte porque funciona unicamente cuando el separador es un solo simbolo, esque los datos que estoy filtrando son de un texto donde se encuentran los datos asi:

nombre('PEPE MARTINEZ')+nombre('LAURA GONZALES')+nombre('ENRIQUE ALMENDRO')+ etc etc...

entonces el separador seria nombre(' y ')+ para obtener unicamente los nombres.

como modificaria esta funcion para que el separador pueda tener mas de un simbolo?

de antemano gracias por la ayuda.

Última edición por octalh fecha: 09-07-2008 a las 01:00:21.
Responder Con Cita
  #4  
Antiguo 09-07-2008
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 de nuevo octalh, la propiedad Delimiter solo te acepta un caracter, no puedes añadir mas de un caracter, de la forma en que esta tu cadena, te conviene de la otra forma que te puse, aqui te dejo el codigo modificado sobre lo ultimo que me dijiste, los nombres que vas obteniendo también los puedes cargar a un StringList y luego lo recorres.

Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var
 slNombres : TStringList; 
 Cadena, CadenaTmp, Palabra : String;
 PosIni, PosFin : Integer;
begin
 slNombres := TStringList.Create;
 Cadena := 'nombre(''PEPE MARTINEZ'')+nombre(''LAURA GONZALES'')+nombre(''ENRIQUE ALMENDRO'')+';
 CadenaTmp := Cadena;
 while Pos(''')+',CadenaTmp)>0 do
  begin
    PosIni := Pos('''',CadenaTmp);
    PosFin := Pos(''')',CadenaTmp);
    Palabra := Copy( CadenaTmp, PosIni+1, PosFin-PosIni-1);
    CadenaTmp := Copy(CadenaTmp, PosFin+1, Length(CadenaTmp)-PosFin);
    showmessage(Palabra);
    slNombres.Add(Palabra);
  end;
end;

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
  #5  
Antiguo 09-07-2008
octalh octalh is offline
Miembro
 
Registrado: feb 2008
Posts: 18
Poder: 0
octalh Va por buen camino
Increible Mil gracias Caro!! mas claro no pudo estar, Un Saludo
Responder Con Cita
  #6  
Antiguo 28-11-2017
pepemangdl pepemangdl is offline
Registrado
NULL
 
Registrado: nov 2017
Posts: 1
Poder: 0
pepemangdl cantidad desconocida en este momento
Exclamation como puedo hacer esto pero con una variable

hola caro mira que mi problema es un poco mas confuso, tengo una variable que me convierte una cantidad de numero a letras y tengo que contar las palabras para después partirla en dos e indentarla al centro para poder imprimirla en un ticket use tu ejemplo pero no se como ponerlo en practica en mi código ????

Última edición por Casimiro Notevi fecha: 28-11-2017 a las 09:46:08.
Responder Con Cita
  #7  
Antiguo 28-11-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Por favor, crea un nuevo hilo con tu problema, y lee antes nuestra guía de estilo, 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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Recorrer un STRING creus Varios 3 07-01-2007 22:52:37
Error al recorrer string creus Varios 6 16-11-2006 22:39:45
recorrer string emiliu Varios 2 16-11-2005 10:23:25
Recorrer un string davidgaldo Varios 3 09-11-2005 10:04:28
cortar string (substring) febito Varios 1 11-08-2004 20:19:56


La franja horaria es GMT +2. Ahora son las 06:11:35.


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