• Publicidad

Convertir archivo .dat a SQL

Todo acerca de las bases de datos que existen: SQL, MySQL, Oracle, Postgres, CSV, etc.

Notapor explorer » 2007-09-04 14:03 @627

Como este foro lo van a ver más personas (y robots), reescribo aquí la parte de código publicado por Kiloko:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
# Realizamos la etapa de preparación de la sentencia
my $sth
    = $dbh->prepare(
      'SELECT '
    .     'idups, nombre, idsitio, ip, vendor, '
    .     'snmpro, modelo, estado, host, '
    .     'idcliente, usuario, password, fecha_add, '
    .     'fecha_kill, umbral_carga, trespaldo '
    . 'FROM '
    .     'ups; '
);

# Realizamos la etapa de ejecución de la sentencia
$sth->execute();

#------------------------------
# Realizamos la etapa de extracción de datos. Imprimimos dato a dato.
while ( @tupla = $sth->fetchrow_array() ) {

    # Para separar por : y guardar en una sola variable
    my $s7 = join ':', @tupla[0..6];                    
    print "--------------\n";
    print "$s7\n";          

    open  DAT,">>$tabla.dat";
    print DAT "$s7\n$h";
    close DAT;

    #-----------------------------------------------------------------
    my $texto = do {
        open my $file, '<', "tabla.dat" or die "No se pudo abrir archivo: $!";
        local $/;
        <$file>;
    };

    print "-------------------------------------\n";
    print $texto;
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
La forma my $s = @tupla [0];, aunque funcional, no es correcta, ya que, realmente, lo que estás haciendo en esa línea es adjudicar el primer elemento de la lista de valores devueltos por el array @tupla entre los elementos 0 y 0, a la variable escalar $s, que como ves, es demasiado complicado.

Realmente, lo que quieres es adjudicar el primer elemento de @tupla a $s, y eso se hace con my $s = $tupla[0]; (atención a los sigil),

Bueno, tu tranquilo que estas cosas se aprenden poco a poco...
Última edición por explorer el 2007-09-04 15:49 @700, 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

Publicidad

Notapor Kiloko » 2007-09-04 15:43 @697

:? Algo raro pasa me marca un error aquí:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
    open  DAT,">>$tabla.dat");
    print DAT "$s7\n$h";
    close DAT;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


y ya traté de cambiarlo por

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
    open  (DAT,">>$tabla.dat");
    print DAT "$s7\n$h";
    close (DAT);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Pero a un así aparece el error.
Código: Seleccionar todo
syntax error at Ejemplo.pl line 45, near "open "
Execution of Ejemplo.pl aborted due to compilation errors.


Saludos...


:?:
Nunca interrumpas a tu enemigo cuando está cometiendo un error
Napoleón Bonaparte
Avatar de Usuario
Kiloko
Perlero nuevo
Perlero nuevo
 
Mensajes: 243
Registrado: 2007-07-10 18:26 @810
Ubicación: MOnterrey NL

Notapor explorer » 2007-09-04 15:49 @701

A ver ahora... he quitado el paréntesis del 'open'.

He hecho un perl -c y no me da fallos. Sólo falta por poner una '}' al final, pero tu tampoco la tenías puesta.
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 Kiloko » 2007-09-04 15:56 @705

:lol: Quién sabe qué pasó, pero ya no jala jajajaja, ah, que cosa, a ver, déjame darle una revisada nuevamente al código, al que tenía y al que pusiste a ver dónde está la falla...
Nunca interrumpas a tu enemigo cuando está cometiendo un error
Napoleón Bonaparte
Avatar de Usuario
Kiloko
Perlero nuevo
Perlero nuevo
 
Mensajes: 243
Registrado: 2007-07-10 18:26 @810
Ubicación: MOnterrey NL

Notapor Kiloko » 2007-09-04 16:45 @739

:lol: como que hoy PErl anda medio raro,, pues ya jala, asi quedo el codigo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#Realizamos la etapa de preparación de la sentencia
my $sth= $dbh->prepare(  'SELECT '
        .     'idups, nombre, idsitio, ip, vendor, '
        .     'snmpro, modelo, estado, host, '
    .     'idcliente, usuario, password, fecha_add, '  
    .     'fecha_kill, umbral_carga, trespaldo '
    . 'FROM '. 'ups; ');
#Realizamos la etapa de ejecución de la sentencia
$sth->execute();
#Realizamos la etapa de extracción de datos. Imprimimos dato a dato.
while ( @tupla=$sth->fetchrow_array())
 {
        #Para separar por : y guardar en una sola variable
        my $s7 = join ':', @tupla[0..6];                    
    print "$s7\n";          
    open  DAT,">>$tabla.dat";
    print DAT "$s7\n$h";
    close DAT;
        my $texto = do
 {
 open my $file, '<', "$tabla.dat" or die "No se pudo abrir archivo: $!";
 local $/;
 <$file>; };
 #Creamos y movemos un archivo .dat que contiene la información requerida.
                my $oldlocation = "/home/ups/bin/$tabla.dat";
                my $newlocation = "/home/ups/config/$tabla.dat";
                move($oldlocation, $newlocation);
        }      
 #Realizamos la etapa de liberación de recursos ocupados por la sentencia
        $sth->finish();
#Nos desconectamos de la BD. Mostramos un mensaje si hay algun fallo
        $dbh->disconnect || warn "\nFallo al desconectar No es la ostia.\nError: $DBI::errstr\n";
#Terminamos
exit;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Al parecer el error estaba en los { }

PEro a hora el error que da es, si yo ejecuto el programa en la terminal aparece:

1:APODACA:0:123.45.6.789:Tripplite:SHCP2007AXTEL:
2:APODACA:1:123.45.6.789:Tripplite:SHCP2007AXTEL:

Y cuando se genera el .dat aparece:

2:APODACA:1:123.45.6.789:Tripplite:SHCP2007AXTEL:
2007-8-4-16-39

Falta la primera linea,, que raro,,

Por cierto en esta parte

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
[syntax="perl"]my $texto = do
 {
 open my $file, '<', "$tabla.dat" or die "No se pudo abrir archivo: $!";
 local $/;
 <$file>; }; [/syntax]
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Quiero entender que es solo una alarma que alerta si el archivo no se pudo abrir, pero no comprendo del todo el local $/;

Voy a continuar revisando por que no sale la primera linea
por cierto estas ' no las tiene mi teclado,, generalmente uso ", pero por lo visto se puede reducir el numero de lineas,,,

Un saludo
Nunca interrumpas a tu enemigo cuando está cometiendo un error
Napoleón Bonaparte
Avatar de Usuario
Kiloko
Perlero nuevo
Perlero nuevo
 
Mensajes: 243
Registrado: 2007-07-10 18:26 @810
Ubicación: MOnterrey NL

Notapor explorer » 2007-09-04 16:59 @749

Yo desisto... no editaré más mensajes de Kiloko... Me he cansado. :(
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 Kiloko » 2007-09-04 17:02 @751

jajajaja ok ok sere mas conciso en mis mensajes, :P
Nunca interrumpas a tu enemigo cuando está cometiendo un error
Napoleón Bonaparte
Avatar de Usuario
Kiloko
Perlero nuevo
Perlero nuevo
 
Mensajes: 243
Registrado: 2007-07-10 18:26 @810
Ubicación: MOnterrey NL

Notapor explorer » 2007-09-04 17:12 @758

El 'local $/;' es algo así como crear una variable local (al contexto {} donde estamos), almacenando el antiguo valor de $/ en un sitio seguro para recuperarlo al final del contexto, y asignando a la nueva variable el valor indefinido (mucho para pocas letras).

El resultado es que el valor de '$/' fuera del contexto se mantiene, pero dentro, adquiere el valor indefinido, que tiene como efecto (in)definir el valor del separador de registros a la entrada.

Por defecto, ese valor es el del retorno de carro/nueva línea en el sistema operativo en que nos encontremos. De esa manera, hay leer desde un fichero, podremos leerlo línea a línea. Pero al indefinirlo, Perl lo leerá completamente (digamos que no encuentra un valor que marque fin de registro), por lo que nos devolverá el fichero entero, de una sola vez.

Por eso el resultado se guarda en un escalar, porque es todo el fichero en un solo valor.
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 explorer » 2007-09-04 17:15 @760

Kiloko escribiste:jajajaja ok ok sere mas conciso en mis mensajes, :P
Yo no edito los mensajes para hacerlos más breves, sino para corregir el formateo de las secciones de código y citas. Y para corregir las faltas de ortografía, sintaxis, abreviaturas, anglicismos, etc.

No es para que quede bonito, sino para que Google nos ayude a atraer más usuarios.
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 Kiloko » 2007-09-04 17:27 @769

OK enterado se que mi programación no es muy buena pero tratare de mejorar.
ya como ultimo.
Aqui esta el codigo final: con esto se soluciona el problema del .dat
En lo personal Trato de poner los { } más adelante, para no perder donde se cierra cada uno.


Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#Realizamos la etapa de extracción de datos.
while ( @tupla=$sth->fetchrow_array())
{
    #Para separar por : y guardar en una sola variable
        my $s7 = join ':', @tupla[0..6];                    
        print "$s7\n";    
        open  DAT,">>$tabla.dat";
        print DAT "$s7\n";
        close DAT;
        my $texto = do
{      
        open my $file, '<', "$tabla.dat" or die "No se pudo abrir archivo: $!";local $/; <$file>;
 }
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Saludos.
Nunca interrumpas a tu enemigo cuando está cometiendo un error
Napoleón Bonaparte
Avatar de Usuario
Kiloko
Perlero nuevo
Perlero nuevo
 
Mensajes: 243
Registrado: 2007-07-10 18:26 @810
Ubicación: MOnterrey NL

AnteriorSiguiente

Volver a Bases de datos

¿Quién está conectado?

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