• Publicidad

Búsqueda de fechas y comparación de archivos

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

Búsqueda de fechas y comparación de archivos

Notapor mvil1984 » 2009-07-20 10:59 @499

Buenas compañeros.

Actualmente necesito crear un script que haga lo siguiente: si se tiene la fecha de hoy, 20/07/2009, necesito que a ésta se le reste un día, entonces quedaría 19/07/2009 con hora 18:00 y luego que busque en un directorio X todos los archivos con una fecha de modificación del archivo mayor a la fecha 19/07/2009 a las 18:00 y me lo muestre o lo guarde en un archivo.

Para empezar tengo 10 días en esto, o sea, aprendiendo Perl, no soy muy hábil y no dispongo de mucho tiempo ya que tengo que hacer otras cosas, esto lo requiero para mi trabajo, porque es posible que de no hacerlo me regañen o algo parecido. Desde el 10/07/2009 estoy en esto.

He hecho varios scripts; sin embargo no consigo mi objeto.

Deseo que alguien me ayude con lo que pueda, porque parece que esto me llevará tiempo y es lo que menos tengo.

Adjunto todos los intentos que tengo para hacer diferentes cosas, la comparación de fechas es difícil, no encuentro la forma de hacerlo y he buscado por todo lado sin éxito. Esto debido a no consigo obtener el mismo formato para comparar dos fechas, la nueva fecha contra la de modificación.

Muchas gracias y espero me puedan ayudar CON TODO LO QUE PUEDAN, tampoco puedo acceder a Internet, el acceso es limitado en las páginas. Adjunto mis desarrollos para que hagan observaciones, comentarios y aportes ya que todas son bien recibidas.

Gracias


INTENTO DE FORMATO DE FECHAS
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. use File::stat;
  4. use Time::localtime;
  5.  
  6.  
  7.  
  8. $file='test.txt';
  9. $date_string = ctime(stat($file)->mtime);
  10.  
  11. $nueva = ($sec,$min,$hour,$mday,$mon,$year,$wday,
  12. $yday,$isdst)=localtime($date_string);
  13.  
  14.  
  15.  
  16.  
  17. print "$nueva\n";
  18.  
  19. #$Archivo = 'prueba.txt';
  20. #open(Archivo,">>$Archivo");
  21. #print Archivo "La fecha de modificacion del archivo $file es $date_string\n";
  22. #print Archivo "El resultado es $resultado";
  23. #print Archivo "La nueva fecha es $fecha_nueva";
  24.  
  25. #close (Archivo);
  26.  
  27.  
  28. INTENTO DE FORMATO DE FECHAS 2
  29.  
  30. # declaramos la variable $fecha
  31. #$fecha;
  32. #$fecha = `date`;
  33. #print "$fecha";
  34. #if($fecha =~ /mar\s+\d/)
  35. #{
  36. #       print("Estamos en Marzo, el mes de mi cumpleaños\n");
  37. #       }
  38. #else
  39. #{     
  40. #       print "Todavía queda para mi cumpleaños\n";
  41. #}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. #use Date::Calc qw( Decode_Date_US );
  3. ($sec,$min,$hour,$mday,$mon,$year,$wday,
  4. $yday,$isdst)=localtime(time);
  5.  
  6. $mdayAnt= $mday - 1;
  7. $hourAnt=18;
  8. $yearAnt = $year+1900;
  9. $year = $year+1900;
  10. $mon = $mon+1;
  11. $minAnt=00;
  12. $secAnt=00;
  13.  
  14. #$fecha = $yearAnt . "-0" . $mon . "-" . $mdayAnt . " " . $hourAnt . ":0" . $minAnt . ":0" . $secAnt;
  15.  
  16. $fechaAnt = $yearAnt . "-" . substr ("0" . $mon,1,2) . "-" . $mdayAnt . " " . $hourAnt . ":0" . $minAnt . ":0" . $secAnt;
  17.  
  18. $fecha = $year . "-" . substr ("0" . $mon,1,2) . "-" . $mday . " " . $hour . ":" . $min . ":" . $sec;
  19.  
  20. #printf "%4d-%02d-%02d %02d:%02d:%02d\n",
  21. #$year,$mon,$mday,$hour,$min,$sec;
  22.  
  23. printf "$fechaAnt\n";
  24.  
  25. printf "$fecha\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4



PROGRAMA PRINCIPAL ORIENTADO A LECTURA DEL ARCHIVO


Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use POSIX qw/ strftime /;
  2. use Getopt::Std;
  3.  
  4.  
  5. # -f: Patron de los archivos a validar.
  6. # -d: Indica el directorio a buscar archivos.
  7. # -n: Nombre Archivo Generar.
  8. # -s: Cadena-patron busqueda
  9. # -c: Cantidad de lineas a validar
  10.  
  11. getopts ("f:d:n:s:c:");
  12. if ((!defined($opt_f)) || (!defined($opt_d)) || (!defined($opt_n)) || (!defined($opt_s)) || (!defined($opt_c)) ) {
  13.   print "Programa que fechas en los archivos y determina si su fecha es correcta\n\n";
  14.   exit;
  15. }
  16.  
  17. print "--Inicio--\n";
  18.  
  19. #---Declaracion variables
  20. $sArchivos       =$opt_f;
  21. $sDirectorio     =$opt_d;
  22. $sNombreBase     =$opt_n;
  23. $sCadenaBusqueda =$opt_s;
  24. $iCantidadLineas =$opt_c;
  25.  
  26. print "Directorio:$sDirectorio\n";     
  27.  
  28. $sFecha=strftime( "%d-%m-%Y.%H.%M.%S", localtime(time) );
  29. $ArchivoResumen=$sNombreBase."+".$sFecha.".txt";
  30.  
  31. open(RESUMEN,">>$ArchivoResumen")|| die "Imposible abrir archivo: '$ArchivoResumen': $!";      
  32.                
  33.         print RESUMEN "Archivos\n\n";
  34.         print RESUMEN "=================================================\n";
  35.         print RESUMEN "Los archivos se encuentran localizados en la ruta: $sDirectorio\n";
  36.         print RESUMEN "=================================================\n";
  37.         print RESUMEN "El bat busca la fecha del batch dentro de los archivos y muestra su resultado\n\n";
  38.         print RESUMEN "=================================================\n";
  39.         print RESUMEN "Archivos\n\n";
  40.        
  41.                
  42.         #Cierra el archivo
  43.         close(RESUMEN);
  44.  
  45. #Separacion de los patrones
  46. @Patrones=split(/\\/,$sArchivos);
  47.  
  48. #Recorrido de los patrones
  49. foreach $Patron (@Patrones)
  50. {
  51.        
  52.         @Archivos=<$opt_d\\$Patron>;    
  53.         $Cantidad=$#Archivos + 1;
  54. print "===========================================================\n";
  55. print "Patron:$Patron\n";      
  56. print "Cantidad:$Cantidad\n";  
  57. print "@Archivos";
  58.  
  59. #Recorre el arreglo de archivos
  60.         foreach $Archivos (@Archivos)
  61.         {
  62.         $iContador=0;
  63.        
  64. print "cONT:$iContador\n";                     
  65.                 $sBandera ="FALSE";
  66.                        
  67.                 #Separa la ruta
  68.                 @NombreEspecifico=split(/\\/,$Archivos);
  69.                        
  70.                 #Extrae el nombre donde se registra el resumen archivo resumen
  71.                 #aqui va la vara del archivo
  72.                 $NombreArchivo=$NombreEspecifico[$#NombreEspecifico];
  73.                                        
  74. print "--------------------------------\n";            
  75. print "Archivo-Ruta:$Archivos\n";
  76. print "Archivo-Resumen:$ArchivoResumen\n";
  77.        
  78.         #Abre el archivo a scanear
  79.                 open(DETALLE,$Archivos)|| die "Imposible abrir archivo: '$Archivos': $!";
  80.                
  81.                 #Se recorre el archivo
  82.                 while (<DETALLE>)
  83.                 {      
  84.                                        
  85.                         if ($iContador == iCantidadLineas )
  86.                         {      
  87.                                 print "SALIO POR CONTADOR\n";  
  88.                                 break;
  89.                         }
  90.                        
  91.                        
  92.                         #$iContadorLinea++;
  93.                         $Cadena=$_;
  94.                        
  95. print "Cadena: $Cadena\n";                     
  96.                         #Validacion de la existencia del patron de busqueda                    
  97.                         if ($Cadena =~ /$sCadenaBusqueda/)     
  98.                         {
  99. print "SALIO PORQ ENCONTRO\n";                                                                                 
  100.                                 $sBandera ="TRUE";
  101.                                 break;
  102.                         }      
  103.  
  104. print "$sBandera\n";                   
  105. print "Contador: $iContador\n";
  106. print "Cantidad: $iCantidadLineas\n";          
  107. $iContador++;  
  108. #-----------------------------------------------------                         
  109.                
  110.                 }
  111.                        
  112.                 #Cierra el archivo a scanear
  113.                 close(DETALLE);
  114.                
  115.                 #----------------------------------------------------- 
  116.         $Mensaje="";
  117.        
  118.         if ($sBandera eq "TRUE")
  119.         {      
  120.                 $Mensaje="La fecha $sCadenaBusqueda SI fue encontrada\n";
  121.         }
  122.         if ($sBandera eq "FALSE")
  123.         {      
  124.                 $Mensaje="La fecha $sCadenaBusqueda NO fue encontrada\n";
  125.         }
  126.        
  127.         open(RESUMEN,">>$ArchivoResumen")|| die "Imposible abrir archivo: '$ArchivoResumen': $!";      
  128.                
  129.         print RESUMEN "$NombreArchivo, $Mensaje";
  130.                
  131.         #Cierra el archivo
  132.         close(RESUMEN);
  133. #-----------------------------------------------------         
  134.                
  135.         }
  136.  
  137.        
  138. }              
  139. print "--Salida--\n";
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
Última edición por mvil1984 el 2009-07-20 14:47 @657, editado 1 vez en total
mvil1984
Perlero nuevo
Perlero nuevo
 
Mensajes: 21
Registrado: 2009-07-17 15:10 @674

Publicidad

Re: Búsqueda de fechas y comparación de archivos

Notapor explorer » 2009-07-20 13:14 @593

Bienvenido a los foros de Perl en Español, mvil1984.

Creo que te has liado un poco... de hecho, lo que propones se puede hacer en una sola línea de Perl, ejecutada desde la misma línea de comandos, por ejemplo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
$ perl -le 'opendir DIR, "."; while($fichero = readdir DIR) { print $fichero if -f $fichero and -M _ < 1 }'
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Lo que hacemos es abrir el directorio (en este caso, el actual: "."), y para cada $fichero que hay ahí, miramos si es un fichero normal y corriente (-f) y su (_) fecha de modificación (-M) es inferior a un día (que es lo mismo que decir que la fecha de modificación es superior a la fecha de ayer a la misma hora). Si el $fichero cumple con las condiciones, lo sacamos a la salida estándar.

Y listo...

¿A qué es interesante aprender Perl?
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: Búsqueda de fechas y comparación de archivos

Notapor mvil1984 » 2009-07-20 14:24 @641

Buenas y muchas gracias por atenderme tan rápido, te planteo el problema.

Sí necesito un reporte porque estos reportes servirán para iniciar monitoreos. El punto es que necesito quitarle a la fecha actual un 1 día y setearlo a las 18:00, esto porque a partir de esa hora los archivos comienzan a llegar a un servidor,entonces traen fecha de modificación o creación, pero todas las veces hay archivos que se llaman igual y los nuevos que llegan remplazan a los viejos y su fecha de modificación cambia.

Luego, estos se procesan y todo lo demás pero yo necesito que me traiga de forma ordenada, es decir en un reporte para presentarlo a los jefes y que sirva como punto de validación y evidencia la llegada de los archivos, para que esto una vez que se corra, tipo 04:00 am se valide estos datos y el departamento inicie el monitoreo.

Además necesito que sea con parámetros porque todos las rutas cambian y debo crear esto para varias cosas, con diferentes rutas, tipos de archivos y otras cosas.

Espero me puedas ayudar y MUCHAS GRACIAS

Gracias.
mvil1984
Perlero nuevo
Perlero nuevo
 
Mensajes: 21
Registrado: 2009-07-17 15:10 @674

Re: Búsqueda de fechas y comparación de archivos

Notapor explorer » 2009-07-20 19:32 @855

Aquí tienes una forma de conseguir la fecha de ayer a las 18:00 (hora local):

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

print scalar localtime();

my @ayer = localtime( time - 86_400 );

use Time::Local;
my $time = timelocal(0,0,18,@ayer[3..5]);

print scalar localtime($time);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Como ves, al momento actual (time()) le restamos el número de segundos de un día, y con esa ya tenemos el día de @ayer. Ahora, con la ayuda del módulo Time::Local vemos qué tiempo debe ser en el día de ayer, a las 18:00.

Ahora, con $time, ya puedes hacer la comparación de los tiempos con los ficheros.

Por estos foros hay más hilos comentando el acceso a ficheros para ver sus tiempos de creación y modificación.
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: Búsqueda de fechas y comparación de archivos

Notapor mvil1984 » 2009-07-21 10:04 @461

Gracias,

Podrías pasarme los enlaces, porque los busco pero solo me sale el tema "http://perlenespanol.com/foro/encontrar-archivos-recientes-y-copiarlos-a-otra-carpeta-t4090.html?hilit=fecha%20de%20modificacion".

¿Cómo utilizo esto? porque necesito realizar la comparación contra la fecha de modificación de una archivos, que se realiza con la mtime. Para ello requiero que recorra todos los archivos de la ruta especifica. Lo que me doy cuenta es que Perl tiene muchas formas de archivar las cosas, algunas son más fáciles con funciones pero no las conozco todas. ¿Podrías darme una luz con esto, por favor?

Gracias
mvil1984
Perlero nuevo
Perlero nuevo
 
Mensajes: 21
Registrado: 2009-07-17 15:10 @674

Re: Búsqueda de fechas y comparación de archivos

Notapor explorer » 2009-07-21 10:51 @493

Para recorrer un directorio puedes usar las funciones opendir(), readdir() y closedir() como te puse en el ejemplo anterior. O usar '<>' si sabes el patrón de nombre de esos ficheros. Por ejemplo, '<*.dat>'.

Para obtener los datos de un fichero, usa la función stat(). Fíjate que se usa en los códigos del enlace que indicas. Es una forma de saber las fechas de creación, modificación y acceso de los ficheros. El tiempo es devuelto en formato UNIX (segundos desde el epoc), lo mismo que las funciones de tiempo comentadas en el código anterior, por lo que es fácil realizar las comparaciones.

También existen las funciones de comprobación '-X' que resuelven ciertas condiciones.

Ya tienes algo con lo que hacer algo de código...

Aunque con la línea Perl que te puse el otro día, sí que se resuelve el problema... solo había que añadirle la selección del directorio a analizar.
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: Búsqueda de fechas y comparación de archivos

Notapor mvil1984 » 2009-07-21 12:23 @558

Buenas de nuevo, tengo un problema con la identificación de la ruta del directorio, ¿puedes ayudarme?

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -l
  2. use strict;
  3. use warnings;
  4. use diagnostics;
  5.  
  6.  
  7. print "La fecha de hoy es: ",scalar localtime();
  8.  
  9. my @ayer = localtime( time - 86_400 );
  10.  
  11. use Time::Local;
  12. my $time = timelocal(0,0,18,@ayer[3..5]);
  13.  
  14. print "La fecha de ayer a las 6 es: ",scalar localtime($time);
  15.  
  16. my $filename='prueba.txt';
  17.  
  18. my $mode = (stat($filename))[9];
  19. print "La fecha de modificacion es: ",scalar localtime($mode),"\n";
  20.  
  21. my $dir = "C:\Documents and Settings\prueba\Desktop\m\*.txt";
  22.  
  23. opendir(DIR, $dir) || die "No se puede abrir el directorio $dir: $!";
  24. while (my $fichero = readdir(DIR))
  25. {
  26. if (-f $fichero and $mode > $time)
  27. {
  28. print "$fichero";
  29. }
  30. else
  31. {
  32. print "El fichero $fichero tiene una fecha menor a $time";     
  33. }
  34. }
  35. closedir DIR;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Última edición por mvil1984 el 2009-07-21 17:45 @781, editado 2 veces en total
mvil1984
Perlero nuevo
Perlero nuevo
 
Mensajes: 21
Registrado: 2009-07-17 15:10 @674

Re: Búsqueda de fechas y comparación de archivos

Notapor explorer » 2009-07-21 13:28 @603

Usa '/' en lugar de '\' en la indicación de los rutas de directorio.

Y no puedes indicar un comodín (*.txt) en la indicación de la ruta.

Si abres un directorio, no puedes usar comodines. Los comodines solo se pueden usar con glob() o con '<*.txt>'. Por ejemplo (no probado),
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my @ficheros = <C:/Documents and Settings/mvillegas/Desktop/m/*.txt>;
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: Búsqueda de fechas y comparación de archivos

Notapor mvil1984 » 2009-07-21 17:45 @781

Buenas, necesito agregarle más cosas a mi programa. Una es lo siguiente: si la bandera=procesado necesito que escriba los archivos debajo del título de donde dice "archivos procesados" en el archivo, pero si bandera=no procesado, necesito que escriba debajo de donde dice "Archivos no procesados" en el archivo. ¿Me ayudas?

La segunda cosa es que si el archivo se encuentra dentro de los "Archivos no procesados" necesito que tome el nombre del archivo y lo vaya a buscar a diferentes IP y varias rutas.

¿Cómo puedo hacer estas cosas? Ayúdame.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -l
  2. use strict;
  3. use warnings;
  4. use diagnostics;
  5.  
  6.  
  7. print "La fecha de hoy es: ",scalar localtime();
  8.  
  9. my @ayer = localtime( time - 86_400 );
  10.  
  11. use Time::Local;
  12. my $time = timelocal(0,0,18,@ayer[3..5]);
  13.  
  14. print "La fecha de ayer a las 6 es: ",scalar localtime($time);
  15.  
  16. my $dir = <C:/DATA/prueba/Reporte/Documentos>;
  17.  
  18. #my $mode = (stat($filename))[9];
  19. #print "La fecha de modificacion es: ",scalar localtime($mode),"\n";
  20.  
  21. my $ArchivoResumen="Informacion.txt";
  22.  
  23. my $Bandera="PROCESADO";
  24.  
  25.  
  26. open(RESUMEN,">>$ArchivoResumen")|| die "Imposible abrir archivo: '$ArchivoResumen': $!";
  27.  
  28. print RESUMEN"MONITOREO DE LAS ARCHIVOS\n";
  29. print RESUMEN"============================================================";
  30. print RESUMEN"ARCHIVOS PROCESADOS\n";
  31. print RESUMEN"===================================================";
  32. print RESUMEN"ARCHIVOS NO PROCESADOS\n";
  33. print RESUMEN"===================================================";
  34.  
  35. close(RESUMEN);
  36.  
  37. opendir(DIR, $dir) || die "No se puede abrir el directorio $dir: $!";
  38.  
  39.         while (my $fichero = readdir(DIR))
  40.         {
  41.                 my $mode = (stat($fichero))[9];
  42.                 if (-f $fichero and $mode > $time)
  43.                 {
  44.                        
  45.                         $Bandera= "PROCESADO";
  46.                 }
  47.                 else
  48.                 {
  49.                        
  50.                         $Bandera="NOPROCESADO";
  51.                 }
  52.                
  53.                         open(RESUMEN,">+$ArchivoResumen")|| die "Imposible abrir archivo: '$ArchivoResumen': $!";              
  54.                         if ($Bandera="PROCESADO")
  55.                         {                              
  56.                                
  57.                         print RESUMEN "$fichero ",scalar localtime($time);
  58.                         }      
  59.                         else
  60.                         {
  61.                         print RESUMEN "$fichero ",scalar localtime($time);     
  62.                         }
  63.                        
  64.                         close(RESUMEN);        
  65.        
  66.         }
  67. closedir DIR;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
mvil1984
Perlero nuevo
Perlero nuevo
 
Mensajes: 21
Registrado: 2009-07-17 15:10 @674

Re: Búsqueda de fechas y comparación de archivos

Notapor explorer » 2009-07-21 18:28 @811

Los ficheros de tipo texto como el que estás abriendo en modo añadir, no funcionan como tu pretendes, permitiéndote "insertar" líneas donde te plazca.

El uso es mucho más primitivo: o creas un fichero, o escribes en un fichero (al principio) o añades al final o lo borras o sobre escribes contenido. Pero no existe el concepto de "insertar" información entre líneas.

Por eso, no te va a funcionar el escribir información debajo de cada uno de esos titulares.

La solución es obtener primero lo que quieres mostrar, y a continuación, sacarlo en el orden en que quieres grabarlo.

En tu caso es: analiza todos los ficheros y guarda los resultados en una variable intermedia, en dos arreglos. Luego, cuando hayas terminado con todos los ficheros, vuelca los resultados en orden.

Algo así (no probado):
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -l
  2. #
  3. # Discriminador de ficheros. JF 2009/07
  4. #
  5. # Este programa analiza los ficheros del directorio indicado, sacando un informe
  6. # separando los que han sido procesados de los que no. Un fichero se dice que
  7. # está procesado si su tiempo de modificación es inferior a las 18:00 horas local
  8. # del día anterior al de ejecución de este programa.
  9. #
  10. use strict;
  11. use warnings;
  12. use diagnostics;
  13.  
  14. use Time::Local;
  15.  
  16. ## Constantes
  17. my $dir            = 'C:/DATA/prueba/Reporte/Documentos';
  18. my $ArchivoResumen = 'Informacion.txt';
  19.  
  20.  
  21. ## Variables
  22. my @procesados;
  23. my @no_procesados;
  24.  
  25.  
  26. ## Cálculo del tiempo
  27. print "La fecha de hoy es: ", scalar localtime();
  28.  
  29. my @ayer = localtime( time - 86_400 );
  30. my $time = timelocal(0,0,18,@ayer[3..5]);
  31.  
  32. print "La fecha de ayer a las 18:00 es: ",scalar localtime($time);
  33.  
  34.  
  35. ## Análisis de los ficheros
  36. opendir (DIR, $dir) or die "No se puede abrir el directorio $dir: $!\n";
  37. while (my $fichero = readdir(DIR)) {
  38.     next if ! -f $fichero;           # Saltamos al siguiente si no es un fichero normal
  39.  
  40.     my $mtime = (stat("$dir/$fichero"))[9]; # Tiempo de modificación
  41.  
  42.     my $texto = "$fichero " . scalar localtime($time);
  43.  
  44.     if ($mtime > $time) {            # Según el $mtime, lo guardamos en un sitio u otro
  45.         push @procesados,    $texto;
  46.     }
  47.     else {
  48.         push @no_procesados, $texto;
  49.     }
  50. }
  51. closedir DIR;
  52.  
  53.  
  54. ## Salida
  55. open (RESUMEN), ">>$ArchivoResumen" or die "Imposible abrir archivo: '$ArchivoResumen': $!\n";
  56. print RESUMEN "MONITOREO DE LAS ARCHIVOS\n";
  57. print RESUMEN '=' x 60;
  58. print RESUMEN "ARCHIVOS PROCESADOS\n";
  59. print RESUMEN "=" x 40;
  60. print RESUMEN join("\n", @procesados), "\n";
  61. print RESUMEN "ARCHIVOS NO PROCESADOS\n";
  62. print RESUMEN "=" x 40;
  63. print RESUMEN join("\n", @no_procesados), "\n";
  64. close(RESUMEN);
  65.  
  66. ## Fin
  67. __END__
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Actualización: Hubo un error en la línea del stat(): había que pasarle la ruta completa.
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

Siguiente

Volver a Básico

¿Quién está conectado?

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