• Publicidad

¿¿Como hago para encolumnar este texto??

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

¿¿Como hago para encolumnar este texto??

Notapor sferreira01 » 2006-10-03 06:54 @329

Buenas, mi consulta es la siguiente:
en un txt un texto con el siguiente formato:
Código: Seleccionar todo
-------
system Information for \\nombredepc1
Processor: 500 mhz
ram: 512mb
sistema Operativo: Windows XP Professional .
-------
system Information for \\nombredepc2
Processor: 1ghz
ram: 512mb
sistema Operativo: Windows 2000 Professional .
-------
y así sigue....
Yo necesito tomar cada bloque delimitado entre las líneas separadoras formadas por guiones "---------" (estás lineas puedo reemplazarlas por otro caracter si fuera necesario) y encolumnar esos datos, que quede de la siguiente manera:
Código: Seleccionar todo
"System information for"   "Processor"     "Ram"     "Sistema Operativo"
  nombredepc1                  500 mhz         512         windows XP pro.
  nombredepc2                  1 ghz              512         windows 2000 pro

La verdad es que no soy programador... (doy soporte tecnológico) muy poco sé de programación... pero hice un script en NT que recolecta los datos de esa manera... (lamentablemente no hay forma de hacerlo diferente) el archivo es muy extenso y debo encolumnarlo.
(El .pl debo correrlo desde la línea de comandos de windows.)
Bueno, desde ya, muchas gracias por cualquier ayuda que puedan brindarme.

¡Gracias!
Saludos.
sferreira01
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2006-05-16 08:20 @389

Publicidad

Notapor explorer » 2006-10-03 07:58 @373

Suponiendo que el fichero donde están los datos se llama fichero.txt y tiene la forma:
Código: Seleccionar todo
-------
system Information for \\nombredepc1
Processor: 500 mhz
ram: 512mb
sistema Operativo: Windows XP Professional .
-------
system Information for \\nombredepc2
Processor: 1ghz
ram: 512mb
sistema Operativo: Windows 2000 Professional .
-------
entonces el programa siguiente:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl

@registros = do { local $/ = "-------\n"; open FILE, "<fichero.txt"; <FILE> };

print "System information for\tProcessor\tRam\tSistema Operativo\n";
foreach $registro ( @registros ) {
    ($sistema,$procesador,$ram,$so) = $registro =~
        /information for (.+)\s+processor: (.+)\s+ram: (.+)\s+sistema Operativo: (.+)$/mi;
    next unless $sistema;
    print "$sistema\t$procesador\t$ram\t$so\n";
}
Coloreado en 0.006 segundos, usando GeSHi 1.0.8.4
saca el resultado:
Código: Seleccionar todo
System information for  Processor       Ram     Sistema Operativo
\\nombredepc1   500 mhz 512mb   Windows XP Professional .
\\nombredepc2   1ghz    512mb   Windows 2000 Professional .

Explicación:
* Usando una redefinición de la variable '$/' (delimitador de entrada) a la forma que separan los registros, podemos leerlos todos y meterlos en un array llamado @registros.
* Pintamos la cabecera
* Luego, por cada uno de los registros, extraemos los valores que nos interesan con una expresión regular.
* Y finalmente los pintamos en forma tabular.
Última edición por explorer el 2006-10-12 08:17 @386, 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: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor sferreira01 » 2006-10-05 14:52 @661

¡¡Gracias!! ¡¡funcionó perfecto!!... Ahora tengo otro problema que no contemplé al hacerles la consulta inicial... espero no abusar de tu buena voluntad, si me podés dar otra mano... ahi va la nueva consulta:
Algunos de los registros que se graban, no están completos y no tienen la misma forma, te lo ejemplifico más abajo:
Código: Seleccionar todo
-------
system Information for \\nombredepc1
Processor: 500 mhz
ram: 512mb
sistema Operativo: Windows XP Professional
-------
system Information for \\nombredepc2
Processor: 1ghz
-------
system Information for \\nombredepc3
Processor: 2ghz
ram: 1gb
sistema Operativo: Windows 2003
-------


Si te fijas el segundo registro (de nombredepc2), no trajo ni la ram ni el S.O.
Si corro el programa que me indicaste, los casos en que no trajo todos loas datos, no me los muestra...
Se puede modificar algo, para que, aunque no estén todos los datos, igualmente me genere el registro... con los datos que encuentre...
yo sé que como máximo puede encontrar el registro completo, como lo ejemplifice primero.

Desde ya, muchas gracias por tu ayuda...
Disculpá mi ignoracia, pero no me dedico a programar, y sinceramente no entiendo casi nada.
¡otra vez GRACIAS!
Saludos.
sferreira01
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2006-05-16 08:20 @389

Notapor explorer » 2006-10-05 15:54 @704

Creo que es esta:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl

$/ = "-------\n";    # Delimitador de registros de entrada

open FILE, "<fichero.txt" or die "ERROR: No pude abrir el fichero: $!\n";

print "System information for\tProcessor\tRam\tSistema Operativo\n";

while ( $registro = <FILE> ) {

    ($sistema)    = $registro =~ /information for (.+)\s+/i;
    ($procesador) = $registro =~ /processor: (.+)\s+/i;
    ($ram)        = $registro =~ /ram: (.+)\s+/i;
    ($so)         = $registro =~ /sistema operativo: (.+)\s+/i;

    next unless $sistema;

    print "$sistema\t$procesador\t$ram\t$so\n";
}

close FILE;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Se sigue contemplando el caso de que el nombre del sistema SI debe de aparecer.

Y si no te dedicas a programar, mejor será que empieces rápido a aprender antes de que contraten a otra persona que sí sepa ;-)

Actualización: puesta una versión más básica, con menos modismos Perl
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


Volver a Básico

¿Quién está conectado?

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