Sab May 03, 2008 10:54 am
|
 |
jbgae
Perlero Nuevo

|
Registrado: 02 May 2008
Mensajes: 4
|
|
| error: readline() on unopened filehandle FICHERO |
|
|
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. |
|
|
|

Sab May 03, 2008 11:11 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4142
Ubicación: Valladolid, España
|
|
|
|
|
¡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 |
|

Sab May 03, 2008 11:36 am
|
 |
jbgae
Perlero Nuevo

|
Registrado: 02 May 2008
Mensajes: 4
|
|
|
|
|
| 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. |
|
Powered by phpBB © 2001, 2005 phpBB Group
|