[Perl] script q alparecer no funciona

Salvador Ortiz Garcia sog@msg.com.mx
26 Feb 2003 09:56:51 -0600


On Tue, 2003-02-25 at 10:47, Ing. Ricardo Cumberbatch L. (PANNet - URC)
wrote:
> Q tal lista,
> 
> Hice un script el cual busca palabras repetidas de dos archivos, es decir
> uso un archivo A  para sacar una palabra y buscarla en el otro archivo B 
> si no la encuentra pasar a la siguiente palabra en archivo A.
> 
> Pero no me funciona eso creo =-P
> Este es mi script
> 
> my $datainfo = '/gupl/GenerarUser';
> $count = 1;
> 
> open (LECTOR, "$datainfo/students_creados") || die "ERROR: NO Encuentro el 
> archivo 'students_creados'\n";
> 
> while (<LECTOR>) { #PRIMER WHILE
> 	chomp;
> 	@linea = split;
> 	$name = substr($linea[0], 0, 4);
> open (LECTOR, "$datainfo/passwd5") || die "ERROR: NO Encuentro el archivo
> 'students_creados1'\n";
> 
> while (<LECTOR>) { #SECOND WHILE
> 	chomp;
> 	@linea1 = split;
> $name1 = substr($linea1[0], 0, 4);
> if ($name1 =~ /$name/i){
> open (PRINTER, ">>$datainfo/repeticiones");
> print PRINTER "$linea1[0]   $count \n";
> $count+= 1;
> close (PRINTER);
> }
> }# SECOND WHILE
> }#PRIMER WHILE

Tu script tiene un problema fundamental:

El while externo comienza leyendo LECTOR de 'students_creados', pero tan
pronto lee la primera linea, reabre el mismo filehandler con 'password5'
que usa en el while interno. A la segunda interación del while externo,
de LECTOR ya se leyo todo!

Asi que por principio de cuentas no puedes usar un mismo filehandler
afuera y adentro.

Por otra parte, iterar muchas veces sobre el mismo archivo es un enorme
desperdicio. 

Construye en una sola pasada un hash de las palabras que puedes
encontrar y despues recorre el otro archivo buscando sobre tu hash.

Saludos.

-- 
Salvador Ortiz Garcia <sog@msg.com.mx>
Matías Software Group