[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