• Publicidad

Buscar información en Excel

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

Buscar información en Excel

Notapor jacks » 2011-05-13 12:10 @549

Hola. Quería saber cómo poder realizar una búsqueda en un archivo Excel con un patrón para encontrar una columna específica. Debería encontrar la columna por ejemplo que contenga palabras que empiecen por "h" entonces usaría un patrón para buscar la primera palabra que comience por esa letra. No estoy acostumbrado a Perl con lo cual lo más probable es que el código éste no sea muy eficaz o incluso no funcione.


Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!c:/perl/bin
  2.  
  3. use Spreadsheet::Read;
  4. use strict;
  5. use warnings;
  6.  
  7. my $BASE = ReadData( "test.xlsx", cells => 0, attr => 1 );
  8. die "ERROR: Base de datos no encontrada" if not $BASE;
  9. my %HOJAS = %{ $BASE->[0]->{sheet} };
  10. my $HOJA  = $BASE->[ $HOJAS{$sector} ]->{cell};
  11. for ( 1 ... maxHojas )
  12. {                                      # ¿cómo saber cuántas hojas contiene el libro de Perl para meterlo en maxHojas?
  13.  
  14.     $fila    = 1;
  15.     $columna = 1;
  16.     $booleano
  17.         = 0;                           # creo que no se puede usar  true o false así que utilizo  números.
  18.     while ( $booleano == 0 ) {
  19.  
  20.         if ( $HOJA->[$columna]->[$fila] == "h" )
  21.         {                              # ¿cómo buscar con un  patrón para saber si en esa casilla la palabra empieza  por "h"?
  22.             booleano++;
  23.         }
  24.         else {
  25.             $columna++;
  26.         }
  27.     }
  28.  
  29.     $booleano = 0;
  30.  
  31.     while ( $booleano == 0 ) {
  32.  
  33.         while ( $HOJA->[$columna]->[$fila] == "undef" )
  34.         {                              # que imprima por pantalla  hasta que  se acaben las palabras de esa  columna  que tendrá el valor undef.
  35.  
  36.             print $HOJA->[$columna]->[$fila], "\n";
  37.         }
  38.  
  39.         booleano++;
  40.     }
  41. }
  42.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


¿Cómo podría solucionar esto? ¿Alguna idea?
Última edición por explorer el 2011-05-13 12:22 @557, editado 2 veces en total
Razón: Formatear el código con Perltidy. Faltas de ortografía.
jacks
Perlero nuevo
Perlero nuevo
 
Mensajes: 148
Registrado: 2011-04-05 11:14 @510

Publicidad

Re: Buscar información en Excel

Notapor explorer » 2011-05-13 12:21 @556

Con el patrón /^h/i puedes saber si algo comienza por 'h' (o 'H').
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: Buscar información en Excel

Notapor jacks » 2011-05-14 05:06 @254

Y ¿cómo podría saber el número de hojas que contiene el libro para hacer el for() hasta maxHojas?
jacks
Perlero nuevo
Perlero nuevo
 
Mensajes: 148
Registrado: 2011-04-05 11:14 @510

Re: Buscar información en Excel

Notapor explorer » 2011-05-14 07:42 @362

Si te fijas en la estructura mostrada en el manual del módulo, verás que $BASE->[0]->{sheets} guarda un entero, con el número de hojas.
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: Buscar información en Excel

Notapor jacks » 2011-05-16 09:34 @440

Hola, estuve probando el código que hice y, la verdad, me da bastantes errores y después de usar éste me saca correctamente todos los valores por pantalla pero mi duda es cómo poner el patrón /^h/i.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.  
  2.  my $excel = Spreadsheet::XLSX -> new ('test.xlsx');
  3.  
  4.  foreach my $sheet (@{$excel -> {Worksheet}}) {
  5.  
  6.         printf("Sheet: %s\n", $sheet->{Name});                                              # Muestra el nombre de cada hoja
  7.  
  8.         $sheet -> {MaxRow} ||= $sheet -> {MinRow};
  9.        
  10.          foreach my $row ($sheet -> {MinRow} .. $sheet -> {MaxRow}) {
  11.          
  12.                 $sheet -> {MaxCol} ||= $sheet -> {MinCol};
  13.                
  14.                 foreach my $col ($sheet -> {MinCol} ..  $sheet -> {MaxCol}) {
  15.                
  16.                         my $cell = $sheet -> {Cells} [$row] [$col];
  17.  
  18.                         if ($cell-> {Val} /^www/i ) {
  19.                             printf( "( %s , %s ) => %s\n",$row, $col, $cell -> {Val});      # muestra linea columna y valor de la celda
  20.                         }
  21.  
  22.                 }
  23.  
  24.         }
  25.        
  26.  
  27.  }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Solo quiero mostrar los que empiezan por la 'h'.
jacks
Perlero nuevo
Perlero nuevo
 
Mensajes: 148
Registrado: 2011-04-05 11:14 @510

Re: Buscar información en Excel

Notapor jacks » 2011-05-16 10:15 @469

He probado con

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. if ($cell -> {Val}=~ m/h/ ) {
  2.                             printf( "( %s , %s ) => %s\n",$row, $col, $cell -> {Val});    
  3.                         }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


me da las palabras que quiero pero me salen bastantes errores ¿Por qué puede ser?
Adjuntos
Res.JPG
Res.JPG (143.87 KiB) Visto 808 veces
jacks
Perlero nuevo
Perlero nuevo
 
Mensajes: 148
Registrado: 2011-04-05 11:14 @510

Re: Buscar información en Excel

Notapor explorer » 2011-05-16 10:29 @478

Mejor cambia el patrón m/h/ por m/^h/i, para encontrar solo las que "empiezan" por 'h'. La /i es para buscar también por los que empiezan por 'H'.

Los errores vienen debidos a que, en muchas celdas, $cell -> {Val} no tiene ningún valor.

Cambia la condición por

if (exists $cell->{Val} and $cell->{Val} =~ m/h/i ) {
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: Buscar información en Excel

Notapor jacks » 2011-05-16 10:54 @496

Vale, muchas gracias. Ahora sí me muestra todo correctamente
jacks
Perlero nuevo
Perlero nuevo
 
Mensajes: 148
Registrado: 2011-04-05 11:14 @510


Volver a Básico

¿Quién está conectado?

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