PDA

Ver la Versión Completa : Como "parsear" un fichero HTML con Delphi


cartmanrules
26-09-2007, 20:53:50
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:


<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 (http://www.torry.net/quicksearchd.php?String=html+parser&Title=Yes) 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:



// 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!