[Perl] leer lineas aleatorias de un archivo.
Salvador Ortiz Garcia
sog en msg.com.mx
Mar Mayo 16 08:34:01 CDT 2006
On Tue, 2006-05-16 at 12:41 +0200, Alexandros googlemail wrote:
> Propicios dias;
>
> Necesito sacar un grupo de lineas aleatorio desde un archivo; En
> principio tengo todo el archivo linea por linea metido en un array y he
> pensado en usar la funcion rand() pero no se como hacerlo. ¿quizas
> mezclando sort() y rand()?
Si tienes el archivo digamos en @file entonces
$file[int(rand(@file))]
será alguna de esas lineas (Uso el hecho de que @file en contexto
escalar es la cardinalidad del arreglo)
Si necesitas sacar, digamos 10 lineas al azar de 'archivo.txt' a @some:
open(FILE,'<archivo.txt') or die "No puedo abrir bla bla bla: $!\n";
@file = <FILE>;
my @some = ();
push @some, $file[int rand @file] for(1..10);
O mas rápida, perliana y obscura:
...
my @some = @file[map int rand @file, 1..10];
Únicamente tienes que tener cuidado si el archivo es MUY grande, en cuyo
caso tenerlo todo en memoria puede no ser buena idea.
Saludos.
--
Salvador Ortiz Garcia <sog en msg.com.mx>
Matías Software Group
Más información sobre la lista de distribución Perl