Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Recorrer y Cortar String (https://www.clubdelphi.com/foros/showthread.php?t=58109)

octalh 08-07-2008 22:38:16

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:)

Caro 09-07-2008 00:18:26

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

octalh 09-07-2008 00:57:23

Muchas gracias funciona muy bien :D, 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.

Caro 09-07-2008 02:21:21

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

octalh 09-07-2008 04:26:27

Increible:eek: Mil gracias Caro!! mas claro no pudo estar, Un Saludo :D:D

pepemangdl 28-11-2017 00:38:56

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 ????

Casimiro Notevi 28-11-2017 09:46:41

Por favor, crea un nuevo hilo con tu problema, y lee antes nuestra guía de estilo, gracias.


La franja horaria es GMT +2. Ahora son las 05:10:14.

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