• Publicidad

Ir directamente al número de línea de un archivo

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

Ir directamente al número de línea de un archivo

Notapor lucas » 2009-12-09 19:27 @852

Buenas...

Quiero molestar con una pregunta =)

Si tengo un archivo muy grande, digamos de 4GB a 5GB (o más). ¿Cómo puedo acceder a un número de línea específico?

Averiguando por ahí, la variable $. es la que cuenta el número de línea actual. Pero si quiero ir a uno específico, por ejemplo, a la línea 40000, ¿cómo puedo hacerlo sin tener recorrer todo el principio del archivo?
lucas
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2009-08-19 09:42 @446

Publicidad

Re: Ir directamente al número de línea de un archivo

Notapor explorer » 2009-12-09 19:47 @866

Si las líneas de ese fichero son de longitud distinta, no puedes.

Si las líneas son todas de igual longitud, solo necesitas un poco de matemáticas.

Si las líneas son de una longitud aproximada a una cierta cantidad, también podrías llegar a acercarte a la línea que quieres, pero solo eso, de forma aproximada.

Una forma de resolver este problema (sin tener que leer todo el fichero) es creando un fichero de índices: abres el fichero, y por cada línea, guardas la posición del marcador de lectura del fichero (perldoc -f tell()). La primera línea tendrá una posición de lectura 0, la segunda será la posición (tell()) donde acabó la lectura de la primera línea, etc.

Luego, si quieres acceder a la línea 40.000, solo tienes que leer el desplazamiento que hay en la posición 40.000 del fichero de índices. Te posiciones con la ayuda de seek() y ya puedes leer la línea.

Aunque... esto es más cómodo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use Tie::File;
tie my @array, 'Tie::File', 'fichero_enorme.log' or die "ERROR: $!\n";
print $array[39_999];
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Con Tie::File, el fichero NO es leído entero, con lo que se puede usar para acceder a ficheros enormes, a costa de ser unos milisegundos más lento que la solución del indexado. Bueno... te ahorras crear el índice ;)

P.D. La primera línea es la 0.
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: Ir directamente al número de línea de un archivo

Notapor lucas » 2009-12-10 00:30 @062

Gracias señor. Muy amable.
lucas
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2009-08-19 09:42 @446


Volver a Básico

¿Quién está conectado?

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

cron