• Publicidad

Regex a excel

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

Regex a excel

Notapor situ » 2013-04-11 15:23 @682

Estimados,
Los molesto para realizarles una consulta.
Tengo las siguientes regex las cuales se encargan de escribir en un Excel, el problema es que no queda como yo necesito.

Digamos obtengo:

Imagen

Como pueden ver la información se encuentra alojada correctamente en su columna, pero recién comienza debajo de donde termino la información de su columna anterior, necesito que comiencen todos en la misma fila.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. { ... ... . }
  2. my $columna = 0;
  3. opendir( DIR, '.' );
  4. while ( my $linea = <INPUT> ) {
  5.     undef @primera;
  6.     undef @segunda;
  7.     undef @tercera;
  8.     if ( $linea =~ m/^.*testing/ ) {
  9.         my $fila = 0;
  10.         @primera = `grep -e \"^primera columna\" -A50 \"$file\"`;
  11.         @segunda = `grep -e \"^segunda columna\" -A50 \"$file\"`;
  12.         @tercera = `grep -e \"^tercera columna\" -A50 \"$file\"`;
  13.         while (<INPUT>) {
  14.             if (m/^nombre\s"(.*)"/) {
  15.                 $nombre = $1;
  16.             }
  17.         }
  18.         $worksheet = $workbook->add_worksheet("$nombre");
  19.         $worksheet->write( $fila++, 0, "columna 1" );
  20.         $worksheet->write( $fila++, 1, "columna 2" );
  21.         $worksheet->write( $fila++, 2, "columna 3" );
  22.  
  23.         seek INPUT, 0, 0;
  24.  
  25.         foreach $primera (@primera) {
  26.             if ( $primera !~ m/^*.primera/ ) {
  27.                 last;
  28.             }
  29.             else {
  30.                 $worksheet->write( $fila++, 0, "$primera" );
  31.  
  32.             }
  33.         }
  34.  
  35.         foreach $segunda (@segunda) {
  36.             if ( $segunda !~ m/^*.segunda/ ) {
  37.                 last;
  38.             }
  39.             else {
  40.                 $worksheet->write( $fila++, 1, "$segunda" );
  41.             }
  42.         }
  43.  
  44.         foreach $tercera (@tercera) {
  45.             if ( $tercera !~ m/^*.tercera/ ) {
  46.                 last;
  47.             }
  48.             else {
  49.                 $worksheet->write( $fila++, 2, "$tercera" );
  50.             }
  51.         }
  52.  
  53.         $columna++;
  54.         last;
  55.     }
  56. }
  57.  
  58. close INPUT;
  59. }
  60. closedir DIR;
  61.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Publicidad

Re: Regex a excel

Notapor explorer » 2013-04-11 16:06 @713

Tendrás que reiniciar el valor de $fila antes de comenzar a escribir en cada columna.

No me doy cuenta de cómo estás leyendo los datos, pero ya viendo las líneas 19 a 21, creo que están mal, ¿no? Estas incrementando $fila en cada asignación, en cada columna distinta.
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: Regex a excel

Notapor situ » 2013-04-11 17:29 @770

Por lo que entiendo ¿no sirve lo de la línea 9? ¿tengo que usar undef como la línea 5?
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $fila = 0;
  2.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Los datos son leídos de los archivos que se encuentran dentro del mismo directorio donde está el script. Por eso usé:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. opendir (DIR, '.');
  2.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


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

Re: Regex a excel

Notapor explorer » 2013-04-11 18:58 @832

situ escribiste:Por lo que entiendo ¿no sirve lo de la línea 9? ¿tengo que usar undef como la línea 5?
Lo que digo es que debe estar en otra línea del programa, además de en la 9, para poder escribir los datos bien. Fíjate que siempre usas $fila++. Eso quiere decir que va creciendo siempre. Bueno, pues en algún momento hay que ir hacia atrás.

situ escribiste:Los datos son leídos de los archivos que se encuentran dentro del mismo directorio donde está el script.
A lo que me refiero es que no me he parado a pensar cómo es el formato de los archivos de origen, pues eso determinar el orden de pintado.
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: Regex a excel

Notapor situ » 2013-04-11 22:06 @962

Los archivos son filas con contenido, no más.
¿En qué línea tendría que poner en 0 nuevamente?
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Re: Regex a excel

Notapor explorer » 2013-04-12 06:15 @302

opendir() no abre los archivos, sino los directorios. Cada llamada a readdir() te devuelve el nombre de uno de los archivos dentro del directorio abierto. Pero solo el nombre.

Usas opendir() y closedir(), pero no readdir().

Yo supongo que una vez sabes el $nombre, en la línea 15, no es necesario seguir leyendo el archivo, así que no estaría demás poner un last para que termine rápido ese bucle.

En las líneas 19 a 21 se pintan los nombres de las columnas. En esas líneas $fila no debe cambiar. Debe valer siempre 0. Mejor cambiar $fila++ por 0.

El seek() de la línea 23 no sirve de nada: el last de la línea 54 hace salir del bucle.

En la línea 24 falta poner $fila = 1;
En la línea 34 falta poner $fila = 1;
En la línea 43 falta poner $fila = 1;

La línea 53 también sobra porque $columna no se usa en ningún sitio.
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: Regex a excel

Notapor situ » 2013-04-12 07:48 @366

Muchas gracias, funciona perfecto.
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114


Volver a Básico

¿Quién está conectado?

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