Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

¿Convertir un texto plano a un html/xml?

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio
Mensaje Vie May 18, 2007 2:40 pm
jrodola
Perlero Nuevo
Perlero Nuevo
Registrado: 18 May 2007
Mensajes: 6
¿Convertir un texto plano a un html/xml? Responder citando

Hola a todos,

Os quería preguntar si alguno sabe, tiene algún ejemplo o me puede dar una pista (qué tipo de funciones a usar..) de cómo se puede pasar un fichero que está en texto plano (es una tabla con valores que sale como output de un programa y que se guarda en un .log) a un html para que se pueda ver via web.

Soy nuevo en esto del perl, así que estoy muy perdido.

Cualquier sugerencia será bienvenida.

Muchas gracias por adelantado

Saludos,

Javi
Mensaje Vie May 18, 2007 5:02 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4086
Ubicación: Valladolid, España
Responder citando

Bienvenido a los foros de Perl en Español.

Sería interesante ver un ejemplo de ese fichero, aunque sea con datos inventados. Y un ejemplo de cómo quieres la salida.

Se puede hacer un programa muy sencillo que genere la salida en html. También hay multitud de módulos que realizan justo esa tarea: convertir una tabla de datos en html, como el Data::Table, el HTML::Table, HTML::TextToHTML o incluso un comando completo: txt2html.
Mensaje Sab May 19, 2007 5:46 am
jrodola
Perlero Nuevo
Perlero Nuevo
Registrado: 18 May 2007
Mensajes: 6
Responder citando

Muchas gracias.

He encontrado googleando esto: http://cwashington.netreach.net/depo/view.asp?Index=77

Tiene muy buena pinta, aunque sólo pasa de txt a html sin procesar lo que hay dentro.

Miraré lo que me acabas de comentar.

Un ejemplo de un txt a procesar sería esto:
Código:
Date: 2007-04-25
Object          Counter                           13:30  13:45  14:00  14:15  14:30  14:45  15:00  15:15  15:30  15:45  16:00
IurLink=Iur_111 pmNoNormalRabReleaseCs64              0      0      0      0      0      0      0      0      0      0      0
IurLink=Iur_111 pmNoNormalRabReleaseCsStream          0      0      0      0      0      0      0      0      0      0      0
IurLink=Iur_111 pmNoNormalRabReleasePacket            0      0      0      0      0      0      0      0      0      0      0
IurLink=Iur_111 pmNoNormalRabReleasePacketStream      0      0      0      0      0      0      0      0      0      0      0
IurLink=Iur_111 pmNoNormalRabReleaseSpeech            0      0      0      0      0      0      0      0      0      0      1
IurLink=Iur_111 pmNoOfRlForDriftingUesPerDrnc         0      0      0      0      0      0      0      0      0      0      0
IurLink=Iur_111 pmNoSystemRabReleaseCs64              0      0      0      0      0      0      0      0      0      0      0
IurLink=Iur_111 pmNoSystemRabReleaseCsStream          0      0      0      0      0      0      0      0      0      0      0
IurLink=Iur_111 pmNoSystemRabReleasePacket            0      0      0      0      0      0      0      0      0      0      0
IurLink=Iur_111 pmNoSystemRabReleasePacketStream      0      0      0      0      0      0      0      0      0      0      0
IurLink=Iur_111 pmNoSystemRabReleaseSpeech            0      0      0      0      0      0      0      0      0      0      0

Es decir, es una tabla simple, por eso tengo que maniobrar para que el script meta también etiquetas <tr> <td> y <table>

Muchas gracias por tu ayuda.

Saludos
Mensaje Sab May 19, 2007 3:32 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4086
Ubicación: Valladolid, España
Responder citando

Pero... si el formato está facilísimo...

Hacer el programa es muy fácil...

Perl:
#!/usr/bin/perl -l

use CGI qw':standard *table';

print start_html("Tabla");

print start_table();
while ( <DATA> ) {
    chomp;
    if ( /^Date/ ) {
        print caption($_);
    }
    else {
        @campos = split " ", $_;
        if ( /^Object/ ) {
            print Tr(th([ @campos ]));
        }
        else {
            print Tr(td([ @campos ]));
        }
    }
}
print end_table;
print end_html;

__DATA__
Date: 2007-04-25
Object          Counter                           13:30  13:45  14:00  14:15  14:30  14:45  15:00  15:15  15:30  15:45  16:00
IurLink=Iur_111 pmNoNormalRabReleaseCs64              0      0      0      0      0      0      0      0      0      0      0
IurLink=Iur_111 pmNoNormalRabReleaseCsStream          0      0      0      0      0      0      0      0      0      0      0
IurLink=Iur_111 pmNoNormalRabReleasePacket            0      0      0      0      0      0      0      0      0      0      0
IurLink=Iur_111 pmNoNormalRabReleasePacketStream      0      0      0      0      0      0      0      0      0      0      0
IurLink=Iur_111 pmNoNormalRabReleaseSpeech            0      0      0      0      0      0      0      0      0      0      1
IurLink=Iur_111 pmNoOfRlForDriftingUesPerDrnc         0      0      0      0      0      0      0      0      0      0      0
IurLink=Iur_111 pmNoSystemRabReleaseCs64              0      0      0      0      0      0      0      0      0      0      0
IurLink=Iur_111 pmNoSystemRabReleaseCsStream          0      0      0      0      0      0      0      0      0      0      0
IurLink=Iur_111 pmNoSystemRabReleasePacket            0      0      0      0      0      0      0      0      0      0      0
IurLink=Iur_111 pmNoSystemRabReleasePacketStream      0      0      0      0      0      0      0      0      0      0      0
IurLink=Iur_111 pmNoSystemRabReleaseSpeech            0      0      0      0      0      0      0      0      0      0      0
(perdón por la soberbia, estoy un poco borracho por culpa de la boda de un amigo. Quizás también no he elegido la mejor solución).
Mensaje Dom May 20, 2007 6:04 am
jrodola
Perlero Nuevo
Perlero Nuevo
Registrado: 18 May 2007
Mensajes: 6
Responder citando

Hola

El fichero de texto plano como input va cambiando, no siempre es el mismo, así que no se le puede meter en el código. ¿Cómo se le puede meter como argumento? ¿Con @ARGV?

Gracias de nuevo

Saludos,

Javi
Mensaje Dom May 20, 2007 6:24 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4086
Ubicación: Valladolid, España
Responder citando

Sí que puedes pasárselo como argumento al programa:
Código:
programa.pl fichero.log

luego, sólo tienes que cambiar <DATA> por <>.

Lo que hace Perl es abrir el fichero pasado como argumento a tu programa y lo conecta a la entrada estándar, por eso usamos <>.
Más información: perlrun.
Mensaje Dom May 20, 2007 7:18 am
jrodola
Perlero Nuevo
Perlero Nuevo
Registrado: 18 May 2007
Mensajes: 6
Responder citando

¡Muchas gracias por todo, de verdad!

Mañana lo pruebo y te cuento.

Saludos

Javi
Mensaje Lun May 21, 2007 3:48 am
jrodola
Perlero Nuevo
Perlero Nuevo
Registrado: 18 May 2007
Mensajes: 6
Responder citando

Hola,

El texto que quiero procesar es:

Código:
 1) RNC Node Traffic Performance
Report from 2007-05-21 07:45 UTC to 2007-05-21 08:44 UTC

Start Time: 2007-05-21 07:45:00 End Time: 2007-05-21 08:30:00
Object Counter           
       CS64CCSR       99.7
       CS64Drop          0
       NoRrcConnReq  14420
       PSCCSR         90.5
       PSDrop          9.3
       RrcSuc         98.8
       SpchCCSR       99.1
       SpchDrop        0.6


 2) RNC Node Traffic Performance, Hour by Hour
Report from 2007-05-21 07:45 UTC to 2007-05-21 08:44 UTC

Date: 2007-05-21
Object Counter       07:00  08:00
       CS64CCSR          0   99.8
       CS64Drop        N/A      0
       NoRrcConnReq   3380  11040
       PSCCSR          100   87.8
       PSDrop            0   12.0
       RrcSuc         98.6   98.9
       SpchCCSR       98.4   99.2
       SpchDrop        0.6    0.6

[...]

La cosa sería separarlo en dos tablas diferentes, cada una con su título, como esto:


HTML:
<!DOCTYPE html
        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
<head>
<title>Estadísticas</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>

<table border="1">
<caption>1) RNC Node Traffic Performance</caption>
<tr><td>Report from 2007-05-21 07:45 UTC to 2007-05-21 08:44 UTC</td></tr>
<tr><td>Start Time: 2007-05-21 07:45:00 End Time: 2007-05-21 08:30:00</td></tr>
<tr><th>Object Counter</th></tr>
<tr><td>CS64CCSR</td> <td>99.7</td></tr>
<tr><td>CS64Drop</td> <td>0</td></tr>
<tr><td>NoRrcConnReq</td> <td>14420</td></tr>
<tr><td>PSCCSR</td> <td>90.5</td></tr>
<tr><td>PSDrop</td> <td>9.3</td></tr>
<tr><td>RrcSuc</td> <td>98.8</td></tr>
<tr><td>SpchCCSR</td> <td>99.1</td></tr>
<tr><td>SpchDrop</td> <td>0.6</td></tr>
<tr></tr>
<tr></tr>
</table>
<br>
<table border="1">
<caption>2) RNC Node Traffic Performance, Hour by Hour</caption>
<tr><td>Report from 2007-05-21 07:45 UTC to 2007-05-21 08:44 UTC</td></tr>
<tr><td>Date: 2007-05-21 </tr>
<tr><th>Object Counter</th> <th>07:00</th> <th>08:00</th></tr>
<tr><td>CS64CCSR</td> <td>0</td> <td>99.8</td></tr>
<tr><td>CS64Drop</td> <td>N/A</td> <td>0</td></tr>
<tr><td>NoRrcConnReq</td> <td>3380</td> <td>11040</td></tr>
<tr><td>PSCCSR</td> <td>100</td> <td>87.8</td></tr>
<tr><td>PSDrop</td> <td>0</td> <td>12.0</td></tr>
<tr><td>RrcSuc</td> <td>98.6</td> <td>98.9</td></tr>
<tr><td>SpchCCSR</td> <td>98.4</td> <td>99.2</td></tr>
<tr><td>SpchDrop</td> <td>0.6</td> <td>0.6</td></tr>
<tr></tr>
</table>

</body>
</html>


¿Me puedes echar una mano para ver cómo puedo separarlo en dos tablas?

Muchísimas gracias de nuevo por todo.

Saludos,

Javi
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group