• Publicidad

Excel::Writer::XLSX

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

Excel::Writer::XLSX

Notapor situ » 2012-10-29 15:31 @688

Estimados,
Les escribo, para consultarles si pueden ayudarme con un problema que estoy teniendo con un script.

La función del mismo es leer todos los archivos de un directorio, buscar todos los que dentro tengan la palabra "marca" y luego a esos aplicarles una regex en busca de direcciones IP.

En la columnas deben ir los nombres de los archivos y debajo de cada uno las IP identificadas en ese archivo.

Me está devolviendo bien las columnas, pero las IP quedan en cualquier lado y no en la columna del nombre del archivo, donde fue identificada.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use Excel::Writer::XLSX;
  3. my $workbook  = Excel::Writer::XLSX->new("marca.xlsx");
  4. my $worksheet = $workbook->add_worksheet('test');
  5.  
  6. #variable en 0
  7. $a = 0;
  8. $b = 0;
  9.  
  10. @files = <*>;
  11. foreach $file (@files) {
  12.     open( $archivos, "<", "$file" ) || die "$!";
  13.     while ( $resultado = <$archivos> ) {
  14.         if ( $resultado =~ m/^.*marca/ ) {
  15.             push( @marca, $file );
  16.             $worksheet->write( 0, 0 + $a, $file );
  17.             $a++;
  18.         }
  19.     }
  20.  
  21.     foreach $marca (@marca) {
  22.         undef @marca;
  23.         open( $archivos2, "<", "$marca" ) || die "$!";
  24.         while ( $resultado2 = <$archivos2> ) {
  25.             if ( $resultado2 =~ m/^ip (192.168.0.[0-9|\.].*)\// ) {
  26.                 $worksheet->write( 0 + $b, 1 + $a, $1 );
  27.                 $b++;
  28.             }
  29.         }
  30.     }
  31. }
  32.  
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


Saludos y desde ya muchas gracias.
Última edición por explorer el 2012-10-29 16:10 @715, editado 1 vez en total
Razón: Formateado de código con Perltidy
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Publicidad

Re: Excel::Writer::XLSX

Notapor explorer » 2012-10-29 17:20 @763

La llave de cierre de la línea 31 debe estar en la línea 20. Así se cierra el bucle de recorrido por los archivos.

Y cambiar la línea 20 por
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $a = 0;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

De esa manera, $a reinicia su valor para el recorrido de los archivos encontrados en el siguiente bucle.

Y luego, incrementar $a en cada vuelta de archivo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.     } $a++;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Hummm... creo que se puede hacer de otra manera...

(no probado)
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use Excel::Writer::XLSX;
  3.  
  4. my $workbook  = Excel::Writer::XLSX->new("marca.xlsx");
  5. my $worksheet = $workbook->add_worksheet('test');
  6.  
  7. my $columna = 0;
  8.  
  9. opendir (DIR, '.');
  10. while (my $file = readdir(DIR)) {
  11.     next if not -f $file;             # saltar al siguiente si no es un archivo normal
  12.  
  13.     open(INPUT, $file) or die "ERROR: No puedo abrir $file: $!\n";
  14.  
  15.     while (my $linea = <INPUT>) {
  16.  
  17.         if ($linea =~ m/^.*marca/ ) {                       # si hay una 'marca'
  18.             my $fila = 0;
  19.             $worksheet->write( $fila++, $columna, $file );  # ponemos cabecera
  20.  
  21.             seek INPUT, 0, 0;                               # volvemos al principio
  22.             while (<INPUT>) {                               # ahora buscaremos IP
  23.                 if (m/^ip (192[.]168[.]0[.][0-9|.].*?)\//) {
  24.                     $worksheet->write($fila++, $columna, $1);
  25.                 }
  26.             }
  27.  
  28.             $columna++;                # apuntamos a la siguiente columna
  29.             last;                      # no hace falta seguir buscando más 'marcas'. Salimos del while
  30.         }
  31.     }
  32.  
  33.     close INPUT;
  34. }
  35. closedir DIR;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

En la expresión regular he puesto '.*?', pero a lo mejor lo tienes que dejar a como estaba, según quieras capturar menos o más.
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

Re: Excel::Writer::XLSX

Notapor situ » 2012-10-29 18:29 @812

¡Excelente! Muchas gracias.
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Re: Excel::Writer::XLSX

Notapor situ » 2012-11-13 14:30 @646

Necesito agregar esta parte nueva:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. @linevty0=`grep -e \"^line vty 0\" -A6 $archivos`;
  2.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


$archivos, no sé cómo obtenerlo. Digamos que debe ser el nombre de los archivos que contienen la palabra "marca".

Saludos.
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Re: Excel::Writer::XLSX

Notapor explorer » 2012-11-13 14:40 @653

¿Y no sería mejor poner unas líneas parecidas a las líneas 23 a 25?
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

Re: Excel::Writer::XLSX

Notapor situ » 2012-11-13 14:43 @655

En la linea 17, buscamos todos los archivos que tengan la palabra "marca", yo necesito saber cuales son esos archivos para luego usarlos en el grep.
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Re: Excel::Writer::XLSX

Notapor explorer » 2012-11-13 17:21 @764

Está en $file, pero no lo necesitas, ni necesitas el grep.

¿No te das cuenta de que las líneas 23 a 25 hacen lo mismo que el grep que quieres ejecutar?

Si me dices qué quieres hacer con @linevty0, amplío el programa.
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

Re: Excel::Writer::XLSX

Notapor situ » 2012-11-13 18:17 @803

Tenes razón lo del grep.

Necesito quedarme con las 6 líneas continuas al contexto "line vty 0".

Saludos.
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Re: Excel::Writer::XLSX

Notapor explorer » 2012-11-13 18:57 @831

Bien, quieres quedarte con esas 6 líneas, ¿y después? ¿Meterlas en la hoja?

¿Cuántas veces puede aparecer ese contexto en cada archivo?
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

Re: Excel::Writer::XLSX

Notapor situ » 2012-11-13 19:17 @845

Ese contexto aparece 1 vez sola.
Mi idea es guardar esas 6 lineas en un array, ya que luego debo leerlo y ver si hay información que me sirva ahí, entre las 6 lineas.

Saludos.
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Siguiente

Volver a Básico

¿Quién está conectado?

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

cron