Você está na página 1de 3

5.

3 Ficheros de datos (1)


Hasta el momento, la comunicacin de nuestros programas con el entorno se ha hecho
a travs de la ventana de comandos, para imprimir los datos que salen del programa o para
teclear los datos que se quieren suministrar al programa. Sin embargo, en el caso de lectura de
datos, si se tiene que suministrar un nmero elevado de datos que no cambia en cada
ejecucin, no es viable tener que teclearlos en cada ejecucin. Asimismo, en el caso de
escritura de datos, stos se perdern al salir de MATLAB u Octave. Es necesario que nuestros
programas puedan comunicarse con ficheros almacenados en disco para leer los datos
presentes en l o volcar resultados de ejecucin. Veremos a continuacin las principales
operaciones para el manejo de ficheros de datos.

Apertura del fichero

Para poder acceder a un fichero desde un programa M se debe realizar una primera
operacin de apertura mediante la funcin fopen, que pondr en comunicacin el programa
con el fichero. Se usar la siguiente sintaxis:

variable=fopen('nombrefichero','permiso')

donde:

variable es el identificador del fichero. A partir de este momento M trabaja con el


fichero por medio de este identificador, es decir, no volver a usarse el nombre externo. El
contenido de esta variable es un entero positivo si el proceso de apertura se ha realizado
correctamente, por el contrario si toma el valor -1 indica un error, por ejemplo, que el fichero
no ha sido encontrado.

'nombrefichero' especifica el nombre externo del fichero, si su ubicacin es la


carpeta actual, o la ruta completa al fichero, si se encuentra en una ubicacin distinta de la
actual.

'permiso' indica el modo de apertura del fichero. Los ms utilizados son:

r abre un fichero existente para leer datos de l.

w crea un fichero nuevo para escritura. Si ya existe se borra su contenido

a abre un fichero para escritura. Si existe escribe al final de lo ya escrito.


Cierre del fichero

Cuando se haya finalizado la utilizacin del fichero se debe desvincular ste del
programa empleando la funcin fclose con la siguiente sintaxis:

fclose(fid)

que cierra el fichero de identificador fid, devolviendo 1 si el cierre es correcto y 0 si es


incorrecto.

Escritura de datos en ficheros

Para escribir en un fichero cualquier tipo de dato con el formato deseado por el usuario
se utiliza la funcin fprintf de manera similar a como se us fprintf para escribir en pantalla. La
sintaxis es la siguiente:

fprintf(fid,format,A,)

que escribe los elementos especificados en A (que en general es una matriz) en el fichero de
identificador fid (previamente abierto) con el formato especificado en 'format'.

Como ejemplo, si se ejecuta el siguiente programa:

x=0:.1:1

y=[x;exp(x)];

fid=fopen('resultado.txt','w');

fprintf(fid,'%4s %12s \n', 'x','exp(x)');

fprintf(fid,'%6.2f %12.8f\n', y);

fclose(fid)

se generar el fichero resultado.txt con el siguiente contenido:

x exp(x)

0.00 1.00000000

0.10 1.10517092

0.20 1.22140276

0.30 1.34985881

...... ......

1.00 2.71828183
Rebobinado de ficheros

Cuando se abre un fichero el cursor de lectoescritura se encuentra en posicin inicial


(primera fila y primera columna). Segn se va escribiendo o leyendo, este cursor se desplaza
por el fichero. Si en un momento determinado se quiere volver a la posicin inicial se puede
conseguir mediante la siguiente funcin

frewind(fid)

que rebobina el fichero con identificador fid.

Encontrar el final del fichero en la lectura

La funcin de retorno lgico feof contiene informacin sobre la situacin del cursor de
lectoescritura respecto al final del fichero. Su sintaxis se indica a continuacin:

st=feof(fid)

Devuelve el valor 1 si el indicador del final del fichero de identificador fid ha sido alcanzado y 0
en otro caso, tal como se indica en la siguiente tabla:

Situacin en el fichero: feof(fid) ~feof(fid)

antes del final 0 1

en el final 1 0

Se puede utilizar para repetir una lectura de dato mientras no se est en el final, es decir
mientras ~feof(fid) sea cierto. Una estructura tpica de utilizacin se ofrece a
continuacin:

fid=fopen('res.txt','r'); %apertura de fichero

n=0;

while(~feof(fid))

---%leer un dato (se estudia en siguiente leccin)

n=n+1;%n contabiliza el nmero de datos leidos

end

fclose(fid)

Você também pode gostar