• Publicidad

Lectura de un archivo que crece...

Así que programas sin strict y las expresiones regulares son otro modo de hablar. Aquí encontrarás respuestas de nivel avanzado, no recomendable para los débiles de corazón.

Lectura de un archivo que crece...

Notapor reggiebcn » 2005-10-27 11:56 @538

Hola, desearia poder leer un archivo que está en continuo crecimiento, basicamente un log, y que cada vez me lo lea desde el último punto donde lo leí.
Creo que existe el módulo File::Tail para ello, aunque no se bien bien como funciona, pero vi una vez un comando en un script hecho en Perl que servía para eso.

Alguien me podria echar una mano??

Gracias de anetmano ^_^
reggiebcn
Perlero nuevo
Perlero nuevo
 
Mensajes: 14
Registrado: 2005-10-27 11:53 @537

Publicidad

File::Tail

Notapor explorer39 » 2005-10-27 13:01 @584

Un ejemplo:
Código: Seleccionar todo
use File::Tail;
use strict;

my $name = '/var/log/mail.log';
my $file = File::Tail->new(name=>$name,tail=>50);
my $cada = 20;
my $line;

while ( defined( $line = $file->read ))
{
    # Aqui trabajamos con la linea $line
}


Documentación del File::Tail.
Este módulo hace "polling" sobre el fichero, es decir, está mirando constantemente, cada x segundos, si el fichero ha crecido.
Otra opción es el nuevo módulo File::Tail::FAM que es llamado por el kernel cuando el fichero cambia. De esa manera tu programa no consume ciclos de procesador inútiles.
explorer39
 

Notapor reggiebcn » 2005-10-28 10:11 @466

Uhm....pero creo que a mi eso no me sirve.
Por ejemplo, yo ejecuto mi script hoy y me lee el fichero log. VUelvo a ejectuar el script dentro de 3 dias, y solo quiero que me lea lo que se ha añadido en el log.
Con File::Tail entonces no puedo hacerlo, no?
reggiebcn
Perlero nuevo
Perlero nuevo
 
Mensajes: 14
Registrado: 2005-10-27 11:53 @537

Notapor monoswim » 2005-10-28 10:36 @483

Y si guardás la pocisión del EOF en un archivo txt o el nro de línea y luego empezás a leer desde ahí ???

Saludos
MonoSwim
Perl Programming Language
Avatar de Usuario
monoswim
Perlero nuevo
Perlero nuevo
 
Mensajes: 452
Registrado: 2003-11-18 16:13 @717
Ubicación: Buenos Aires

Notapor reggiebcn » 2005-10-28 10:42 @487

Y como puedo guardar el EOF o numero de linea?
reggiebcn
Perlero nuevo
Perlero nuevo
 
Mensajes: 14
Registrado: 2005-10-27 11:53 @537

Notapor explorer39 » 2005-10-28 11:56 @539

El tamaño del fichero: -s $fichero.
explorer39
 

Notapor reggiebcn » 2005-10-28 11:58 @540

i como uso el tamaño del fichero?
reggiebcn
Perlero nuevo
Perlero nuevo
 
Mensajes: 14
Registrado: 2005-10-27 11:53 @537

Notapor explorer39 » 2005-10-28 12:33 @565

Primero procesas el fichero una vez, todas las líneas. Luego, almacenas su tamaño (-s) en algún lugar persistente (otro fichero, una base de datos, etc. etc.). En la próxima ejecución de tu script, lo primero que harás será un seek según ese valor. De esa forma, el puntero de lectura pasará al siguiente carácter no leído.
Puedes hacer más comprobaciones, como que el fichero no haya crecido hasta entonces, por ejemplo.
Si el fichero tiene alguna estructura especial, entonces no te hace falta hacer nada de esto.
Por ejemplo. Si es un fichero de un registro de actividad, que está dividido cada línea en campos y uno de ellos es la fecha, pues entonces sólo tienes que recordar esa fecha para la próxima vez que lo vuelvas a leer.
explorer39
 


Volver a Avanzado

¿Quién está conectado?

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