• Publicidad

Fechas en perl

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

Notapor Reina » 2008-04-30 08:41 @403

Buenas Explorer,

He probado a poner la ruta completa del fichero y me da el mismo resultado :roll: ¿A qué puede ser debido?

Graciasªª

Besitos!! :wink:
Reina
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2008-04-25 06:47 @324

Publicidad

Notapor explorer » 2008-04-30 10:51 @494

Prueba esto y nos dices qué sale.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $fichero = 'C:/Archivos de programa/Antivirus/dinfo.dat';
die "El fichero NO existe\n" if ! -e $fichero;
my @stat = stat($fichero);
die "No se pudo obtener información\n" if ! @stat;
foreach $i (0 .. $#stat) {
    print "Valor $i\t$stat[$i]\n";
}
Coloreado en 0.003 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

Notapor Reina » 2008-05-05 01:49 @117

Buenas explorer,

He probado el script que me pasaste y me dice que el fichero NO existe, pero después recorro la ruta y está ahí, no entiendo nada... :cry:

La ruta del .dat es 'C:\Archivos de programa\Archivos comunes\Symantec Shared\VirusDefs\dinfo.dat' ¿Puede ser que al tratarse del mismo antivirus para todo un dominio haya que tratarlo de distinta manera?

¡¡Gracias!!
Reina
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2008-04-25 06:47 @324

Notapor explorer » 2008-05-05 02:18 @137

Pues... no tengo ni idea de qué es lo que puede estar pasando...

A la hora de poner caminos de ficheros, yo, cuando trabajaba en Windows, tenía la precaución de: ponerlo siempre entrecomillado simple y usar '/' en lugar de '\' (Perl sabe cuándo había que darle la vuelta.

En tu caso quedaría:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $fichero = 'C:/Archivos de programa/Archivos comunes/Symantec Shared/VirusDefs/dinfo.dat';
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Otra cosa que puedes probar es ir haciendo chdir() para ir entrando poco a poco y ver si es que hay algún nivel de directorio o carpeta que por sus permisos no te deje entrar o leer el fichero.

Otra cosa importante y que se me ha pasado. Dentro de los die() anteriores, prueba a colocar la variable $! para que Perl te saque el error del sistema que ha ocurrido. Por ejemplo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
die "El fichero NO existe: $!\n" if ! -e $fichero;
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: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Reina » 2008-05-05 09:02 @418

Buenas, explorer:

¿A qué no sabes a quién le ha salido ya el script? Sí, sí, a mí, ¡¡ullueee!!

Muchas gracias por todo, la verdad es que sin vuestra ayuda no lo habría conseguido.

Sólo una pregunta más:

La fecha de actualización que me sale del antivirus, corresponde con la fecha de modificación del archivo .dat (la que podemos obtener si miramos las propiedades del archivo), en cambio, si abrimos éste, podemos comprobar que la fecha de actualización que muestra es anterior a la que teníamos. Hay alguna manera de abrir el archivo para coger esa fecha en vez de la que viene en las propiedades (que corresponde a la hora en la que se encendió el ordenador por la mañana) y modificarla, ya que aparece como CurDefs=20080504.003.

¡¡Gracias!!
Reina
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2008-04-25 06:47 @324

Notapor explorer » 2008-05-05 12:10 @548

Sería interesante saber qué pasaba...

En cuanto a lo de leer el interior, no veo problema si, a) el fichero se puede leer, b) se sabe la posición de lo que quieres leer, c) el formato de lectura (texto, binario, fijo, etc.) d) el significado de lo que lees. Por ejemplo, está claro qué significa 20080504, pero, ¿qué significa 003?
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

Notapor Reina » 2008-05-06 04:51 @244

Buenos días.

La verdad es que no sé bien lo que pasaba, puede ser que la respuesta esté en los permisos que tenía sobre el archivo, pero ya está solucionado :)

Te detallo los apartados que me planteas:
a) el fichero se puede leer
b) no sé a qué te refieres con la posición que quiero leer
c) el formato de la lectura es en modo numérico
d) el significado de lo que quiero leer es 2008 -> año, 05 -> mes, 04 -> día, el 003 corresponde a la revisión del antivirus, pero eso no me interesa, ni tampoco el texto que viene antes de CurDefs=

Supongo que tendré que leer el archivo, coger la fecha, pasarla a formato ddmmaaaa y comparar, ¿no? pero no sé cómo se hace.

¡¡Gracias!!
Reina
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2008-04-25 06:47 @324

Notapor explorer » 2008-05-06 05:31 @271

Con lo de la posición me refiero a en qué lugar se encuentra lo que quieres leer dentro del fichero.

Lo del formato numérico nunca lo había oído. O es alfanumérico o binario.

Para leer el fichero tienes varios ejemplos en estos foros. Luego tienes que sacar la fecha, que lo puedes hacer con una expresión regular, y luego, para hacer la comparación, pues puedes usar la función timegm() o timelocal() del módulo Time::Local. De esa manera lo estarás pasando a número de segundos desde el Epoch, y podrás hacer la comparación como antes.
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

Notapor Reina » 2008-05-06 06:08 @297

¡¡Ah!! El contenido del fichero .dat es el siguiente:

Código: Seleccionar todo
[DefDates]
CurDefs=20080505.003
LastDefs=20080504.003


Así que a mi lo que me interesa es sólo el medio de la segunda línea.

Con respecto a lo del formato, tienes razón, es alfanumérico, que se me va un poco la cabeza :?

Gracias.
Reina
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2008-04-25 06:47 @324

Notapor explorer » 2008-05-06 07:26 @352

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl -l
use warnings;
use strict;

use Time::Local;

my $fecha_ultima_actualizacion;

open my $fh, q{<}, 'kk.txt' or die;
my $fichero;
{   # Leemos el fichero entero en una variable escalar
    # Para eso, indefinimos el valor de la variable $/
    # para que deje de leer por líneas
    local $/ = undef;
    $fichero = <$fh>;
}
close $fh;

if ( my ($anno, $mes, $dia) = $fichero =~ /CurDefs=(....)(..)(..)/ ) {
    $fecha_ultima_actualizacion = timelocal(0,0,0,$dia,$mes-1,$anno-1900);
}

print 'Diferencia entre la última fecha de actualización y la actual:';
print time() - $fecha_ultima_actualizacion, ' segundos';

 
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: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

AnteriorSiguiente

Volver a Básico

¿Quién está conectado?

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

cron