• Publicidad

De fechas y SQL

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

De fechas y SQL

Notapor Kiloko » 2008-07-03 13:43 @613

Buen día, perleros, ando algo atorado con un programa. Sé que es algo muy básico, pero ando algo bloqueado y me gustaría saber su opinión y si me pueden dar algún tip. Se los agradecería. :)

Mi primer duda es: tengo esta parte en mi programa:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
foreach $x (@resultado)
    {
     print "$x\n";
     open (dir, ">>$h.txt");
     print dir "$h=$x\n";
     close(dir);
    }
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


En donde $h = "fecha" y donde @resultado corresponde a una lista de la siguiente forma:
Código: Seleccionar todo
1001.1=1543
1001.2 = 15354
... hasta llegar al 1009.99=1545


Y necesito buscar el valor que sea igual a 1008.1= 215884.

Mi llave sería 1008.1 y lo que viene después de '=' sería X porque siempre cambia; en pocas palabras, un filtro para guardar en el archivo fecha.txt.

La segunda duda es un programa que tome este archivo txt y lo convierta en una secuencia de SQL, y que lo inserte en una BD.

jejeje y listo... si me pueden echar la mano se los agradecería.

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

Publicidad

Notapor explorer » 2008-07-03 14:35 @649

Para lo primero creo que es esto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
open (dir, ">>$h.txt");
foreach $x (@resultado) {
    next if $x !~ /^1008\.1\s*=\s*(.+)/;
    print "$x\n";
    print dir "$h=$x\n";
}
close(dir);
Coloreado en 0.001 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: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Kiloko » 2008-07-03 16:22 @723

Excelente, jejeje, te juro que me tardé como una hora y nada más no se me prendía el foco, hice todo un show con split, jejeje,
Pues bien mi archivo sale:
fecha
2008-05-06=1008.1:21584

Ahora necesito que se quite el 1008.1: y solo salga el dato 21584.

Lo logré así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
foreach $x (@resultado)
 {
    next if $x !~ /^1008\.1\s*:\s*(.+)/;
    open (dir, ">>$h.dat");
    $linea= ( split /:/, $x )[1];
    print "$h=311879=464=$linea\n";
    print dir "$h=311879=464=$linea\n";
}
close(dir);
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Ahora necesito hacer lo mismo con el siguiente dato pero que se inserte al final... ¿alguna idea?

:?:
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 » 2008-07-03 19:31 @855

Pues lo he conseguido, mi Frankeinstein ya casi vive... ahí está el código... (se aceptan comentarios)

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
foreach $x (@resultado)
 {
    next if $x !~ /^1008\.1\s*:\s*(.+)/;
    $linea= ( split /:/, $x )[1];
}
##-----------------------------------------------------------------------
foreach $x2 (@resultado2) {
    next if $x2 !~ /^1008\.1\s*:\s*(.+)/;
    open (dir, ">>$h.data");
    $linea2= ( split /:/, $x2 )[1];
    print "$h=311879=464=$linea=$linea2\n";
    print dir "$h=311879=464=$linea,$linea2\n";
}
close(dir);
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Al final esto es lo que sale:

2008-07-03-18=311879=464=608780=134818

:D

Ya solo falta insertar eso en la BD y VIVIRÁ, jejeje... mmm y claro, dividir los últimos resultados entre 8... :roll:

Por cierto, ¿cómo hago para que cuando divido no salga el punto decimal?
Que me lo redondee.
Lo que hago es
Código: Seleccionar todo
$l = $linea
en mi programa anterior y me sale
Código: Seleccionar todo
2008-07-03-36=311879=464=3497.5=11323.625

¿Cómo hago para redondear?
SAludos

jejeje, no cabe duda que la mejor programación sale en la noche y justo a la hora de salir del talejo (trabajo).
http://perlenespanol.com/foro/viewtopic.php?t=1429&highlight=redondear+enteros

Ahí está el hilo para redondear y quitar el punto decimal.
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 » 2008-07-04 02:38 @151

El open() y el close() están descompensados.

Mueve la línea del open fuera del foreach.
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 » 2008-07-07 11:00 @500

Pues parece que ya he terminado pero tengo algunas dudas, de números que no me cuadran, mi problema es el siguiente:
yo tengo mi dato $X el cual es un octeto; primero lo trasformo en bits, lo multiplico por 8.

Y ahora necesito meter esos datos en una gráfica para que sean bits*seg. en un rango de tiempo de 5 min.

Lo que hice fue tomar el primer dato $X y el dato que se guardó hace 5 min, $X5 y hacer la siguiente operación $X5 -$X.

Y de lo que resulte, dividirlo entre 300 (5min, en segundos).

Y ese dato insertarlo en la gráfica cada 5min y al pasar el tiempo, la gráfica me mostrará los bits, por seg. obtenidos de $X. Como ven... ¿estoy en lo correcto?

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 » 2008-07-07 11:41 @529

Yo creo que sí que es correcto...
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 » 2008-07-24 15:14 @676

Efectivamente mi buen explorer, es correcto
y el código final quedo así

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use lib "/bin/lib";
use snmpUtils;          # uso de modulos en Windows y Unix
use File::Copy;  
use POSIX;
#**************************************************
my $h = strftime("%Y-%m-%d-%H-%M", localtime);
#**************************************************
# OID Solicitadas:
my $received15="1.3.6.1..1.2.4.1.8";
my $trasmitted15 ="1.3.6.1.2.4.1.5";
     #Description:    The number of transmitted (8-bit) octets
#------------------------------------------------
$IpEquipo = "1.2.3.54.21";
$Comunidad = "local" ;
#------------------------------------------------
   $snmp = sprintf( "%s\@%s:::::2",$Comunidad,$IpEquipo);
   $snmp2 = sprintf( "%s\@%s:::::2",$Comunidad,$IpEquipo);
#------------------------------------------------
         @mibs = ($received15);
         @mibs2 = ($trasmitted15);
#------------------------------------------------
         @resultado=snmpUtils::walk($snmp, @mibs);
         @resultado2=snmpUtils::walk($snmp2, @mibs2);
#-------------------------------------------------      
  foreach $x (@resultado)
 {
    next if $x !~ /^1008\.2\s*:\s*(.+)/;
    $primero= ( split /:/, $x )[1];    
 }
open (dir, ">>$h.data");
 
  foreach $x2 (@resultado2)
  {
    next if $x2 !~ /^1008\.2\s*:\s*(.+)/;
    $primero2= ( split /:/, $x2 )[1];
   }

  my $I= $primero*8;
  my $I2= $primero2*8;

    my $divisor = 900;
    $l =  ( split(/\./, $I/$divisor) )[0];
    $l2 = ( split(/\./, $I2/$divisor) )[0];

 print "$h=$l=$l2=0\n";
 print dir "$h=$l=$l2=0\n";

close(dir);
    $oldlocation = "/us/bin/$h.data";
    $newlocation = "/us/data/$h.data";
    move($oldlocation,$newlocation);        
exit(0);
 
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
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


Volver a Básico

¿Quién está conectado?

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