[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