Entrada y salida de datos Informática aplicada al medio ambiente curso 2010/2011 Ficheros Tipos de ficheros Texto Con formato: Ej.: Delimitado por comas (CSV) Delimitado por etiquetas: html Formato libre Binarios Documentos de excel Imágenes Etc. Informática aplicada al Medio Ambiente 2 Abstracciones Flujo de información Lectura o escritura (no ambas) Secuencial Ej.: Página web, documentos, etc. Fichero → Memoria (modifición y uso) → Fichero Acceso aleatorio Requiere posicionamiento dentro del fichero Registros o bloques de tamaño fijo Ej.: Base de datos Menos flexible, mayor tamaño, eficiente Informática aplicada al Medio Ambiente 3 Ejemplo !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>Google</title> .... <body ...> <form action="/search" name="f"> <table cellpadding="0" cellspacing="0"> <tbody> <tr valign="top"> <td width="25%">&nbsp;</td> <td align="center" nowrap="nowrap"><input name="hl" value="es" type="hidden"><input maxlength="2048" name="q" size="55" title="Buscar con Google" value=""><br> <input name="btnG" value="Buscar con Google" type="submit"><input name="btnI" value="Voy a tener suerte" type="submit"></td> .... </form> .... </body> </html> Informática aplicada al Medio Ambiente 4 Uso simple de ficheros en MATLAB Importación de datos load: Números separados por espacios-> matriz Puede cargar desde ficheros .mat o ASCII load ('fichero .mat' [, var1, var2, varN ]) load('fichero ascii') %carga matrix de números csvread → Hojas de cálculo dlmread → Números, cualquier separador textread → para leer celdas, varios tipos textscan → Más complejo y potente que textread xmlread → Formatos XML → Document Object Model Informática aplicada al Medio Ambiente 5 Uso simple de ficheros en MATLAB Exportación de datos save: Guarda datos para ser cargados con load save ('fichero', variables...) csvwrite dlmwrite → Números, cualquier separador xmlwrite → Guarda en formato XML Informática aplicada al Medio Ambiente 6 Uso general de ficheros 1.Abrir fopen 2.Lectura y escritura fload, fwrite, fread, fscanf, fprintf... 3.Cerrar fclose Hay que comprobar posibles errores al operar con ficheros Alternativas: Matlab(simple) y estilo C (potente) Informática aplicada al Medio Ambiente 7 Apertura de ficheros fid= fopen('nombre de fichero') Fid es un identificador de fichero, se utilizará en el resto de operaciones -1 == error ferror(fid) muestra el último error con el fichero identificado por fid [fid, mensaje] = fopen('fichero') Devuelve el fid y el mensaje en caso de error Informática aplicada al Medio Ambiente 8 Apertura de ficheros II [fid, msg]=fopen('nombre', 'modo') Modo: 'r' → fichero existente para lectura 'w' → escritura, borra el contenido previo 'a' → escritura, añadiendo al final del fichero 'r+' → fichero existente, lectura y escritura 'w+' → lectura y escritura, borrando el contenido previo 'a+' → lectura y escritura, al final del fichero Informática aplicada al Medio Ambiente 9 fopen y fclose fids= fopen('all') obtiene en un vector todos los id de fichero [ nombre, permiso ] = fopen(fid) fclose(fid) → cierra el fichero fid Devuelve el nombre y permisos del fichero identificado por fid Devuelve -1 en caso de error fclose('all') → cierra todos los ficheros Informática aplicada al Medio Ambiente 10 Lectura y escritura fprintf(fid, 'formato', variables...) Escribe las variables en el fichero siguendo el formato indicado Si se omite fid escribe en pantalla Formato: cadena de conversión estilo C %d %i: Decimal con signo %o %u, %x: octal, sin signo, hexadecimal, %E,e: Double precisión, notación [-]d.dddd E(+|-)dd E(+|-) %f: [-]ddd.ddd; %g: usa %e o %f según el caso %s: cadena de caracteres Informática aplicada al Medio Ambiente 11 Lectura y escritura Longitud y decimales: %l.d antes del modificador Delimitadores \n: salto de linea \r: retorno de carro \t: tabulador \b: retroceso (backspace) \\: para imprimir \ (carácter de escape) Informática aplicada al Medio Ambiente 12 Ejemplo fprintf(fid, 'El valor es: %8.2f\n', y) Imprimiendo vectores v=[1:10] fprintf(fid, '%d\n', v) Imprimiendo matrices Se recorre por columnas, siguiendo el orden en que se almacenan o indexan las matrices x= 0:.1:1; y=[x; exp(x)]; % y tiene dos filas fprintf(fid, '%f %f\n', y); %cada fila se imprime como una columna Informática aplicada al Medio Ambiente 13 Lectura A= fscanf (fid, 'formato') v=fscanf(fid, '%g') → Lee todo el fichero, numero a numero, volcandolo en el vector v [A, leidos] = fscanf(fid, 'formato', dimension) Leidos= leidos correctamente Dimension n= n elementos en un vector columna inf=todos los elementos [M, N] Rellena la matriz MxN por columnas. N puede ser inf Informática aplicada al Medio Ambiente 14 Ejemplo fid=fopen('exp.txt'); A= fscanf (fid, '%g %g', [2, inf]) → lee el fichero por pares y los guarda en dos filas fclose(fid); A= A' %calculamos la traspuesta para tenerlo en columnas Informática aplicada al Medio Ambiente 15 Lectura por lineas linea=fgetl(fid) → lee linea a linea (sin guardar \n). -1 si llega al final de fichero (se puede comprobar con ~ischar(linea) fgets(fid) → lee la siguiente linea, incluyendo \n fgets(fid, nchar) → lee nchar caracteres máximo de la siguiente linea Informática aplicada al Medio Ambiente 16 Ficheros binarios fwrite (fid, A, 'precision') [A, leidos]= fread(fid, dimension, 'precision') Precision = tipo de dato a leer o escribir. 'int4', 'short', 'double' etc. Dimension N, inf, o MxN, igual que en fscanf Informática aplicada al Medio Ambiente 17 Posicionamiento en ficheros fseek (fid, n, 'origin') Origin: 'bof' o -1: Bottom of file 'cof' o 0: Current of file 'eof' o 1: End of file n es relativo a origen, positivo o negativo ftell(fid) → posición actual (0=comienzo) feof(fid) → indica si está al final frewind(fid) → vuelve al comienzo Informática aplicada al Medio Ambiente 18 Ejemplo A=[1:10]; fid=fopen('tmp.bin', 'w') fwrite(fid, A, 'short') fclose(fid) fid=fopen('tmp.bin', 'r') n=ftell(fid) dato=fread(fid, 1, 'short') n=ftell(fid) fseek(fid, 6, 'bof') n=ftell(fid) dato=fread(fid, 1, 'short') fid = 7 ans = 10 ans = 0 fid = 7 n=0 dato = 1 n= 2 ans = 0 n= 6 dato = 4 Informática aplicada al Medio Ambiente 19