Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

error: readline() on unopened filehandle FICHERO

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico
Mensaje Sab May 03, 2008 10:54 am
jbgae
Perlero Nuevo
Perlero Nuevo
Registrado: 02 May 2008
Mensajes: 4
error: readline() on unopened filehandle FICHERO Responder citando

Hola tengo un problema con esta función:

Perl:
sub OpcionD{
       
        my ($hora, $fichero, $directorio) = ($_[0], $_[1],$_[2]);
       
        opendir (DIR, $directorio) or die "Error: no puedo abrir directorio de planificacion $directorio\n";
        my @contenido_directorio = readdir (DIR)
        closedir (DIR);

        if (-s $fichero ){
                my @contenido_fichero = <FICHERO># problema
                open (FICHERO, "+<fichero");

                #Obtener la ultima id
                foreach $linea (@contenidofichero){
                        @campos = split / /, $linea;
                        $id = $campos[0];
                       
                }

                $numero_lineas = @contenidofichero;
                $encontrado = 0;
               
                foreach my $fichero_directorio (@contenido_directorio){
            my $direccion_absoluta$directorio ."/". $fichero_directorio;
                        foreach my $linea (@contenido_fichero){
                                @campos = split / /, $linea;
                                my $orden = chomp($campos[-1]);
                                $id = $campos[1];
                                if($direccion_absoluta ne $orden){
                                        if(-r $direccion_absoluta && -x $direccion_absoluta && !(-d $direccion_absoluta)){
                                                $encontrado++;
                                                if ($encontrado == $numero_lineas){
                                                        $id ++;
                                                  my $min = 0;
                                                  my $dia = "*";
                                                  my $mes = "*";
                                                  my $dia_semana = "*";
               
                                                          print FICHERO "$id $min $hora $dia $mes $dia_semana                                         $direccion_absoluta\n"
                 
                  }
                                        }
                                }
                        }              
        }       }
       
        else{
                open (FICHERO, ">$fichero");
                
              foreach my $fichero_directorio (@contenido_directorio){
            my $direccion_absoluta$directorio ."/". $fichero_directorio;
            if(-r $direccion_absoluta && -x $direccion_absoluta && !(-d $direccion_absoluta)){
                                $id ++;
                                my $min = 0;
                                my $dia = "*";
                                my $mes = "*";
                                my $dia_semana = "*";
               
                                print FICHERO "$id $min $hora $dia $mes $dia_semana $direccion_absoluta \n"
               
            }
     
              }
        }
        close (FICHERO);
}


Mi problema es que cuando ejecuto la función por primera vez no me da ningún problema, pero cuando la vuelvo a ejecutar me genera ese error:

Código:
readline() on unopened filehandle FICHERO
y no sé por qué se produce. Espero que alguien me pueda ayudar. Muchas gracias.
Mensaje Sab May 03, 2008 11:11 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4142
Ubicación: Valladolid, España
Responder citando

¡Huy, qué lío!

Estás leyendo el <FICHERO> que ha sido cerrado antes (hay un close() al final) y luego haces un open(). Da la sensación de que no es el orden correcto. Prueba a ponerlo al revés. El error dice que en un momento dado el manipulador FICHERO no ha sido abierto.

Lo normal es poner un close() antes de hacer un open(). O, como tienes en este caso, un open() en modo lectura/escritura, primero haces el open(), luego lo lees y después ya puedes escribir en él. Y cerrarlo con un close() al final.

P.D. Es recomendable seguir el hilo anterior y no abrir nuevos hilos, si el problema se refiere al mismo programa.

Ultima edición por explorer el Lun Sep 01, 2008 4:08 pm, editado 1 vez
Mensaje Sab May 03, 2008 11:36 am
jbgae
Perlero Nuevo
Perlero Nuevo
Registrado: 02 May 2008
Mensajes: 4
Responder citando

Muchas gracias de nuevo, la verdad que ha sido un despiste pero por más que lo tenía delante no era capaz de ver el fallo.
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group