Informatica Grafica
C A P I T U L O8 Ficheros en Tcl

El sistema de ficheros que incorpora Tcl deriva directamente del sistema operativo UNIX; por ello alguno de sus comandos pueden no funcionar bajo Windows, o funcionarán con limitaciones. A pesar de ello, la mayoría de estos comandos son utilizables bajo Windows sin ninguna limitación.

Es recomendable, antes de emplear alguno de estos comandos, comprobar su funcionamiento en la consola de Tk.


El comando file

El comando file provee una serie de métodos para chequear el estado de los ficheros. En la siguiente lista se exponen algunos de ellos, cuyo funcionamiento ha sido comprobado bajo Windows.

Tabla 8-1. Opciones del comando file.

file executable nombre

Devuelve 1 si es nombre tiene permiso de ejecución.

file exists nombre

Devuelve 1 si existe nombre.

file extension nombre

Devuelve la extensión del fichero.

file isdirectory nombre

Devuelve 1 si nombre es un directorio.

file isfile nombre

Devuelve 1 si nombre es un fichero.

file size nombre

Devuelve el número de bytes de nombre.

file tail nombre

Devuelve todos los caracteres después del último.

file type nombre

Devuelve el tipo: file. directory characterSpecial, blockSpecial, fifo, link o socket.



Entrada/Salida

La siguiente tabla es una lista de comandos asociados a la entrada y salida de datos en ficheros.

Tabla 8-2. Comandos Tcl para el acceso a ficheros.

open fichero ?acceso? ?permiso?

Abre un fichero.

puts ?-nonewline? ?fichero? cadena

Escribe una cadena en un fichero.

gets fichero ?nombre_var?

Lee una línea.

read ?nonewline? fichero ?num_bytes

Lee un número de bytes.

tell fichero

Informa de la posición del cursor en el fichero.

seek fichero offset ?origen?

Coloca el cursor en una posición determinada dentro del fichero.

eof fichero

Indica el fin del fichero.

close fichero

Cierra un fichero abierto para I/O.



Abrir ficheros para I/O

El comando open abre un fichero para entrada/salida de datos (I/O). Su sintaxis es la siguiente:

open fichero ?acceso? ?permisos?

El primer argumento es el nombre del fichero a abrir; el segundo es el acceso a dicho fichero. Este acceso puede tomar dos formas: una secuencia corta de caracteres (similar a la usada por el comando fopen de C/C++) o una lista de flags POSIX. En la tablas 8-3 y 8-4 pueden verse estos valores. El tercero es el valor usado por los bits de permiso cuando se crea un nuevo fichero. este permiso por defecto, es 0666.

Ejemplo 8-1.
set file [open c:/tcl/lib/pepe.txt w 0600]
puts $file "esto es una prueba"
close $file

Tabla 8-3. Tipos de accesos para el argumento acceso.

r

Abre para lectura. el fichero debe existir.

r+

Abre para lectura y escritura. el fichero debe existir.

w

Abre para escritura. Lo crea si no existe. Si existe lo sobreescribe.

w+

Abre para lectura o escritura. Lo crea si no existe. Si existe lo sobreescribe.

a

Abre para escritura. El fichero debe existir. Los datos son añadidos.

a+

Abre para lectura y escritura. El fiichero debe existir. Los datos son añadidos.



Tabla 8-4. Flags POSIX para el argumento acceso (los más habituales).

RDONLY

Lo abre para lectura.

WRONLY

Lo abre para escritura.

RDWR

Lo abre para escritura y lectura.

APPEND

Lo abre para añadir.

CREAT

Crea el fichero si no existe.

TRUNC

Trunca el fichero si existe (lo sobreescribe).

Ejemplo 8-2.
set file [open c:/tcl/lib/pepe.txt { RDWR CREAT } ]
puts $file "esto es una prueba"
close $file

Este ejemplo abre el fichero para lectura y escritura, creándolo si es necesario y no truncándolo.


Lectura y escritura

Una vez abierto el fichero, se puede proceder a las operaciones de lectura y escritura. Para ello se cuenta con una serie de comandos que ya fueron presentados en la tabla 8-2: Por otro lado, al igual que en otros lenguajes, existen una serie de ficheros standard del sistema como stdin, stdou o stderr, que pueden ser usados para las operaciones de entrada y salida.

Puts y gets

El comando puts escribe una cadena en una nueva línea del fichero de salida. Toma un argumento denominado -nonewline, que evita que aparezca un carácter de fin de línea al final de la cadena.

Ejemplo 8-3.
puts -nonewline "Esto y lo siguiente iran en la misma linea"

El comando gets lee una línea del fichero especificado. Puede ser usado con el comando eof para determinar si se llegó al final del fichero. Dos formas de leer un fichero pueden ser estas:

Ejemplo 8-4.
while { [gets $file linea ] >= 0} {
# Se procesa la variable "linea"
}
close $file

En este caso, la línea leída por el comando gets se guarda en la variable linea.

Otra forma sería esta:

Ejemplo 8-5.
set linea [gets $file]
while { $linea != "" } {
# Se procesa la variable "linea"
set linea [gets $file]
}
close $file

read

El comando read se utiliza para leer bloques de datos, que puede ser más eficiente que leer líneas. Puede tener dos argumentos diferentes, el número de bytes a leer, o -nonewline, pero no los dos a la vez.

Acceso aleatorio

Los comandos tell y seek son usados para el acceso aleatorio. Cada fichero abierto posee una variable apuntando a una posición determinada de sus datos, posición donde se va a leer o escribir datos; es el llamado seek offset. Cada operación de lectura o escritura actualiza este seek offset con el número de bytes leidos o escritos. La posición actual del offset es devuelta por el comando tell. El comando seek es usado para desplazar este offset a la posición deseada. Esta cantidad a desplazar puede ser tanto positiva como negativa, medida desde un origen que puede ser start (desde el inicio), current (desde la posición actual), o end (desde el final del fichero).

close

el comando close permite cerrar un fichero que hubiera sido abierto para operaciones de lectura o escritura. Si se olvida cerrar un fichero, éste puede ser cerrado cuando el proceso termine. Pero si se está corriendo un programa de gran tamaño, pueden consumirse muchos recursos si se mantiene abiertos ficheros innecesariamente.

cd y pwd

Estos dos comandos son dos instrucciones propias del sistema operativo UNIX, pero heredadas, como otras muchas cosas, por el sistema de ficheros de Tcl. El comando cd permite la navegación por los diferentes directorios (carpetas en Windows 95) del sistema. El comando pwd devuelve el path completo del directorio donde se encuentre el intérprete, si anteriormente no se ha desplazado con el copmando cd. Es importante darse cuenta de que el comando pwd no devuelve el path de la aplicación, sino el del intérprte que no tienen porqué coincidir.

Filtrando nombres con glob

El comando glob permite el conocer los ficheros y subdirectorios de un directorio, mediante la utilización de los caracteres comodines "*" e "?". Su sintaxis es :

glob ?flags? patron ?patron? ...

Así, para conocer el nombre de todos los ficheros y subdirectorios de un directorio, se escribiría:

glob *

Previous Page Next Page


© 1995-98, etsimo WWW team
Última modificación: 19 de Agosto de 1998 - 17:50:25