Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Busqueda en un richedit o en un memo (https://www.clubdelphi.com/foros/showthread.php?t=67726)

titomigue 03-05-2010 14:03:46

Busqueda en un richedit o en un memo
 
Hola, mi problema es que guardo el código fuente de una web en un memo o un richedit, y despues de guardarlo quiero buscar unos enlaces en ese código para poder luego guardarles en un array.

lo que quiero guardar en el array es tipo:
<a href="texto/index.php?=123456"></a>

y yo quiero guardar el texto/index.php?=123456
o simplemente el 123456.

Tambien e de decir que el 123456 varia en cada enlace, es un codigo aleatorio y tampoco tiene la misma longitud de caracteres.

Y que cuando me encuentre el primer enlace, despues de guardarle en un array siga buscando el siguiente asta el final del memo/richedit.

¿Alguna idea? Saludos.

Ñuño Martínez 03-05-2010 14:33:45

Si el documento está bien construido, creo que la mejor opción es usar alguno de los diversos analizadores XML que existen para Delphi. Sólo tienes que buscar un poco para encontrarlos porque en el Club se han comentado estos componentes en más de una ocasión. Así, una vez analizado el contenido del RichEdit, sólo tienes que buscar nodos "a" y de los que encuentres sólo hay que copiar la propiedad "href".

Caro 03-05-2010 17:12:58

Hola titomigue, puedes utilizar las funciones Pos, PosEx y Copy, tu codigo quedaría mas o menos así:

Código Delphi [-]
var
 Texto, Url, Valor : String;
 ............
begin
 PosIni := 0;
 Texto := Memo1.Text;
 While PosEx('<a href', Texto, PosIni)>0 Do
 begin
  PosIni := PosEx('<a href', Texto, PosIni);
  PosFin := PosEx('>', Texto, PosIni);
  
  //Obtenemos la Url
  Url := Copy(Texto, PosIni, PosFin-PosIni-1);  
  Ini := Pos('?=', Url);
  Valor := Copy(Url, Ini+2, Length(url)-1); //Valor lo guardas en tu arreglo o StringList
 
  Inc(PosIni);
 end;

Saluditos

Caro 03-05-2010 17:19:53

Con las etiquetas [delphi ] se pierde parte del codigo, deben ser cosas del VBulletin, este es el codigo completo:

Código:

var
 Texto, Url, Valor : String;
 ............
begin
 PosIni := 0;
 Texto := Memo1.Text;
 While PosEx('<a href', Texto, PosIni)>0 Do
 begin
  PosIni := PosEx('<a href', Texto, PosIni);
  PosFin := PosEx('>', Texto, PosIni);
 
  //Obtenemos la Url
  Url := Copy(Texto, PosIni, PosFin-PosIni-1); 
  Ini := Pos('?=', Url);
  Valor := Copy(Url, Ini+2, Length(url)-1); //Valor lo guardas en tu arreglo o StringList
 
  Inc(PosIni);
 end;

Saluditos

Ñuño Martínez 03-05-2010 17:35:24

Pues sí, parece que lo del código fuente no funciona muy bien, aunque lo he cambiado justo a la vez que tú y ahora se ve bien. :D

titomigue 03-05-2010 19:03:52

pues no consigo que me entre en el while...
While PosEx('<a href', Texto, PosIni)>0 Do
se lo salta directamente, y al modificar la condicion "....)=0" entra pero no pilla ningun valor.

Edito: no se que le pasa al 'a href' pero poniendo el protocolo http para buscar la cadena me ha funcionado, muchisimas gracias


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

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