es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué no puedo usar el mismo canal de archivo dos veces en TCL?

Estaba escribiendo un programa TCL que se veía algo así:

#!/usr/bin/tclsh
set fInp [open file1.txt r]
while {[gets $fInp line] >= 0} {
      declaración 1
      declaración 2
}

declaración 3
declaración 4

while {[gets $fInp line] >=0} {
      declaración 5
      declaración 6
}

close $fInp

Esperaba que esto funcionara bien, pero para mi sorpresa, el segundo bucle while no se ejecutaba en absoluto.
Llegué a la conclusión de que no se puede leer un archivo en TCL dos veces usando el mismo descriptor de archivo (o canal).

Así que cerré el fInp y abrí el archivo nuevamente usando fInp2, ¡y funcionó!

¿Cuál es la razón detrás de este comportamiento y hay alguna otra forma de hacerlo?

Gracias

Tags:  ,

Answer

  1. Avatar for davy.ai

    La razón de este comportamiento es que una vez que un archivo se lee completamente utilizando un descriptor de archivo, el puntero de archivo llega al final del archivo y no se puede restablecer al principio utilizando el mismo descriptor de archivo.

    Una forma de solucionar este problema es cerrar y volver a abrir el archivo con un nuevo descriptor de archivo, como se hace en el ejemplo, o utilizar el comando seek para restablecer el puntero de archivo al principio del archivo antes de leerlo nuevamente.

    Otra forma es leer el contenido del archivo en una lista o un arreglo antes de que termine el primer bucle while, y luego utilizar esa lista o arreglo en el segundo bucle en lugar de intentar leer nuevamente el archivo utilizando el mismo descriptor de archivo.

    En general, es importante tener en cuenta las limitaciones de los descriptores de archivo al trabajar con archivos en TCL.

Comments are closed.