ARCHIVOS.pdf

download ARCHIVOS.pdf

of 32

Transcript of ARCHIVOS.pdf

  • Informtica Tema 3. Gestin de Archivos 1/34

    Mdulo 1. Conocimientos bsicos de programacin

    Tema 3. Gestin de Archivos

  • Informtica Tema 3. Gestin de Archivos 2/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 3/34

    ndice

    1. Definicin de archivo.

    2. Ventajas e inconvenientes del uso de archivos.

    3. Tipos de archivos.

    4. El descriptor de archivo.

    5. Comandos save y load.

    6. Otras operaciones con archivos.

    7. Ejercicios.

    8. Resumen.

  • Informtica Tema 3. Gestin de Archivos 4/34

    Definicin

    Concepto de Archivo: Un archivo (o fichero) es la unidadlgica de almacenamiento en un dispositivo de memoriasecundaria.

    Cualquier conjunto de datos almacenado en un dispositivode almacenamiento secundario, independientemente dela informacin que represente (programas, textos,grficos, ), est agrupado en una estructura de datosllamada archivo.

    En los sistemas operativos modernos, un archivo seestructura como una secuencia de bytes.

  • Informtica Tema 3. Gestin de Archivos 5/34

    Ventajas:

    Persistencia de los datos. La memoria principal de un programase libera tras su terminacin (es voltil). Para poder mantener lainformacin de ejecucin de un programa hay que guardarla enarchivos. As podemos recuperar los datos en posterioresejecuciones.

    Capacidad de almacenamiento superior. El espacio dedirecciones de memoria de un programa es limitado. Si losdatos no caben en memoria principal se pueden guardar enarchivos.

    Inconvenientes:

    Lentitud de acceso a memoria secundaria. Los datos se tienenque buscar y adems se tienen que trasladar a memoriaprincipal para poder procesarse.

    Ventajas e inconvenientes del uso de archivos

  • Informtica Tema 3. Gestin de Archivos 6/34

    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 slorepresentan caracteres ASCII legibles (.txt, .m, etc.).

    Binarios: las secuencias de bytes que lo forman deben serinterpretadas segn la representacin utilizada durante sualmacenamiento (.exe, .jpg, etc.).

    Tipos de Archivos

  • Informtica Tema 3. Gestin de Archivos 7/34

    El acceso a archivos se hace a travs de una estructuraintermedia gestionada por el sistema operativo denominadamanejador de archivo.

    Para acceder a un archivo desde un lenguaje deprogramacin, el sistema operativo crea un manejador dearchivo y ste se asocia a una variable que ser el descriptor oidentificador de archivo.

    Todo archivo tiene asociado un buffer (zona de memoriaprincipal) para realizar las operaciones de E/S de forma msrpida.

    La escritura no se realiza directamente sobre el dispositivo dealmacenamiento, sino que se escribe en el buffer.

    El espacio en memoria principal se reserva automticamentecuando se realiza la apertura del archivo y se inicializa eldescriptor de archivo.

    El descriptor de archivo

  • Informtica Tema 3. Gestin de Archivos 8/34

    Al finalizar la sesin de Matlab se borran todas lasvariables definidas hasta ese momento.

    En ocasiones puede resultar interesante interrumpirel trabajo con Matlab y poderlo recuperar ms tardeen el mismo punto en el que se dej (con las mismasvariables definidas, con los mismos resultadosintermedios, etc.).

    Mediante los comandos save y load es posiblerecuperar los valores de algunas o todas las variablesdefinidas en una sesin.

    Comandos save y load

  • Informtica Tema 3. Gestin de Archivos 9/34

    Guardar variables: comando save.

    Sintaxis: save [nombre_archivo][var1 var2 ][;]

    Se crea un archivo binario con la extensin .mat enel que se almacenan los valores de var1, var2, etc.

    Si no se especifica el nombre del archivo, por defectose crea el archivo binario matlab.mat

    Si no se especifica el nombre de ninguna variable, seguardan todas las variables definidas en la sesinactual.

    Comandos save y load

  • Informtica Tema 3. Gestin de Archivos 10/34

    Recuperar variables: comando load.

    Sintaxis: load [nombre_archivo] [;]

    Se cargan en la sesin actual los valores almacenadosen el archivo especificado.

    Si no se especifica el nombre del archivo, por defectose toman los datos de matlab.mat

    Con estos comandos tambin se pueden importar yexportar archivos de texto.

    Comandos save y load

  • Informtica Tema 3. Gestin de Archivos 11/34

    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 12 2 23 3 34 4 4

    >>

    Guardar en el archivo valores.mat:>> save valores V M;

    >> load valores asignar a las variables V y M los valores almacenadosen el archivo valores.mat

    load tambin permite leer vectores o matrices a partir de archivosde texto.

    Ejemplos de save y load

  • Informtica Tema 3. Gestin de Archivos 12/34

    Ejemplos de save y load

    Interaccin con Excel:

    Problema 1. Importar una tabla de datos desde Excel a una matrizen 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 13/34

    Ejemplos de save y load

  • Informtica Tema 3. Gestin de Archivos 14/34

    Ejemplos de save y load

    Interaccin con Excel:

    Problema 2. Exportar una matriz de datos desde Matlab a una tablaen 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 siemprede tipo real. Si la matriz es de caracteres, se almacena el cdigo ASCII destos.

    Los datos pueden ser separados con tabuladores aadiendo la palabraclave tabs. Ejemplo: >> save T A ascii -tabs

  • Informtica Tema 3. Gestin de Archivos 15/34

    El manejo de archivos desde Matlab consiste, al igualque en cualquier otro lenguaje de programacin, ensustituir los dispositivos habituales de Entrada(teclado) y Salida (monitor) por archivos.

    Los programas leern los datos de entrada desde unarchivo, en lugar de desde el teclado, y escribirn losresultados en otro(s) archivo(s) en lugar de hacerloen la pantalla.

    Otras operaciones con archivos

  • Informtica Tema 3. Gestin de Archivos 16/34

    Apertura de un archivo. Funcin fopen.

    Sintaxis: id_arch=fopen (nombre.dat, modo_apertura);

    Abre el archivo nombre.dat y devuelve id_arch, que esel descriptor o identificador del archivo.

    Si no hay ningn problema en la apertura, id_archtomar un valor entero mayor que 2.

    Si ocurre algn tipo de error id_arch valdr -1.

    Otras operaciones con archivos

  • Informtica Tema 3. Gestin de Archivos 17/34

    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.

    Otras operaciones con archivos

  • Informtica Tema 3. Gestin de Archivos 18/34

    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 sevayan a utilizar ms.

    Tras ejecutar fclose ya no tiene sentido utilizar ms eldescriptor de archivo.

    Otras operaciones con archivos

  • Informtica Tema 3. Gestin de Archivos 19/34

    Ejemplomi_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

    Otras operaciones con archivos

  • Informtica Tema 3. Gestin de Archivos 20/34

    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 parareales, %c para caracteres; %s para cadenas de caracteres; \n; \t

    Otras operaciones con archivos

  • Informtica Tema 3. Gestin de Archivos 21/34

    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 lneasv = 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));

    endfclose (fid);

    elsedisp (['No se pudo abrir el fichero ', nombre]);

    end

    Otras operaciones con archivos

  • Informtica Tema 3. Gestin de Archivos 22/34

    Funcin que escribe un vector en un fichero. Todo en una filafunction 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 datosfid = 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

    endexito = true; fclose (fid);

    elseexito = false;

    end

    Otras operaciones con archivos

  • Informtica Tema 3. Gestin de Archivos 23/34

    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);

    Otras operaciones con archivos

  • Informtica Tema 3. Gestin de Archivos 24/34

    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 espaciosm = 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:ncfprintf (fid, '%f ', m(fila,col));if col ~= nc

    fprintf (fid, ' ');else

    fprintf (fid, '\n');end

    endendfclose (fid);

    elsedisp (['No se pudo abrir el fichero ', nombre]);

    end

    Otras operaciones con archivos

  • Informtica Tema 3. Gestin de Archivos 25/34

    El programa anterior tambin se podra habercodificado 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 unafuncin que tome como parmetros de entrada unamatriz, el nombre de un fichero y un carcter paraseparar los datos dentro de una lnea.

    Otras operaciones con archivos

  • Informtica Tema 3. Gestin de Archivos 26/34

    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 formatoespecificado en tipo_formato y los devuelve en var.

    leidos es un ENTERO que ser el nmero de elementos que se hanledo.

    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.

    Otras operaciones con archivos

  • Informtica Tema 3. Gestin de Archivos 27/34

    EjemploSupongamos que tenemos el archivo de texto exp.txt con la siguienteinformacin:

    0.00 1.00000000

    0.10 1.1517092

    1.00 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);

    Otras operaciones con archivos

  • Informtica Tema 3. Gestin de Archivos 28/34

    Ms ejemplos de leer de archivos: Supongamos que tenemos el archivo datos.txt con la siguienteinformacin:

    1 2 3 4 56 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=

    1 3 5 7 9

    2 4 6 8 10

    cont=10

    Otras operaciones con archivos

  • Informtica Tema 3. Gestin de Archivos 29/34

    Ms ejemplos de leer de archivos: Si realizamos estas operaciones seguidas tendremos problemasen la segunda debido a que el fichero ha sido anteriormente ledoy 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 =

    1 4 72 5 83 6 9

    cont=9

    Otras operaciones con archivos

  • Informtica Tema 3. Gestin de Archivos 30/34

    Ms ejemplos de leer de archivos: Si no hay datos suficientes para el tamao especificado en lalectura, se rellena con ceros:

    >>[A,cont]=fscanf(fid,%d,*4,4+)

    A=

    1 5 9

    2 6 10

    3 7 0

    4 8 0

    cont=10

    As obtenemos el mismo resultado:

    >>[A,cont]=fscanf(fid,%d,*4,inf])

    Otras operaciones con archivos

  • Informtica Tema 3. Gestin de Archivos 31/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 nmeros1.5, 2.7 y 3.9.

    b) Leer del archivo de texto1 los 3 valores reales en 3 variables a, b y c, ymostrarlos 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 dosdecimales.

  • Informtica Tema 3. Gestin de Archivos 32/34

    Resumen

    Archivo: unidad lgica de almacenamiento en un dispositivo dememoria secundaria.

    Ventajas: Persistencia de los datos y capacidad dealmacenamiento 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 otodas las variables definidas en una sesin.

    Otras funciones para manejar archivos de texto: fprintf y fscanf.