Ar Chivos

También podría gustarte

Está en la página 1de 32

Mdulo 1.

Conocimientos
bsicos de programacin
Tema 3. Gestin de Archivos

Informtica

Tema 3. Gestin de Archivos

1/34

Objetivos
Introducir el concepto de archivo.
Conocer y saber distinguir entre archivos binarios y
archivos de texto.
Conocer y saber utilizar los comandos save y load
para guardar y recuperar posteriormente variables.
Comprender los modos de apertura y cierre de
archivos en Matlab.
Conocer y saber utilizar las funciones de gestin de
archivos en Matlab.
Informtica

Tema 3. Gestin de Archivos

2/34

ndice
1.
2.
3.
4.
5.
6.
7.
8.
Informtica

Definicin de archivo.
Ventajas e inconvenientes del uso de archivos.
Tipos de archivos.
El descriptor de archivo.
Comandos save y load.
Otras operaciones con archivos.
Ejercicios.
Resumen.
Tema 3. Gestin de Archivos

3/34

Definicin
Concepto de Archivo: Un archivo (o fichero) es la unidad
lgica de almacenamiento en un dispositivo de memoria
secundaria.
Cualquier conjunto de datos almacenado en un dispositivo
de almacenamiento secundario, independientemente de
la informacin que represente (programas, textos,
grficos, ), est agrupado en una estructura de datos
llamada archivo.
En los sistemas operativos modernos, un archivo se
estructura como una secuencia de bytes.
Informtica

Tema 3. Gestin de Archivos

4/34

Ventajas e inconvenientes del uso de


archivos
Ventajas:
Persistencia de los datos. La memoria principal de un programa
se libera tras su terminacin (es voltil). Para poder mantener la
informacin de ejecucin de un programa hay que guardarla en
archivos. As podemos recuperar los datos en posteriores
ejecuciones.
Capacidad de almacenamiento superior. El espacio de
direcciones de memoria de un programa es limitado. Si los
datos no caben en memoria principal se pueden guardar en
archivos.
Inconvenientes:
Lentitud de acceso a memoria secundaria. Los datos se tienen
que buscar y adems se tienen que trasladar a memoria
principal para poder procesarse.
Informtica

Tema 3. Gestin de Archivos

5/34

Tipos de Archivos
En funcin del tipo de informacin que contienen,
los archivos se suelen clasificar en dos categoras:
De texto: las secuencias de bytes que lo forman slo
representan caracteres ASCII legibles (.txt, .m, etc.).

Binarios: las secuencias de bytes que lo forman deben ser


interpretadas segn la representacin utilizada durante su
almacenamiento (.exe, .jpg, etc.).

Informtica

Tema 3. Gestin de Archivos

6/34

El descriptor de archivo
El acceso a archivos se hace a travs de una estructura
intermedia gestionada por el sistema operativo denominada
manejador de archivo.
Para acceder a un archivo desde un lenguaje de
programacin, el sistema operativo crea un manejador de
archivo y ste se asocia a una variable que ser el descriptor o
identificador de archivo.
Todo archivo tiene asociado un buffer (zona de memoria
principal) para realizar las operaciones de E/S de forma ms
rpida.
La escritura no se realiza directamente sobre el dispositivo de
almacenamiento, sino que se escribe en el buffer.
El espacio en memoria principal se reserva automticamente
cuando se realiza la apertura del archivo y se inicializa el
descriptor de archivo.
Informtica

Tema 3. Gestin de Archivos

7/34

Comandos save y load


Al finalizar la sesin de Matlab se borran todas las
variables definidas hasta ese momento.
En ocasiones puede resultar interesante interrumpir
el trabajo con Matlab y poderlo recuperar ms tarde
en el mismo punto en el que se dej (con las mismas
variables definidas, con los mismos resultados
intermedios, etc.).
Mediante los comandos save y load es posible
recuperar los valores de algunas o todas las variables
definidas en una sesin.
Informtica

Tema 3. Gestin de Archivos

8/34

Comandos save y load


Guardar variables: comando save.
Sintaxis: save [nombre_archivo][var1 var2 ][;]
Se crea un archivo binario con la extensin .mat en
el que se almacenan los valores de var1, var2, etc.
Si no se especifica el nombre del archivo, por defecto
se crea el archivo binario matlab.mat
Si no se especifica el nombre de ninguna variable, se
guardan todas las variables definidas en la sesin
actual.
Informtica

Tema 3. Gestin de Archivos

9/34

Comandos save y load


Recuperar variables: comando load.
Sintaxis: load [nombre_archivo] [;]
Se cargan en la sesin actual los valores almacenados
en el archivo especificado.
Si no se especifica el nombre del archivo, por defecto
se toman los datos de matlab.mat
Con estos comandos tambin se pueden importar y
exportar archivos de texto.
Informtica

Tema 3. Gestin de Archivos

10/34

Ejemplos de save y load


Definimos en Matlab las siguientes variables V y M:
>> V=[1 2 3 4]
V=
1 2 3 4
>> M=[V' V' V']
M=
1 1 1
2 2 2
3 3 3
4 4 4
>>

Guardar en el archivo valores.mat:


>> save valores V M;

asignar a las variables V y M los valores almacenados


en el archivo valores.mat
load tambin permite leer vectores o matrices a partir de archivos
de texto.

>> load valores

Informtica

Tema 3. Gestin de Archivos

11/34

Ejemplos de save y load


Interaccin con Excel:
Problema 1. Importar una tabla de datos desde Excel a una matriz
en Matlab.
Pasos para la resolucin:
Crear una tabla en Excel y almacenarla con formato:
Texto (delimitado por tabulaciones) (*.txt). Ejemplo: M.txt
En Matlab, cargar la tabla M: >> load M.txt
A partir de este momento Matlab reconoce M como una matriz.

Informtica

Tema 3. Gestin de Archivos

12/34

Ejemplos de save y load

Informtica

Tema 3. Gestin de Archivos

13/34

Ejemplos de save y load


Interaccin con Excel:
Problema 2. Exportar una matriz de datos desde Matlab a una tabla
en Excel.
Pasos para la resolucin:

Crear una matriz A en Matlab.


Si T es el nombre que queremos para la tabla almacenada en Excel
Escribir: >> save T A ascii
Ahora se puede abrir el archivo T desde Excel. OJO! Los datos son siempre
de tipo real. Si la matriz es de caracteres, se almacena el cdigo ASCII de
stos.
Los datos pueden ser separados con tabuladores aadiendo la palabra
clave tabs. Ejemplo: >> save T A ascii -tabs
Informtica

Tema 3. Gestin de Archivos

14/34

Otras operaciones con archivos


El manejo de archivos desde Matlab consiste, al igual
que en cualquier otro lenguaje de programacin, en
sustituir los dispositivos habituales de Entrada
(teclado) y Salida (monitor) por archivos.
Los programas leern los datos de entrada desde un
archivo, en lugar de desde el teclado, y escribirn los
resultados en otro(s) archivo(s) en lugar de hacerlo
en la pantalla.
Informtica

Tema 3. Gestin de Archivos

15/34

Otras operaciones con archivos


Apertura de un archivo. Funcin fopen.

Sintaxis:
id_arch=fopen (nombre.dat, modo_apertura);
Abre el archivo nombre.dat y devuelve id_arch, que es
el descriptor o identificador del archivo.
Si no hay ningn problema en la apertura, id_arch
tomar un valor entero mayor que 2.
Si ocurre algn tipo de error id_arch valdr -1.

Informtica

Tema 3. Gestin de Archivos

16/34

Otras operaciones con archivos


Modos de apertura del archivo
w. Apertura del archivo para escritura. Los datos se escriben
desde el principio. Si el archivo no existe, se crea.
w+. Apertura del archivo para lectura y escritura. Los datos
se escriben desde el principio. Si el archivo no existe se crea.
r. Apertura para lectura. El archivo debe existir.
r+. Apertura del archivo para lectura y escritura. Los datos se
escriben desde el principio y el archivo debe existir.
a. Apertura para aadir informacin al final del archivo. Si el
archivo no existe, se crea.
a+. Apertura para lectura y para aadir informacin al final
del archivo. Si el archivo no existe, se crea.
NOTA: si se va a trabajar con un archivo binario, se le aade
una b a estas cadenas: wb, rb+, etc.
Informtica

Tema 3. Gestin de Archivos

17/34

Otras operaciones con archivos


Cierre de un archivo. Funcin fclose.
Sintaxis:
estado = fclose (id_arch);

Cierra el archivo especificado por id_arch.


Devuelve 0 si la operacin tiene xito y -1 si no lo tiene.
fclose(all) cierra todos los archivos abiertos.
NOTA: es importante cerrar los archivos cuando ya no se
vayan a utilizar ms.
Tras ejecutar fclose ya no tiene sentido utilizar ms el
descriptor de archivo.
Informtica

Tema 3. Gestin de Archivos

18/34

Otras operaciones con archivos


Ejemplo
mi_archivo = fopen('prueba.dat', 'w');
if (mi_archivo == -1)
disp('Error en la apertura');
else
disp (Apertura correcta');
%Instrucciones a realizar con el archivo

fclose(mi_archivo);
end

Informtica

Tema 3. Gestin de Archivos

19/34

Otras operaciones con archivos


Operaciones con archivos de texto:
Escritura en un archivo de texto. Funcin fprintf:
Escribe datos con formato en un archivo.

Sintaxis:
res = fprintf ([id_arch], tipo_formato, var1, var2, );
Escribe en el archivo identificado por id_arch las variables var1, var2,
etc, que sern del formato especificado en tipo_formato.
res es un entero que ser el nmero de bytes que se han escrito.
Si se omite id_arch se escribe en la salida estndar: pantalla.
Valores de tipo_formato: %d para enteros; %f, %e o %g para
reales, %c para caracteres; %s para cadenas de caracteres; \n; \t
Informtica

Tema 3. Gestin de Archivos

20/34

Otras operaciones con archivos


Escribe un vector en un fichero. Cada dato en una fila
% Programa EscribeVector1
% Entradas: Un vector y un nombre de fichero
% Salidas: Escribe en el fichero los datos del vector en distintas lneas
v = input ('Introduzca un vector de nmeros: ');
nombre = input ('Introduzca el nombre del archivo: ', 's');
fid = fopen (nombre, 'w');
if (fid ~= -1)
for x = 1:length(v)
fprintf (fid, '%f\n', v(x));
end
fclose (fid);
else
disp (['No se pudo abrir el fichero ', nombre]);
end

Informtica

Tema 3. Gestin de Archivos

21/34

Otras operaciones con archivos

Funcin que escribe un vector en un fichero. Todo en una fila


function exito = EscribeVector2 (nombreFichero, v)
% FUNCION exito = EscribeVector2 (nombreFichero, v)
% DESCRIPCIN: Escribe en una lnea de un fichero los datos de un vector separados por espacios
% PARMETROS DE ENTRADA: - nombreFichero: el nombre del fichero de texto
%
- v: el vector
% PARMETROS DE SALIDA:
- exito: valor lgico indicando si se guardaron los datos
fid = fopen (nombreFichero, 'w');
if (fid ~= -1)
for x = 1:length(v)
fprintf (fid, '%f', v(x));
if x ~= length(v)
fprintf (fid, ' ');
else
fprintf (fid, '\n');
end
end
exito = true; fclose (fid);
else
exito = false;
end

Informtica

Tema 3. Gestin de Archivos

22/34

Otras operaciones con archivos


Ejemplo de invocacin a la funcin anterior:
>> res = EscribeVector2 (fichero.txt, *1 2 5 6+);
La funcin anterior tambin se podra haber codificado
como:
function EscribeVector2 (nombreFichero, v)
save (nombreFichero, v, -ascii);

Informtica

Tema 3. Gestin de Archivos

23/34

Otras operaciones con archivos

Programa que escribe una matriz en un fichero. Cada fila en una lnea
% Programa EscribeMatriz
% Entradas: Una matriz y un nombre de fichero
% Salidas: Escribe en el fichero la matriz. Cada fila en una lnea. Los datos en una fila separados por espacios
m = input ('Introduzca una matriz de nmeros: ');
nombre = input ('Introduzca el nombre del archivo: ', 's');
fid = fopen (nombre, 'w');
if (fid ~= -1)
[nf, nc] = size (m);
for fila = 1:nf
for col = 1:nc
fprintf (fid, '%f ', m(fila,col));
if col ~= nc
fprintf (fid, ' ');
else
fprintf (fid, '\n');
end
end
end
fclose (fid);
else
disp (['No se pudo abrir el fichero ', nombre]);
end

Informtica

Tema 3. Gestin de Archivos

24/34

Otras operaciones con archivos


El programa anterior tambin se podra haber
codificado como:
m = input ('Introduzca una matriz de nmeros: ');
nombre = input ('Introduzca el nombre del archivo: ', 's');
save (nombre, m , ascii);
Ejercicio: Transforme el programa anterior en una
funcin que tome como parmetros de entrada una
matriz, el nombre de un fichero y un carcter para
separar los datos dentro de una lnea.
Informtica

Tema 3. Gestin de Archivos

25/34

Otras operaciones con archivos


Lectura de un archivo de texto. Funcin fscanf:
Lee datos formateados en un archivo.

Sintaxis:
[var, leidos] = fscanf ([id_arch], tipo_formato, [tam]);
Lee los datos del archivo id_arch, los convierte segn el formato
especificado en tipo_formato y los devuelve en var.
leidos es un ENTERO que ser el nmero de elementos que se han
ledo.
Si se omite id_arch se lee de la entrada estndar: teclado.
Valores de tipo_formato: los mismos que para fprintf.
tam puede ser:
n: lee n elementos en un vector columna.
inf: lee hasta el final del archivo (opcin por defecto).
[nf, nc]: lee los elementos necesarios para llenar una matriz nf*nc,
se lee por columnas. Solamente se puede poner inf en nc.
Informtica

Tema 3. Gestin de Archivos

26/34

Otras operaciones con archivos


Ejemplo
Supongamos que tenemos el archivo de texto exp.txt con la siguiente
informacin:
0.00
0.10

1.00

1.00000000
1.1517092
2.71828183

Si queremos leerlo en una matriz de Matlab con 2 columnas:


id_arch = fopen(exp.txt, r);
a = fscanf(id_arch, %g , [2, inf] ); % ahora a tiene 2 filas y n columnas
fclose(id_arch);
a = a; % se hace la traspuesta de a para que tenga n filas y 2 columnas
disp(a);

Otra opcin: load exp.txt; a = exp; disp(a);


Informtica

Tema 3. Gestin de Archivos

27/34

Otras operaciones con archivos


Ms ejemplos de leer de archivos:
Supongamos que tenemos el archivo datos.txt con la siguiente
informacin:
12345
6 7 8 9 10
>>fid = fopen(datos.txt, r);
>>*A,cont+=fscanf(fid,%d)
La salida es el vector columna de contenido: 1 2 3 4 5 6 7 8 9 10 y cont=10.

Otra posibilidad:
>>*A,cont+=fscanf(fid,%d,*2,5+)
A=
13579
2 4 6 8 10
cont=10
Informtica

Tema 3. Gestin de Archivos

28/34

Otras operaciones con archivos


Ms ejemplos de leer de archivos:
Si realizamos estas operaciones seguidas tendremos problemas
en la segunda debido a que el fichero ha sido anteriormente ledo
y es necesario rebobinarlo si se quiere leer de nuevo.
Para solucionarlo, podemos utilizar la funcin:
>>frewind(fid)

Otras posibilidades de lectura:


>>[A,cont] = fscanf(fid,%d,*3,3])
A=
147
258
369
cont=9
Informtica

Tema 3. Gestin de Archivos

29/34

Otras operaciones con archivos


Ms ejemplos de leer de archivos:
Si no hay datos suficientes para el tamao especificado en la
lectura, se rellena con ceros:
>>[A,cont]=fscanf(fid,%d,*4,4+)
A=
159
2 6 10
370
480
cont=10
As obtenemos el mismo resultado:
>>[A,cont]=fscanf(fid,%d,*4,inf])

Informtica

Tema 3. Gestin de Archivos

30/34

Ejercicios
1.

Dado el siguiente fragmento de cdigo en Matlab


ftxt1 = fopen (datos.ant, r);
ftxt2 = fopen (datos.nue, w);
.. .. .. .. ..
fclose(ftxt1);
fclose(ftxt2);

a)

Crear con un editor de textos un archivo datos.ant con los nmeros


1.5, 2.7 y 3.9.
b) Leer del archivo de texto1 los 3 valores reales en 3 variables a, b y c, y
mostrarlos por pantalla.
c) Pedir nuevos valores para las tres variables.
d) Escribirlos en el archivo de texto2. Formatear el valor en coma flotante
(formato con decimales) para que no se escriba con ms de dos
decimales.
Informtica

Tema 3. Gestin de Archivos

31/34

Resumen
Archivo: unidad lgica de almacenamiento en un dispositivo de
memoria secundaria.
Ventajas: Persistencia de los datos y capacidad de
almacenamiento superior.
Inconvenientes: Lentitud de acceso a memoria.
Tipos de archivos: de texto (caracteres ASCII) y binarios.
Comandos save y load para recuperar los valores de algunas o
todas las variables definidas en una sesin.
Otras funciones para manejar archivos de texto: fprintf y fscanf.

Informtica

Tema 3. Gestin de Archivos

32/34

También podría gustarte