Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   buscar dentro de una cadena con repetición (https://www.clubdelphi.com/foros/showthread.php?t=31635)

jzginez 12-05-2006 20:27:07

buscar dentro de una cadena con repetición
 
Hola amigos, despues de un tiempo alegado del foro regreso y me encuuentro con la mala noticia de que vendel delphi, pero bueno eso es arena de otro foro, el problema que tengo y que se me pueden ayudar a rersolver es el siguiente:

tengo una cadena con el siguiente texto
cadena:= 'algun texo|otro texto diferente|mas texto|para variar mas texto|por fin el ultimo texto'
donde realmente lo unico que conosco es '|' que uso para separar las cadenas, el problema es cuando quiero tomar el texto que esta en una posición dada por ejemplo quiero obtener el texto que esta en la 3º posición en el ejemplo 'mas texto' el cual se encuentra en una posición mas alla de donde encuentre por segunda vez el '|' y aqui es donde esta mi problema.

con pos('|',cadena) me encuentra la primera posición del '|', alguien me puede decir como buscar la siguiente concordancia.
en pocas palabras para este ejemplo que me de la posición de la 3º vez que encontro el '|'

Gracias

delphi.com.ar 12-05-2006 20:55:46

El primer Pos te da la posición del primer PIPE, si quieres obtener la posición del segundo PIPE, simplemente tienes que hacer un Pos de la cadena "cortada" desde el primer pos en adelante, por ejemplo usando la función Copy. Pero existe algo mas, la función PosEx de la unit StrUtils, que puedes decirle de qué posición comenzar a buscar.

jzginez 12-05-2006 21:04:57

Gracias delphi.com.ar
mi codigo quedo
Código Delphi [-]
procedure TDemoCombo.SpinEdit1Change(Sender: TObject);
Var
  temp, cadena: String;
  posicion, i: Integer;
begin
  Valores:= SpinEdit1.Value;
  cadena:= Combo.Items.Strings[0];
  temp:= '';
  i:= 1;
  while i <= Valores do
    Begin
     posicion:= pos('|',cadena);
     if posicion <> 0
      Then Begin
        Temp:= temp + copy(cadena,1,posicion);
        delete(cadena,1, posicion);
      End
      Else temp:= cadena;
     i:= i + 1;
    End;
  valor.Caption:= IntToStr(length(temp));
end;

Ahora solo me queda cambiarlo para que quede como funcion

jzginez 12-05-2006 21:11:40

Se me olvidava, PosEx no lo pude usar debido a que el texto entre los PIPE ('|' si no entendi mal) es de tamaño variable desde un solo caracter asta n caracteres y no conosco el tamaño debido a que el usuario es el que captura estos.

delphi.com.ar 12-05-2006 21:40:18

Cita:

Empezado por jzginez
Se me olvidava, PosEx no lo pude usar debido a que el texto entre los PIPE ('|' si no entendi mal) es de tamaño variable desde un solo caracter asta n caracteres y no conosco el tamaño debido a que el usuario es el que captura estos.

Pero puedes ir acumulando la posición, y cortar la cadena al momento de utiliza PosEx!


La franja horaria es GMT +2. Ahora son las 20:59:33.

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