• Publicidad

Separar texto

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

Separar texto

Notapor Kiloko » 2008-08-29 12:34 @565

Buen día, perleros, espero puedan ayudarme es una duda muy básica. Es para separar texto. Tengo mi programa:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
##################################################
## Variables a modificar
##################################################
$datadir        = "/data";
$sqldir         = "/sql";
$historicaldata = "/historico";
##################################################

&fecha;

opendir(DIRHANDLE,"$datadir");
foreach (readdir(DIRHANDLE)) {
    if ($_ ne "." && $_ ne "..") {
        push (@archivos, $_);
    }
}
closedir DIRHANDLE;
@archivos = sort(@archivos);

foreach $archivo (@archivos) {
    ($fechacomp, $no) = split(/\./, $archivo);
    $sqlfecha  =  $fechacomp;
    $fechacomp =~ s/\-//g;
    if ($fechacomp <= $fecha) {
        #print "$fechacomp\n";
        open (FILE, "<$datadir/$archivo");
        flock (FILE,2);
        @lista_ups = <FILE>;
        close FILE;
        foreach $ups (@lista_ups) {
            chomp($ups);
            ($idrouter, $indicador_ping, $nombre,
            $ip, $host, $memoria, $cpu1, $cpu5,
            $temperatura, $sysuptime,$disponibilidad,$fecha)
                = split(/\=/, $ups);
            open (FILE, ">>$sqldir/$sqlfecha.sql");
            print FILE "Insert into ACTIVO_AVA (Fecha, IdRouter, Memoria, Temp, Cpu1, Cpu5, Host, SysUpTime,disponibilidad)
                         values (to_date('$sqlfecha','YYYY-MM-DD-HH24-MI'),
                         '$idrouter','$memoria','$temperatura','$cpu1',' $cpu5','$host','$sysuptime','$disponibilidad')\;\n"
;
            close FILE;
            #     system ("mv $datadir/$sqlfecha.data $historicaldata/$sqlfecha.data");
        }
    }
}

exit;
Coloreado en 0.007 segundos, usando GeSHi 1.0.8.4


El cual toma un archivo del tipo 11pfrouvip20080828154700.txt y crea un archivo sql, 11pfrouvip20080828154700.sql, con la estructura

Sintáxis: [ Descargar ] [ Ocultar ]
Using sql Syntax Highlighting
INSERT INTO ACTIVO_AVA (Fecha, IdRouter, Memoria, Temp, Cpu1, Cpu5, Host, SysUpTime,disponibilidad)
          VALUES (to_date('12pfrouvip20080828090200','YYYY-MM-DD-HH24-MI'),'4926','0','0','0',' 0','18','0','1');
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Pero como pueden ver, está la parte 12pfrouvip que tomo de la primera parte. Mi pregunta aquí es cómo puedo eliminar esta parte para que solo salga la fecha, y se pueda inserta en la bd :-) . Y si de paso conocen alguna página para este tipo de cuestiones (separaciones), se los agradecería...

Igual si tienen algún comentario sobre el programa es bien recibido...

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-08-29 13:11 @591

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
casa:~ # perl -le '$sqlfecha = "11pfrouvip20080828154700"; ($fecha) = $sqlfecha =~ /(\d+)$/; print $fecha'
20080828154700
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


Es fácil hacer la extracción: es un conjunto de números (\d+) que está al final ($) de la cadena.
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-08-29 13:26 @601

A ver, dejarme probar, porque en sí lo que quiero es extraer esa parte con el programa donde se toma el archivo. Y así que el archivo que se crea *.sql, salga listo para ser insertado.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
closedir DIRHANDLE;
@archivos = sort(@archivos);

foreach $archivo (@archivos) {
    ($fechacomp, $no) = split(/\./, $archivo);
    $sqlfecha  =  $fechacomp;
    $fechacomp =~ s/\-//g;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Dejarme hacer la prueba...
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-08-29 16:10 @715

jejeje, no cabe duda que estar mucho tiempo sin comer, te afecta... el problema era, que el programa daba como resultado

Código: Seleccionar todo
INSERT INTO ACTIVO_AVA (Fecha, IdRouter, Memoria, Temp, Cpu1, Cpu5, Host, SysUpTime,disponibilidad)
          VALUES (to_date('12pfrouvip20080828090200','YYYY-MM-DD-HH24-MI'),'4926','0','0','0',' 0','18','0','1');

y esta parte estaba mal
2pfrouvip20080828090200
yo solo quería que saliera
20080828090200
pero mi problema estaba en que ponía la variable
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
 values (to_date('$sqlfecha','YYYY-MM-DD-HH24-MI'),
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

y debía poner solo
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$fecha
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Listo. Hice el cambio y ahora da como resultado:

Código: Seleccionar todo
Insert into ACTIVO_AVA (Fecha, IdRouter, Memoria, Temp, Cpu1, Cpu5, Host, SysUpTime,disponibilidad)
          values (to_date('20080828154700','YYYY-MM-DD-HH24-MI'),'4129','28356828','29','2',' 2','18','9741036','1')
 Insert into ACTIVO_AVA (Fecha, IdRouter, Memoria, Temp, Cpu1, Cpu5, Host, SysUpTime,disponibilidad)


Tal y como debe ser. :D

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


Volver a Básico

¿Quién está conectado?

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

cron