Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Fechas en perl
Ir a página Anterior  1, 2
 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico
Mensaje Lun May 05, 2008 11:10 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4086
Ubicación: Valladolid, España
Responder citando

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?
Mensaje Mar May 06, 2008 3:51 am
Reina
Perlero Nuevo
Perlero Nuevo
Registrado: 25 Abr 2008
Mensajes: 18
Responder citando

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 Smile

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!!
Mensaje Mar May 06, 2008 4:31 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4086
Ubicación: Valladolid, España
Responder citando

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.
Mensaje Mar May 06, 2008 5:08 am
Reina
Perlero Nuevo
Perlero Nuevo
Registrado: 25 Abr 2008
Mensajes: 18
Responder citando

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

Código:
[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 Confused

Gracias.
Mensaje Mar May 06, 2008 6:26 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4086
Ubicación: Valladolid, España
Responder citando

Perl:
#!/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';

Mensaje Mar May 06, 2008 7:10 am
Reina
Perlero Nuevo
Perlero Nuevo
Registrado: 25 Abr 2008
Mensajes: 18
Responder citando

Esa manera ya la había intentado, pero el problema es que mi archivo no es un .txt, sino un .dat y así no me lo abre, me da error...

Estaba pensando abrirlo en plan open(FICHERO, "dinfo.dat") pero no sé bien cómo hacerlo. ¿Existe alguna otra forma?

¡¡Gracias!!
Mensaje Mar May 06, 2008 7:18 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4086
Ubicación: Valladolid, España
Responder citando

Me da igual que sea .txt o .dat. Tu has dicho antes que es un fichero alfanumérico, así que lo leo de esa manera. Sólo tienes que cambiar mi 'kk.txt' por tu 'dinfo.dat'.

Y cuando te salga un mensaje de error, ponlo aquí, porque sino, no sabremos cómo ayudarte.
Mensaje Mar May 06, 2008 7:46 am
Reina
Perlero Nuevo
Perlero Nuevo
Registrado: 25 Abr 2008
Mensajes: 18
Responder citando

Perdona por darte tanto la lata, tienes toda la razón, lo que me ha pasado es que tenía que poner la ruta completa.

Funciona a la perfección.

Gracias por todo.
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico Todas las horas son GMT - 6 Horas
Ir a página Anterior  1, 2
Página 2 de 2



Powered by phpBB © 2001, 2005 phpBB Group