• Publicidad

Cómo convertir un TXT a XML

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Cómo convertir un TXT a XML

Notapor caribesoft » 2007-01-10 19:30 @854

Hola Amigos Perleros :

Necesito crear un script Perl que lea un archivo de texto, separado por comas (TXT), y convertirlo a XML. El contenido del archivo es así :

Código: Seleccionar todo
7017 , 2007/03/30, 2007/04/07,      1894
7019 , 2006/12/23, 2007/01/06,      2119
7019 , 2007/02/15, 2007/02/22,      2041
7019 , 2007/03/17, 2007/03/24,      2047
7020 , 2006/11/15, 2006/12/15,      2078
7020 , 2007/01/23, 2007/02/09,      2181
7020 , 2007/02/09, 2007/02/16,      2165
7020 , 2007/02/16, 2007/02/25,      1979


en donde la primera columna es el número de habitación
la segunda la fecha de llegada
la tercera la fecha de salida
la cuarta el número de confirmación

¿¿ algún tip para poder lograr esto ??

Saludos y como siempre, muchas gracias por anticipado,

Caribesoft 8)
caribesoft
Perlero nuevo
Perlero nuevo
 
Mensajes: 73
Registrado: 2006-05-09 22:01 @959
Ubicación: Cancun

Publicidad

Notapor explorer » 2007-01-10 19:37 @859

Parece que en estos días ha crecido la fiebre por el XML...

El 'tip' primero sería repasar lo dicho en estas dos últimas semanas... luego, probar un poco de código... y luego ver si te podemos ayudar...

Con XML::Simple, yo creo que se puede hacer en diez líneas...
Última edición por explorer el 2007-01-11 11:20 @514, editado 1 vez en total
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor monoswim » 2007-01-11 06:25 @309

No creo que ni siquira necesites de un módulo, una vez que leiste el archivo, pues generas otro que imprima la información en formato XML...Te pongo un código de ejemplo...

Código: Seleccionar todo
open(FILE1, "<file.txt");
open(FILE2, ">file.xml");
print FILE2 "<mixml>";
while (my $line = <FILE1>){
   my ($campo1,$campo2,$campo3,$campo4) = split(/\,/,$linea);
   print FILE2 "<tag1>$campo1</tag1><tag2>$campo2</tag2><tag3>$campo3</tag3><tag4>$campo4</tag4>";
}
print FILE2 "</mixml>";
close(FILE1);
close(FILE2);


Espero que te sirva

Saludos
MonoSwim
Perl Programming Language
Avatar de Usuario
monoswim
Perlero nuevo
Perlero nuevo
 
Mensajes: 452
Registrado: 2003-11-18 16:13 @717
Ubicación: Buenos Aires

Notapor Perl user » 2007-01-11 11:06 @504

monoswim escribiste:No creo que ni siquira necesites de un módulo, una vez que leiste el archivo, pues generas otro que imprima la información en formato XML...Te pongo un código de ejemplo...

Código: Seleccionar todo
open(FILE1, "<file.txt");
open(FILE2, ">file.xml");
print FILE2 "<mixml>";
while (my $line = <FILE1>){
   my ($campo1,$campo2,$campo3,$campo4) = split(/\,/,$linea);
   print FILE2 "<tag1>$campo1</tag1><tag2>$campo2</tag2><tag3>$campo3</tag3><tag4>$campo4</tag4>";
}
print FILE2 "</mixml>";
close(FILE1);
close(FILE2);


Espero que te sirva

Saludos


Ugh... eso es horrible :)

Crear soluciones ad-hoc impide tener flexibilidad y hace de tu aplicación algo no muy mantenible. Si es un pequeño script posiblemente no habría tanto problema, pero se convierte en un hábito crear soluciones
de se tipo, y se repetirá en proyectos mayores.

Aparte que un XML no solo tiene nodos... hay que tomar en cuenta mas cosas.

Saludos,
Marco A. Manzo
[email protected]
http://www.unixmonkeys.com/amnesiac/
Perl Programming Language
Perl user
Maestro honorario
Maestro honorario
 
Mensajes: 271
Registrado: 2004-11-03 21:11 @924

Notapor explorer » 2007-01-11 15:24 @683

Bueno, dije diez líneas, pero con una, valía...
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use AnyData;
print adConvert('CSV','kk.csv','XML',undef,{cols=>'habitacion,llegada,salida,confirmacion'});
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Luego, pasando el xml por el programa xml_pp (xml pretty printer) del XML::Twig, queda:
Código: Seleccionar todo
explorer@next3:~/Documents/Perl/desarrollo> xml_pp kk.xml
<table>
  <row>
    <habitacion>7017 </habitacion>
    <llegada> 2007/03/30</llegada>
    <salida> 2007/04/07</salida>
    <confirmacion>      1894</confirmacion>
  </row>
  <row>
    <habitacion>7019 </habitacion>
    <llegada> 2006/12/23</llegada>
    <salida> 2007/01/06</salida>
    <confirmacion>      2119</confirmacion>
  </row>
  <row>
    <habitacion>7019 </habitacion>
    <llegada> 2007/02/15</llegada>
    <salida> 2007/02/22</salida>
    <confirmacion>      2041</confirmacion>
  </row>
  <row>
    <habitacion>7019 </habitacion>
    <llegada> 2007/03/17</llegada>
    <salida> 2007/03/24</salida>
    <confirmacion>      2047</confirmacion>
  </row>
  <row>
    <habitacion>7020 </habitacion>
    <llegada> 2006/11/15</llegada>
    <salida> 2006/12/15</salida>
    <confirmacion>      2078</confirmacion>
  </row>
  <row>
    <habitacion>7020 </habitacion>
    <llegada> 2007/01/23</llegada>
    <salida> 2007/02/09</salida>
    <confirmacion>      2181</confirmacion>
  </row>
  <row>
    <habitacion>7020 </habitacion>
    <llegada> 2007/02/09</llegada>
    <salida> 2007/02/16</salida>
    <confirmacion>      2165</confirmacion>
  </row>
  <row>
    <habitacion>7020 </habitacion>
    <llegada> 2007/02/16</llegada>
    <salida> 2007/02/25</salida>
    <confirmacion>      1979</confirmacion>
  </row>
</table>


Naturalmente, esta es una forma, pero hay más... muchas más... Por ejemplo, con el módulo XML::CSV
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor monoswim » 2007-01-12 07:08 @338

Perl user escribiste:Ugh... eso es horrible :)

Crear soluciones ad-hoc impide tener flexibilidad y hace de tu aplicación algo no muy mantenible. Si es un pequeño script posiblemente no habría tanto problema, pero se convierte en un hábito crear soluciones
de se tipo, y se repetirá en proyectos mayores.

Aparte que un XML no solo tiene nodos... hay que tomar en cuenta mas cosas.

Saludos,


Estoy totalmente de acuerdo con tigo con eso de los proyectos mayores, pero cuando solo necesito pasar un archivo de un formato a otro, prefiero hacerlo de esta por una simple cuestión de tiempos...En 15 segundos ya lo tengo hecho, en cambio de la otra manera tardaría más...

Todo depende de que necesite el autor del post...

Igual muy buena la aclaración...No sea cosa de que se mal acostumbre :lol:

Saludos
MonoSwim
Perl Programming Language
Avatar de Usuario
monoswim
Perlero nuevo
Perlero nuevo
 
Mensajes: 452
Registrado: 2003-11-18 16:13 @717
Ubicación: Buenos Aires

Heyy Gracias

Notapor caribesoft » 2007-01-12 11:23 @516

Gracias, monoswim

Realmete, es lo que necesitaba, algo facil y rapido, ya que son archivos de tan solo 10 o 15 registros, y fuen una solucion simple.

Asi es como quedo mi codigo, algun principiante como yo le podra servir en una emergancia:

Código: Seleccionar todo
open(FILE1, "<roombook.txt");
open(FILE2, ">roombook.xml");
print FILE2 "<?xml version='1.0' encoding='iso-8859-1' ?><mixml>";
while (my $linea = <FILE1>){
   my ($campo1,$campo2,$campo3,$campo4) = split(/\,/,$linea);
   print FILE2 "<record><room>$campo1</room><indate>$campo2</indate><outdate>$campo3</outdate><conf>$campo4</conf></record>";
}
print FILE2 "</mixml>";
close(FILE1);
close(FILE2);


y genera el archivo XML correctamente, a mi me sorprendio ....

Muchas gracias por tu ayuda,

Caribesoft
caribesoft
Perlero nuevo
Perlero nuevo
 
Mensajes: 73
Registrado: 2006-05-09 22:01 @959
Ubicación: Cancun

Tambien funciona

Notapor caribesoft » 2007-01-12 11:29 @520

Gracias Explorer :

Como siempre buenos tips y enseñanzas.

Estuve Leyendo en XML:Simple y XML::Twig y tienes razon, hay muchas formas de resolver esto, en pocas lineas ....

Gracias,

Caribesoft
caribesoft
Perlero nuevo
Perlero nuevo
 
Mensajes: 73
Registrado: 2006-05-09 22:01 @959
Ubicación: Cancun


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 0 invitados