• Publicidad

Carga de información de Excel a base de datos

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

Re: Carga de información de Excel a base de datos

Notapor explorer » 2011-08-23 11:08 @505

Para que Spreadsheet::Read pueda leer un archivo externo, deberá saber el nombre completo de ese archivo (eso incluye su extensión).

En cuanto a la lectura de la base de datos, me parece que es un poco de gasto de recursos construir un estructura de datos en la que la mitad de la información son '1'.

Casi mejor devolver la lista de palabras, y que sea el resto del programa el que se encargue de manipularlas.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.     sub datosBaseDatos {
  2.             my ($conexion, $tabla) = @_;
  3.             my @palabras_en_base_de_datos;
  4.            
  5.             my $sth = $conexion->prepare("SELECT * FROM $tabla")
  6.                    or die("Couldn't prepare statement: " . $conexion->errstr)
  7.                     ;
  8.             $sth->execute()
  9.                    or die("Couldn't execute statement: " . $sth->errstr)
  10.                     ;
  11.              
  12.             while (my $ref = $sth->fetchrow_hashref()) {                  
  13.                    push @palabras_en_base_de_datos, $ref->{'palabra'};  # Apuntamos la palabra en nuestro diccionario
  14.             }
  15.      
  16.             $sth->finish();
  17.            
  18.             return @palabras_en_base_de_datos;
  19.     }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Publicidad

Re: Carga de información de Excel a base de datos

Notapor Txemaracas » 2011-08-24 09:02 @418

Tengo un problema y no sé porque pasa y ya pues llevo toda la mañana mirando y la verdad no se me ocurre nada que pueda estar mal puesto que lo he probado aparte, esta subrutina y me da los datos correctos. Cuando ejecuto el programa todo funciona correcto hasta que llega a la línea 58. Accedo a la subrutina pero no sé por qué no introduce los datos en el array. En la subrutina todo lo hace bien, me imprime el print() que dice que estoy antes del while() pero no me imprime el que dice que estoy dentro del while() con lo cual no sé cuál es el problema por el que no me introduce los datos. También puse un print() para que me sacase por pantalla ref->{'palabra'} pero no lo saca. No sé cual es el problema de que no entre o no haga el while().

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. sub datosBaseDatos {
  2.        
  3.         printf("estoy  en datosBaseDatos\n");
  4.         my ($conexion, $tabla) = @_;
  5.         my @palabras_en_base_de_datos;
  6.                
  7.         my $sth = $conexion->prepare("SELECT * FROM $tabla") or die("Couldn't prepare statement: " . $conexion->errstr);
  8.        
  9.         $sth->execute() or die("Couldn't execute statement: " . $sth->errstr);
  10.         printf ("estoy antes del while\n");
  11.        
  12.         while (my $ref = $sth->fetchrow_hashref()) {
  13.                
  14.                 printf ("estoy dentro del while\n");
  15.                 push @palabras_en_base_de_datos, $ref->{'palabra'};  # Apuntamos la palabra en nuestro diccionario
  16.                
  17.         }
  18.          
  19.         $sth->finish();
  20.        
  21.         print "@palabras_en_base_de_datos\n";      
  22.         return @palabras_en_base_de_datos;
  23. }
  24.        
  25.     &comprobarDB();                    # Llamada a subrutina CompararDB.
  26.  
  27.     my($conexion,$sth);                     # Decalaración de las  variables que utilizaremos a continuación.
  28.  
  29.     $conexion = ConectarDB->connect();      #  Conectamos con la  base de datos desde el paquete ConectarDB y lo dejamos en la variable $dbh.
  30.  
  31.    
  32.    
  33.    
  34.     printf("estoy  en pasar excel a BASE\n");
  35.    
  36.     my $BASE = ReadData('test.xlsx', cells => 0, attr => 1);
  37.  
  38.     die "ERROR: Base de datos no encontrada" if not $BASE;
  39.    
  40.     my %HOJAS = reverse %{$BASE->[0]->{sheet}};
  41.    
  42.     my $sheets = $BASE->[0]->{sheets};              #Numero de hojas.
  43.    
  44.     my($fila_enc, $col_enc, $tabla);
  45.    
  46.     my @palabras_en_base_de_datos;
  47.  
  48.    
  49.     foreach my $hoja (1..$sheets){
  50.        
  51.        
  52.          print "Hoja ", $HOJAS{$hoja}, "\n";
  53.          
  54.          $tabla = $HOJAS{$hoja};
  55.        
  56.          &crearTabla($tabla, $conexion);
  57.          
  58.          @palabras_en_base_de_datos =  &datosBaseDatos($conexion, $tabla);
  59.          
  60.          print "@palabras_en_base_de_datos\n";
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Txemaracas
Perlero nuevo
Perlero nuevo
 
Mensajes: 136
Registrado: 2011-04-04 10:06 @462

Re: Carga de información de Excel a base de datos

Notapor explorer » 2011-08-24 09:19 @430

Si no sale el print() dentro del while(), es que no entra en el while(), y por lo tanto, no hay resultados desde la base de datos.

Una cosa importante: estás confundiendo print() y printf(). Por favor, algunas líneas están mál, como la 10, 14 y 34.

Recuerda que printf() lleva asociada una cadena de formato seguida por una lista de parámetros. En cambio, print() solo lleva la lista de parámetros a imprimir.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Carga de información de Excel a base de datos

Notapor Txemaracas » 2011-10-06 11:56 @539

Hola. He tenido que modificar el código de meter palabras y borrar palabras. Cuando, por ejemplo, en base datos, tengo:

-hola(español) -hello(ingles)

En Excel:

-otro(español) -hello(ingles)


lo que debería hacer es cambiarme el nombre en la base de datos también pero no lo hace. ¿Debería sustituir el array de @palabras_en_base_datos por una tabla hash? De esta manera tendría la palabra en inglés y la palabra en castellano a la hora de comparar y sustituir aunque en este caso debería hacer un modify en el SQL, ¿no?
Txemaracas
Perlero nuevo
Perlero nuevo
 
Mensajes: 136
Registrado: 2011-04-04 10:06 @462

Re: Carga de información de Excel a base de datos

Notapor Txemaracas » 2011-11-29 11:43 @530

¿Alguien puede ayudarme con la pregunta que hice en el mensaje anterior? Es que necesito que me cambie el nombre de la palabra en español en caso de que se cambie en el Excel y no sé cómo hacerlo.
Txemaracas
Perlero nuevo
Perlero nuevo
 
Mensajes: 136
Registrado: 2011-04-04 10:06 @462

Re: Carga de información de Excel a base de datos

Notapor explorer » 2011-11-29 15:53 @704

¿Con un UPDATE a la base de datos?
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Carga de información de Excel a base de datos

Notapor Txemaracas » 2011-11-29 16:54 @745

Ya, pero ¿cómo compruebo si ha cambiado? Cuando estoy comparando si existe la palabra en inglés en la base de datos, si la palabra está quiero saber si tiene el mismo nombre en español pero no cómo hacerlo. He pensado en cambiar el array datos_en_base_datos por una tabla hash pero no sé cómo sacar la clave a una variable. ¿Cómo lo actualizo?
Txemaracas
Perlero nuevo
Perlero nuevo
 
Mensajes: 136
Registrado: 2011-04-04 10:06 @462

Re: Carga de información de Excel a base de datos

Notapor explorer » 2011-11-29 17:16 @761

Pero si tienes toda la información, ¿no?

Buscas el término en la base de datos con un SELECT. Tienes el valor de las celdas en la hoja de cálculo. Entonces, solo queda hacer una comparación para saber si algo ha cambiado.

No sé... o no acabo de entender lo que quieres hacer o lo veo muy simple.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Carga de información de Excel a base de datos

Notapor Txemaracas » 2011-11-29 18:09 @798

A ver, intentaré explicarlo mejor.

Tengo un hash con las palabras en Excel y un array con las palabras en inglés que tengo metidas en la base de datos. Cuando importo otra vez la hoja Excel, mete las palabras en inglés como clave y la palabra en español como dato. En el array @base_de_datos meto las palabras en inglés que tengo en la base de datos. Comparo cada palabra en inglés de la base de datos en la hoja de Excel. Si no está la palabra la elimino de la base de datos. Si está, paso a la siguiente. Así todo el rato.

Pero lo que quiero es que cuando vea que está la palabra en la hoja Excel compare también la palabra en castellano por si ha cambiado.

No sé si lo he explicado mejor.
Txemaracas
Perlero nuevo
Perlero nuevo
 
Mensajes: 136
Registrado: 2011-04-04 10:06 @462

Re: Carga de información de Excel a base de datos

Notapor explorer » 2011-11-29 18:23 @807

Bueno, pues se trata de sacar el valor correspondiente a una clave hash.

La clave es la palabra en inglés, que ya conocemos, así que si %base_de_datos contiene la correspondencia de inglés a español, $base_de_datos{$palabra_en_inglés} contiene la palabra en español. Solo queda comparar ese valor con el de la celda en Excel.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Anterior

Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron