Ver Mensaje Individual
  #3 (permalink)  
Antiguo 20/04/2009, 01:29
user123
 
Fecha de Ingreso: abril-2003
Mensajes: 32
Antigüedad: 21 años, 11 meses
Puntos: 0
Respuesta: Buscar ocurrencias de palabras en varios ficheros

Si, algo parecido estoy haciendo. Abro los ficheros con las palabras que quiero buscar, las guardo todas en un array y voy recorriendo las carpetas a analizar recursivamente. Luego iré guardando las ocurrencias en una tabla y ya miraré como sacar el html de allí.

Sin embargo estoy teniendo un problema para recorrer recursivamente las carpetas.

Código:
#######################################################################
## procesaFicheros: Recibe un directorio
## Recorre el arbol de directorios recursivamente                    ##
#######################################################################
sub procesaFicheros(){  
  my $dir=shift;  
  my @sourcefiles;  
  if (opendir(DIRH,"$dir")){  
    @sourcefiles=readdir(DIRH);  
    closedir DIRH;  
    foreach (@sourcefiles){  

      next if ($_ eq "." || $_ eq "..");  
      #if (!($prueba =~ /test/)){  
        # PROCESAR FICHERO
        # print "$_\n";  
        &analizaFichero("$_");
      #}  
      procesaFicheros("$dir/$_") if (-d "$dir/$_" && ! -l "$dir/$_");  
    }  
  }else{  
    print "Error leyendo el directorio $dir\n";  
  }  
}  


#######################################################################
## analizaFichero: Recibe un fichero                                 ##
## Analiza un fichero buscando ocurrencias de palabras elegidas    ##
#######################################################################
sub analizaFichero{
  
  print "Entrando en analizaFichero para fichero ".$_."\n";
  my $counter = 0;
  if (!(-d "$_[0]")){  
    open FICHERO, $_[0] or die "No existe ".$fichero;
    while (<FICHERO>)
    {

      print $_;
      # Legal
      foreach $word (@legalwords_list){
        $counter++;
        if ($_=~/$word/){
          print $word." encontrada en línea ".$counter." en fichero ".$_[0]."\tCategoría: LEGAL";
        }
      }

    }
   close FICHERO;
  }
}
No me llega a leer todo, alguien sabe por qué puede ser?