• Publicidad

Condicional sobre la fecha de un fichero

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

Condicional sobre la fecha de un fichero

Notapor tutoki » 2012-11-20 11:30 @520

Hola.

Estoy trabajándome un gestor de archivos y me he estancado en una condición donde se debe de valorar si un fichero es X días más antiguo de la fecha actual.

¿Alguna pista?

¿Y si el directorio es vacío?

SALUD...
tutoki
Perlero nuevo
Perlero nuevo
 
Mensajes: 58
Registrado: 2012-04-15 01:53 @120

Publicidad

Re: Condicional sobre la fecha de un fichero

Notapor MARKO » 2012-11-20 16:40 @736

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use strict;
  2. use warnings;
  3. use Date::Calc qw(:all);
  4.  
  5. my %meses = (
  6.         Jan => 1,
  7.         Feb => 2,
  8.         Mar => 3,
  9.         Apr => 4,
  10.         May => 5,
  11.         Jun => 6,
  12.         Jul => 7,
  13.         Aug => 8,
  14.         Sep => 9,
  15.         Oct => 10,
  16.         Nov => 11,
  17.         Dec => 12
  18. );
  19. my $filename = 'C:\dIRECCION\DEL\ARCHIVO\DESEADO.txt';
  20.  
  21. my $creacion = (stat($filename))[10]; #tiempo en segundos desde 1 de enero de 1970
  22.  
  23. $creacion = scalar localtime($creacion); # Tue Jun 19 12:32:08 2012
  24.  
  25. my @fecha = split ('\s',$creacion);
  26.  
  27. #fecha de hoy
  28.     my($anio1,$mes1,$dia1) = Today([my $gmt]);
  29.  
  30. # Delta_Days completos
  31.         my $Dd = Delta_Days($fecha[4],$meses{$fecha[1]},$fecha[2],$anio1,$mes1,$dia1); #aquí se guarda la diferencia de días
  32.                                            
  33.  print "hay $Dd Dias entre las dos fechas\n";
  34.  
  35.  # Si lo queres más exacto podes usar  Delta_YMDHMS
  36.       # my($D_y,$D_m,$D_d, $Dh,$Dm,$Ds) =
  37.       # Delta_YMDHMS($year1,$month1,$day1, $hour1,$min1,$sec1,
  38.                    # $year2,$month2,$day2, $hour2,$min2,$sec2);
  39.  
  40. if ($Dd > valor numerico ){
  41.  
  42.  
  43.      # lo que queres hacer
  44.  
  45.  
  46. }
  47.  
  48.  
  49.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


éxitos.
MARKO
Perlero nuevo
Perlero nuevo
 
Mensajes: 86
Registrado: 2012-01-10 22:34 @982

Re: Condicional sobre la fecha de un fichero

Notapor explorer » 2012-11-20 20:38 @901

Otra opción es usar el operador '-M', que devuelve un número en punto flotante, con la cantidad, en días, de la diferencia entre la última fecha de modificación del archivo que le pasamos como argumento, y el momento de la ejecución del programa (que casi siempre, es "ahora mismo", con lo que obtenemos, realmente, la "edad" del archivo).

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $archivo = "miarchivoavigilar.txt";
  2.  
  3. my $dias = -M $archivo;
  4.  
  5. print "Días que han pasado: $dias\n";
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

Re: Condicional sobre la fecha de un fichero

Notapor tutoki » 2012-11-22 17:28 @770

Gracias MARKO, muy completo.

explorer, ¿y ese operador? mira que he leído tutoriales y documentos y nunca había leído u oído hablar de él (no he mirado bien, seguro). Supongo que hay más tipos de operadores de este estilo ¿Tiene algún nombre especial?


SALUD...
tutoki
Perlero nuevo
Perlero nuevo
 
Mensajes: 58
Registrado: 2012-04-15 01:53 @120

Re: Condicional sobre la fecha de un fichero

Notapor explorer » 2012-11-23 06:48 @325

Ese operador pertenece a la familia de operadores llamados "Test de archivo".

Los encontrarás explicados al principio de perlfunc. En tu ordenador, ejecuta perldoc -f -X También lo tienes en la web. Y ya le tenemos traducido en PerlDoc-ES (pero no revisado):
-X IDENTIFICADOR_ARCHIVO
-X EXPR
-X IDENTIFICADOR_DIR
-X Un test de archivo, donde X es una de las letras listadas abajo. Este operador unario toma un argumento, bien sea un nombre de archivo o un identificador de archivo o de directorio, y comprueba si el archivo asociado para ver si algo sobre él es cierto. Si el argumento se omite, se prueba $_, excepto para "-t", que prueba STDIN. Mientras no se diga lo contrario, se devuelve 1 para verdadero y '' para falso, o el valor indefinido si el archivo no existe. A pesar de los nombres graciosos, la precedencia es la misma que cualquier otro operador unario con nombre. El operador puede ser cualquiera de:

-r Archivo es legible por el uid/gid en vigor.
-w Archivo es escribible por el uid/gid en vigor.
-x Archivo es ejecutable por el uid/gid en vigor.
-o Archivo es propiedad del uid en vigor.

-R Archivo es legible por el uid/gid real.
-W Archivo es escribible por el uid/gid real.
-X Archivo es ejecutable por el uid/gid real.
-O Archivo es propiedad del uid real.

-e Archivo existe.
-z Archivo tiene tamaño cero (está vacío).
-s Archivo no tiene tamaño cero (devuelve el tamaño en bytes).

-f Archivo es un archivo normal.
-d Archivo es un directorio.
-l Archivo es un enlace simbólico.
-p Archivo es una tubería con nombre (FIFO), o el identificador de archivo es una tubería.
-S Archivo es un socket.
-b Archivo es un archivo especial por bloques.
-c Archivo es un archivo especial de caracteres.
-t El identificador está abierto a una tty.

-u Archivo tiene puesto el bit setuid.
-g Archivo tiene puesto el bit setgid.
-k Archivo tiene puesto el bit sticky.

-T Archivo es un archivo de texto ASCII (por una suposición heurística).
-B archivo es un archivo "binario" (opuesto de -T).

-M Tiempo de arranque del script menos el tiempo de modificación del archivo, en días.
-A Lo mismo, para el tiempo de acceso.
-C Lo mismo, para el cambio de la fecha del inodo (en Unix, puede diferir en otras plataformas)
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


Volver a Básico

¿Quién está conectado?

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

cron