Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Como "parsear" un fichero HTML con Delphi (https://www.clubdelphi.com/foros/showthread.php?t=48512)

cartmanrules 26-09-2007 20:53:50

Como "parsear" un fichero HTML con Delphi
 
Hola!

Estoy dándole vueltas a la cabeza sobre cómo solucionar este problemilla de una forma elegante y rápida:

- Tengo un fichero con una lista de precios, que viene en formato de tabla de HTML, por ejemplo:

Código:

<table><tr><td>MONITOR TFT 17" GEN</td><td>105.45</td><td>99</td></tr><tr><td>MONITOR TFT 17" LG 1716</td><td>125.65</td><td>20</td></tr></table>
Es sólo un ejemplo para que os hagáis una idea, pero como véis viene como si fuera una tabla de HTML, y no hay retornos de carro para delimitar las líneas, por lo que habrá que ir leyendo y discriminando. Tengo que meter todos sus campos en una base de datos, ¿qué funciones podría utilizar para leer el fichero e ir discriminando lo que son delimitadores (<table>, <td>, <tr> etc) y lo que son datos?

Muchas gracias!

dec 26-09-2007 21:04:38

Hola,

Si no quieres complicarte... una simple búsqueda en Torry's te ofrece no pocos componentes y/o "html parser".

Y si quieres complicarte... tal vez pudieras empezar por estudiar el código de alguno de ellos. :)

Mick 27-09-2007 12:37:56

Si el formato es siempre igual y tal como lo has indicado,
no vale la pena añadir un componente mas solo para eso, con
unas pocas instrucciones en delphi se puede hacer, en realidad se
puede hacer de varias formas una de ellas seria la siguiente:

Código:


// Para probar y ver el resultado en pantalla se puede usar un TMemo de
// prueba, por ejemplo:  ExtractData(Str,Memo1.Lines);

procedure ExtractData(Str:string; List:TStrings);
begin
 Str:= StringReplace(Str, '<table><tr><td>'    , ''    , [rfReplaceAll]);
 Str:= StringReplace(Str, '</td></tr></table>' , ''    , [rfReplaceAll]);
 Str:= StringReplace(Str, '</tr>'              , ''    , [rfReplaceAll]);
 Str:= StringReplace(Str, '</td>'              , ''    , [rfReplaceAll]);
 Str:= StringReplace(Str, '<tr>'              , #13#10, [rfReplaceAll]);
 Str:= StringReplace(Str, '<td>'              , #13#10, [rfReplaceAll]);
 List.Text:= Str;
end;


Saludos

cartmanrules 28-09-2007 07:59:42

Muchas gracias por la idea, la verdad es que es una forma rápida y sencilla de conseguirlo :)

Saludos!


La franja horaria es GMT +2. Ahora son las 08:18:55.

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