• Publicidad

Pasar Tablas html a otros formatos

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Pasar Tablas html a otros formatos

Notapor preiddy » 2006-10-02 07:24 @350

Saludos nuevamente. Estoy tratando de hacer un script que pase tablas html a xml, cvs o sql. Como sé que esto no es nada nuevo me fui al search de cpan y encontré un modulo que se llama AnyData. Luego de leer rápidamente la documentación me doy cuento de que hace lo que necesito, o eso creía yo, pues bien, escribí un script pequeño donde según la documentación se le da el nombre de la fuente, el formato al que se quiere convertir y el nombre del archivo - fichero destino. Bien, escribí:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
while(<>)
{
adExport($_,'XML','foo.xml');
}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


y mi sorpresa es que me da un error!!!
Código: Seleccionar todo
Can't use string ("<!DOCTYPE HTML PUBLIC "-//W3C//D") as a HASH ref while "strict refs" in use at /usr/share/perl5/AnyData.pm line 601, <> line 1.


He usado varios tipos de archivos html, uno cualquiera bajado de la web, otro escrito con solo html "bien" formateado, con tablas de una o dos celdas por el mismo número de filas.
No se dónde está mi error si me pueden ayudar, gracias.
preiddy
Perlero nuevo
Perlero nuevo
 
Mensajes: 70
Registrado: 2006-03-29 05:43 @280
Ubicación: Madrid, España

Publicidad

Notapor explorer » 2006-10-02 10:03 @460

El fallo es el siguiente: no se puede enviar una línea cada vez a AnyData para que la convierta. Hay que leer el fichero entero y luego convertirlo.

Yo creo que es mejor usar otros métodos, por lo siguiente:

* No he sido capaz de hacer funcionar correctamente adExport. Sólo lo he conseguido con adConvert.
* No se permite tener espacios en blanco en los nombres de los campos.

Ejemplo: Dado el fichero HTML:
Sintáxis: [ Descargar ] [ Ocultar ]
  1. <html> 
  2. <body> 
  3. <table> 
  4. <tr> 
  5. <th>Nombre</th><th>Apellido</th><th>Nivel_de_Perl</th> 
  6. </tr> 
  7. <tr> 
  8. <td>Joaquin</td><td>Ferrero</td><td>Sabe un poco</td> 
  9. </tr> 
  10. </table> 
  11. </body> 
  12. </html> 
llamado mi_tabla.html, el siguiente código Perl:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use AnyData;
print adConvert('HTMLtable','mi_tabla.html','XML');
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
saca esto:
Código: Seleccionar todo
<table><row><Nombre>Joaquin</Nombre><Apellido>Ferrero</Apellido><Nivel_de_Perl>Sabe un poco</Nivel_de_Perl></row></table>
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor kidd » 2006-10-02 10:08 @464

Hola:

El problema que tienes con HTML es que es tan loose que hacer un buen parser es muy díficil. Intenté usar el módulo AnyData y tampoco logré que jalara, por lo que mejor opté por el HTML::TreeBuilder y el XML::Simple para convertir una tabla HTML a XML.

No sé como estén las tablas de HTML que tu deseas convertir, pero el ejemplo lo podrás modificar muy facilmente de acuerdo a tus necesidades. Lo primero que vamos a hacer es hacer el parse de nuestro HTML:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl -w

use strict;
use HTML::TreeBuilder;
use XML::Simple;


my $html = q|
<html>

<head>
<title>Una Tabla</title>
</head>

<body>
<table id="Author1">
<tr>
<td class="name">Uriel Lizama</td>
<td class="link">http://perlenespanol.com</td>
</tr>
</table>

<table id="Author2">
<tr>
<td class="name">Joaquin Ferrero</td>
<td class="link">http://joaquinferrero.com</td>
</tr>
</table>
</body>
</html>
|;


my %Content;

my $tree = HTML::TreeBuilder->new_from_content($html);


    for my $table ( $tree->look_down('_tag','table') ){

        my %fields = map { $_->attr('class'), $_->as_text } $table->look_down('_tag','td');

        $Content{$table->attr('id')} = \%fields;

    }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4



Después de esto tendrás un bonito hash que se ve así:

Código: Seleccionar todo
$VAR1 = {
          'Author1' => {
                         'link' => 'http://perlenespanol.com',
                         'name' => 'Uriel Lizama'
                       },
          'Author2' => {
                         'link' => 'http://joaquinferrero.com',
                         'name' => 'Joaquin Ferrero'
                       }
        };



Convertir este hash a cualquier formato es realmente sencillo, y para convertirlo a XML todo lo que tenemos que hacer es:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $xsimple = XML::Simple->new();

print $xsimple->XMLout(\%Content,
                       noattr => 1,
                       xmldecl => '<?xml version="1.0" ?>');
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4



Y tu XML resultante será:

Sintáxis: [ Descargar ] [ Ocultar ]
Using xml Syntax Highlighting
<?xml version="1.0" ?>
<opt>
  <Author1>
    <name>Uriel Lizama</name>
    <link>http://perlenespanol.com</link>
  </Author1>
  <Author2>
    <name>Joaquin Ferrero</name>
    <link>http://joaquinferrero.com</link>
  </Author2>
</opt>
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4




Saludos

Actualización: Corregida la etiqueta <?xml ?>
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Notapor preiddy » 2006-10-02 12:33 @564

Muchas gracias por sus oportunas respuestas.
La opción que plantea explorer la empleé en un primer momento y me arrojó el siguiente mensaje de error
Código: Seleccionar todo
not well-formed (invalid token) at line 3, column 5, byte 38 at /usr/lib/perl5/XML/Parser.pm line 187

Esto creo que es por la forma en como está el html.
Las tablas con los datos son anidadas, lo que dificulta aun más extraerlos.
Esta es una pequeña parte del html que estoy trabajando
Sintáxis: [ Descargar ] [ Ocultar ]
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
  2. <html> 
  3. <!-- Mirrored from datos.php?parmPPI=4803 by HTTrack Website Copier/3.x [XR&CO'2005], Thu, 21 Sep 2006 18:07:39 GMT --> 
  4. <head> 
  5. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
  6. <title>Documento sin t&iacute;tulo</title> 
  7. <script language="JavaScript" type="text/JavaScript"> 
  8. <!-- 
  9. function MM_reloadPage(init) { //reloads the window if Nav4 resized 
  10. if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) { 
  11. document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }} 
  12. else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload(); 
  13. MM_reloadPage(true); 
  14. //--> 
  15. </script> 
  16.  
  17. <style type="text/css"> 
  18. <!-- 
  19. .Estilo1 { 
  20. color: #666666; 
  21. font-weight: bold; 
  22. --> 
  23. </style> 
  24. </head> 
  25. <body> 
  26. <div id="Layer1" style="position:absolute; left:1px; top:1px; width:700px; height:203px; z-index:1"> 
  27. <table width="100%" border="0" cellspacing="0" cellpadding="0"> 
  28. <tr>  
  29. <td valign="top"><table width="100%" border="0" cellspacing="0" cellpadding="0"> 
  30. <tr>  
  31. <td align="left">  
  32. <TABLE height="21" border=0 cellPadding=0 cellSpacing=0> 
  33. <TBODY> 
  34. <TR bgcolor="#AAC1CA">  
  35. <TD width="10" valign="bottom" class=contboxheadertxt style="COLOR: #000000">&nbsp;</TD> 
  36. <TD width="100" height="21" align="center" class=contboxheadertxt style="COLOR: #000000"><p><font color="#FFFFFF" size="1" face="Verdana, Arial, Helvetica, sans-serif"><strong>DATOS PPI</strong></font></p></TD> 
  37. <TD width="10" height="21" align="left" valign="bottom" class=contboxheadertxt style="COLOR: #000000">&nbsp;</TD> 
  38. <TD width="582" height="21" align="right" bgcolor="#AAC1CA" class=contboxheadertxt style="COLOR: #000000"><font size="1" face="Verdana, Arial, Helvetica, sans-serif">  
  39. <strong><font color="#FF0000" size="2"></font></strong>  
  40. </font></TD> 
  41. </TR> 
  42. </TBODY> 
  43. </TABLE></td> 
  44. </tr> 
  45. <tr>  
  46. <td align="left" bgcolor="#3399CC"><table width="100%" border="0" cellpadding="2" cellspacing="0"> 
  47. <tr bgcolor="#DFEDF6">  
  48. <td width="80" align="center" valign="middle"><span class="Estilo1"><font size="1" face="Verdana, Arial, Helvetica, sans-serif">  
  49. &nbsp; <strong>PPI N&ordm;</strong></font></span></td> 
  50. <td width="120" valign="middle" ><span class="Estilo1"><font size="1" face="Verdana, Arial, Helvetica, sans-serif"><strong>Condici&oacute;n</strong><br> 
  51. </font></span></td> 
  52. <td width="488" valign="middle" > <span class="Estilo1"><font size="1" face="Verdana, Arial, Helvetica, sans-serif"></font></span></td> 
  53. </tr> 
  54. </table></td> 
  55. </tr> 
  56. <tr>  
  57. <td><DIV style="BORDER-RIGHT: #AAC1CA 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: #AAC1CA 1px solid; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; BORDER-LEFT: #AAC1CA 1px solid; PADDING-TOP: 0px; BORDER-BOTTOM: #AAC1CA 1px solid">  
  58. <table width="99%" border="0" cellpadding="2" cellspacing="0"> 
  59. <tr>  
  60. <td width="76" align="center" valign="middle"><font size="1"><strong><font face="Verdana, Arial, Helvetica, sans-serif">  
  61. 4803 <br> 
  62. </font></strong></strong></font></td> 
  63. <td width="93" valign="middle" ><font size="1" face="Verdana, Arial, Helvetica, sans-serif">  
  64. Activo <br> 
  65. </font></td> 
  66. <td width="432" valign="middle" ><font size="1" face="Verdana, Arial, Helvetica, sans-serif"> 
  67. </font></td> 
  68. <td width="75" valign="middle" ><div align="right"><font size="1" face="Verdana, Arial, Helvetica, sans-serif"> 
  69. <input type="button" style="font-family: Arial; font-size: 8pt;" name="btnCancelar" onClick="location.href = 'consultas.php'" value="Regresar"> 
  70. </font></div></td> 
  71. </tr> 
  72. </table> 
  73. </DIV></td> 
  74. </tr> 
  75. </table> 
  76. <table width="100%" border="0" cellspacing="0" cellpadding="0"> 
  77. <tr> 
  78. <td>&nbsp;</td> 
  79. </tr> 
  80. <tr> 
  81. <td align="left"><table width="100%" border="0" cellspacing="0" cellpadding="0"> 
  82. <tr> 
  83. <td align="left"><TABLE height="21" border=0 cellPadding=0 cellSpacing=0> 
  84. <TBODY> 
  85. <TR bgcolor="#AAC1CA"> 
  86. <TD width="10" valign="bottom" class=contboxheadertxt style="COLOR: #000000">&nbsp;</TD> 
  87. <TD width="140" height="21" align="center" class=contboxheadertxt style="COLOR: #000000"><p><font color="#FFFFFF" size="1" face="Verdana, Arial, Helvetica, sans-serif"> 
  88. <strong>DATOS PERSONALES</strong></font></p></TD> 
  89. <TD width="10" height="21" align="left" valign="bottom" class=contboxheadertxt style="COLOR: #000000">&nbsp;</TD> 
  90. <TD width="540" height="21" align="right" bgcolor="#AAC1CA" class=contboxheadertxt style="COLOR: #000000"><font size="1" face="Verdana, Arial, Helvetica, sans-serif"> <strong><font color="#FF0000" size="2"></font></strong> </font></TD> 
  91. </TR> 
  92. </TBODY> 
  93. </TABLE></td> 
  94. </tr> 
  95. <tr> 
  96. <td align="left" bgcolor="#DFEDF6"><table width="99%" border="0" cellpadding="2" cellspacing="0"> 
  97. <tr bgcolor="#DFEDF6"> 
  98. <td width="260" valign="middle" bgcolor="#DFEDF6" ><strong> <span class="Estilo1"><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Nombre</font></span></strong></td> 
  99. <td width="80" valign="middle" ><span class="Estilo1"><font size="1" face="Verdana, Arial, Helvetica, sans-serif"><strong>Nacionalidad</strong></font> </span></td> 
  100. <td width="30" align="center" valign="middle" ><span class="Estilo1"><font size="1" face="Verdana, Arial, Helvetica, sans-serif"><strong>Sexo</strong></font> </span></td> 
  101. </tr> 
  102. </table></td> 
  103. </tr> 
  104. <tr> 
  105. <td valign="top"><DIV style="BORDER-RIGHT: #AAC1CA 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: #AAC1CA 1px solid; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; BORDER-LEFT: #AAC1CA 1px solid; PADDING-TOP: 0px; BORDER-BOTTOM: #AAC1CA 1px solid"> 
  106. <table width="99%" border="0" cellpadding="2" cellspacing="0"> 
  107. <tr> 
  108. <td width="260" valign="middle" bgcolor="#FFFFFF" ><font size="1" face="Verdana, Arial, Helvetica, sans-serif"> 
  109. Nombres de las personas, Apellidos de las personas <br> 
  110. </font></td> 
  111. <td width="80" valign="middle" bgcolor="#FFFFFF" ><font size="1" face="Verdana, Arial, Helvetica, sans-serif"> 
  112. Aqui su nacionalidad </font></td> 
  113. <td width="30" align="left" valign="middle" bgcolor="#FFFFFF" ><font size="1" face="Verdana, Arial, Helvetica, sans-serif"> aqui su sexo </font></td> </tr> 
  114. </table> 
  115. </DIV></td> 
  116. </tr> 
  117. </table></td> 
  118. </tr> 
  119. </table> 


Lo que estoy tratando de hacer ahora es limpiar un poco el html y tratar de dejar los tags sin nada de nada, y luego tratar de extraer las tablas.
De nuevo gracias.
preiddy
Perlero nuevo
Perlero nuevo
 
Mensajes: 70
Registrado: 2006-03-29 05:43 @280
Ubicación: Madrid, España

Notapor explorer » 2006-10-02 15:52 @703

Efectivamente, el error es porque las celdas contienen espacios. Parece ser que AnyData le pasa el trabajo de traducción a XML::Twig, y éste se queja a la más mínima ocasión, si el código no es compatible XML.

Con HTML::TableExtract no necesitas hacer ninguna labor de limpieza...

Sólo tienes que tener claro el nivel de profundidad al que se encuentra la tabla que quieres sacar.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor kidd » 2006-10-02 17:21 @765

Ugh! Ni hablar acerca del estilo HTML con el que estás trabajando. Los cierres de los tags están mal, los encabezados no tienen el mismo formato, los valores tampoco, etc.

Sin embargo hasta Perl puede con esto, lo único que necesitas es cambiar una línea:

Sintáxis: [ Descargar ] [ Ocultar ]
  1. <strong> <span class="Estilo1"><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Nombre</font></span></strong> 


a

Sintáxis: [ Descargar ] [ Ocultar ]
  1. <span class="Estilo1"><font size="1" face="Verdana, Arial, Helvetica, sans-serif"><strong>Nombre</strong></font></span> 



Y entonces ya podemos correr el siguiente script:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl -w

use strict;
use HTML::TreeBuilder;
use XML::Simple;
use Data::Dumper;


my $tree = HTML::TreeBuilder->new_from_file('tablas.htm');


my @titles;
my @values;

map { my $data = $_->as_text; $data=~ s/^\s+//; $data=~ s/\s+$//; push(@titles,$data) if $data ne '' }
$tree->look_down('_tag','strong',
                    sub {
                         $_[0]->look_up('_tag', 'span')
                        }
                );


map { my $data = $_->as_text; $data=~ s/^\s+//; $data=~ s/\s+$//; push(@values,$data) if $data ne '' }
   $tree->look_down('_tag','font',
                    sub {
                         not $_[0]->look_down('_tag', 'strong')
                         and
                         not $_[0]->look_up('_tag', 'span')
                        }
                    );


my %Content;

@Content{@titles} = @values;


my $xsimple = XML::Simple->new();

print $xsimple->XMLout(\%Content,
                       noattr => 1,
                       xmldecl => '<?xml version="1.0" ?>');
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4



Y obtener el resultado en XML:

Sintáxis: [ Descargar ] [ Ocultar ]
Using xml Syntax Highlighting
<?xml version="1.0" ?>
<opt>
  <Condición>Activo</Condición>
  <Nacionalidad>Aqui su nacionalidad</Nacionalidad>
  <Nombre>Nombres de las personas, Apellidos de las personas</Nombre>
  <PPI>4803</PPI>
  <Sexo>aqui su sexo</Sexo>
</opt>
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4



Saludos

Actualización: Corregida la etiqueta <?xml ?>
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Notapor explorer » 2006-10-03 03:29 @187

JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor preiddy » 2006-10-03 06:25 @309

Gracias por su ayuda.
En cuanto a la opción dada por explorer de usar HTML::TableExtract, la empleé en un primer momento, le dí hasta 8 niveles de profundidad y sólo me devolvió la línea con los campos solicitados, más no sus valores.
La respuesta de Kidd, me pongo ahora mismo con ello.
Vaya, la verdad es que suelo echar un ojo por perlmonks, pero esta vez se me ha olvidado, se nota que recien llego de las vacaciones. De nuevo muchas gracias.
preiddy
Perlero nuevo
Perlero nuevo
 
Mensajes: 70
Registrado: 2006-03-29 05:43 @280
Ubicación: Madrid, España

Notapor explorer » 2006-10-03 11:55 @538

Con HTML::TableExtract es relativamente fácil decir dónde está la tabla que queremos usar.
El problema de este HTML es que realmente son dos las tablas que nos interesan. Una tiene los títulos y otra los valores.
En nuestro caso, vale decir que nuestras tablas serán las que tienen como atributo un ancho de 99% y una 'profundidad' (tabla dentro de tabla) de 3:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl

use HTML::TableExtract;
use XML::Simple;

# Leemos el HTML
$html = do { undef $/; open HTML,"<kk.html"; <HTML> };

# Decimos cómo son las tablas que queremos ver
$te = HTML::TableExtract->new( attribs => { width => '99%' }, depth => 3 );

# Parseo
$te->parse($html);
@tablas = $te->tables or die "No encontré la tabla!\n";

# Filtrado de los valores
sub filtrar {
  filtra($_ = shift);
}
sub filtra {
  s/^\s*//;
  s/\s*$//;
  $_;
}

# La primera tabla contiene los nombres de los campos, en su primera fila
@titulos = map filtra, @{($tablas[0]->rows)[0]};
#print "@titulos\n";

# La siguiente tabla contiene los datos
$mitabla = $tablas[1];
foreach $fila ( $mitabla->rows ) {

  $i=0;
  foreach $titulo ( @titulos ) {
    $xml->{persona}->[$j]->{ $titulo } = filtrar($fila->[$i++]);
  }

  # estas 4 líneas anteriores se pueden sustituir por la forma más oscura:
  # @{$xml->{persona}->[$j]}{ @titulos } = map filtra, @$fila;

  $j++;
}

# Creación del XML
print XMLout($xml, RootName=>'Personas', noattr => 1, xmldecl => '<?xml version="1.0" ?>');
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
La salida es:
Sintáxis: [ Descargar ] [ Ocultar ]
Using xml Syntax Highlighting
<?xml version="1.0" ?>
<Personas>
  <persona>
    <Nacionalidad>Aqui su nacionalidad</Nacionalidad>
    <Nombre>Nombres de las personas, Apellidos de las personas</Nombre>
    <Sexo>aqui su sexo</Sexo>
  </persona>
</Personas>
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
Y no hemos tenido que filtrar el HTML para nada (en este caso). Sólo quitar algunos espacios en blanco que se supone que sobran.

Actualización: Me parece que esa no es la salida que se pide... faltan campos...
Actualización: Corregida la etiqueta <?xml ?>
Última edición por explorer el 2006-10-09 17:59 @791, editado 2 veces en total
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Pasar Tablas html a otros formatos

Notapor preiddy » 2006-10-04 09:21 @431

Las respuestas de explorer y kidd son fascinantes. En tan pocas líneas lo mucho que se puede hacer, sólo puedo decir que ¡¡¡Gracias!!!. Volviendo a lo nuestro, cuando ambos scripts los enfrenté al mundo real (más de 6000 archivos html) los resultados fueron muy variados; al de Kidd añadí unas líneas para que agregara la etiqueta <strong> delante de las etiquetas de campo. Lo malo es que muestra ordenado alfabéticamente los campos localizados, y dependiendo la cantidad de campo, los valores no coinciden con las etiquetas que deberían ser. Lo que plantea un problema adicional al momento de querer meterlos en una BD. La BD de destino esta compuesta por 4 tablas. Datos personales, Estudios, Conferencias y Publicaciones.
El otro script con 3 niveles de profundidad vale si sólo hay 3 niveles. Aquí entono el mía culpa, sólo facilité las primeras tablas de los archivos a tratar. Para solucionar esto he subido en un servidor un archivo html completo para que se hagan una idea.
http://www.preiddy.documentados.com/datos.html
De nuevo, muchas gracias.
preiddy
Perlero nuevo
Perlero nuevo
 
Mensajes: 70
Registrado: 2006-03-29 05:43 @280
Ubicación: Madrid, España

Siguiente

Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 7 invitados