Documentos de Académico
Documentos de Profesional
Documentos de Cultura
6 3 Programacion Avanzada Ficheros 2021
6 3 Programacion Avanzada Ficheros 2021
PARTE
PROGRAMACIÓN avanzada
FICHEROS DE DATOS: acceso a disco
En lectura:
Si hay que suministrar gran cantidad de datos al programa
FICHEROS DE DATOS (pag. 116)
En escritura de datos:
fid =fopen(‘datos.txt’,’r’);
fclose(fid)
FICHEROS DE DATOS
fprintf(fid,’format’,A,….)
Ejemplo: Hacer un programa que reciba un dato numérico de entrada (x), que
calcule el resultado de x + 3 . Esta información en lugar de escribirse en
pantalla se escribirá en un fichero resultados.txt de la forma:
fprintf(fid,’format’,A,….)
Ejemplo:
x=0:.1:1
y=[x;exp(x)];
fid=fopen(‘resultado.txt’,’w’);
frewind(fid)
5º) Lectura de datos de ficheros
MEDICIÓN REALIZADA 02/11/2016 \n123.45 45.67 433.11\n23.01 11.002 344.113\n45.29 211.38 211.42EOF
FICHEROS DE DATOS
cadena=fgetl(fid)
cadena=fgetl(fid)
Veamos ejemplos:
1. Contenido de cadena
cadena=fgets(fid)
Lee desde la posición actual hasta el salto de línea (incluido)
Almacena el salto de línea
cadena=fgets(fid,n)
f1=fopen(‘datos.txt’,’r’);
linea=fgets(f1); Cuando finaliza el programa,
linea=fgets(f1); ¿cuál es el contenido de las
variables linea y ca?
ca=fgets(f1,15);
fclose(f1)
FICHEROS DE DATOS
[A,cont]=fscanf(fid,’formato’,size)
Lee el número de datos indicado
por size en las columnas de A
%d %f %s %c
[A,cont]=fscanf(fid,’formato’,size)
F1=fopen(‘datos.txt’,’r’);
fgets(F1);
x=fscanf(F1,’%f’,1);
x ???? 8.23
FICHEROS DE DATOS
[A,cont]=fscanf(fid,’formato’,size)
F1=fopen(‘datos.txt’,’r’);
fgets(F1);
x=fscanf(F1,’%d’,1);
x ???? 8
FICHEROS DE DATOS
[A,cont]=fscanf(fid,’formato’,size)
F1=fopen(‘datos.txt’,’r’);
fgets(F1);
x=fscanf(F1,’%c’,1);
x ???? ‘8’
FICHEROS DE DATOS
[A,cont]=fscanf(fid,’formato’,size)
F1=fopen(‘datos.txt’,’r’);
fgets(F1);
x=fscanf(F1,’%s’,1);
x ???? ‘8.23’
FICHEROS DE DATOS
[A,cont]=fscanf(fid,’formato’,size)
F1=fopen(‘datos.txt’,’r’);
fgets(F1);
x=fscanf(F1,’%f’,2);
x ???? 8.23
6.22
FICHEROS DE DATOS
[A,cont]=fscanf(fid,’formato’,size)
F1=fopen(‘datos.txt’,’r’);
fgets(F1);
x=fscanf(F1,’%d’, 2);
x ???? 8
Se para en el
punto, no ‘ve’
más enteros
FICHEROS DE DATOS
[A,cont]=fscanf(fid,’formato’,size)
F1=fopen(‘datos.txt’,’r’);
fgets(F1);
x=fscanf(F1,’%c’, 2);
x ???? ‘8.’
FICHEROS DE DATOS
[A,cont]=fscanf(fid,’formato’,size)
F1=fopen(‘datos.txt’,’r’);
fgets(F1);
x=fscanf(F1,’%s’,2);
x ???? ‘8.236.22’
FICHEROS DE DATOS
Si no se indica size
[A,cont]=fscanf(fid,’formato’,size)
[A,cont]=fscanf(fid,’formato’)
Se lee, desde la posición actual, todos los datos del fichero (que se
correspondan con el formato) en el vector columna A
Si encuentra un dato que no pueda leer con el formato
indicado, para, y no sigue leyendo.
FICHEROS DE DATOS
[A,cont]=fscanf(fid,’formato’)
Si encuentra un dato que no pueda leer con el formato indicado,
para y no sigue leyendo.
¿Qué contiene A?
FICHEROS DE DATOS
[A,cont]=fscanf(fid,’formato’,[n, inf])
FICHEROS DE DATOS
Lectura de datos de ficheros (EJEMPLOS)
Sea el fichero datos.txt con el siguiente contenido
fid=fopen(‘datos.txt’,’r’);
[A,cont]=fscanf(fid,’%d’);
[A,cont]=fscanf(fid,’%d’,[2,5]);
frewind(fid);
[A,cont]=fscanf(fid,’%d’,[2,5]);
frewind(fid);
[A,cont]=fscanf(fid,’%d’,[3,3]);
frewind(fid);
[A,cont]=fscanf(fid,’%d’,[4,4]);
frewind(fid);
[A,cont]=fscanf(fid,’%d’,[4,inf]);
PREGUNTA: ¿Cómo leer todos los números en una matriz de 2 columnas?
(manteniendo la distribución)
FICHEROS DE DATOS
6º) Operaciones auxiliares
Búsqueda del final del fichero
FEOF (pag. 121)
feof(fid) ~feof(fid)
feof(fid) ~feof(fid)
Ejemplo: Sea un fichero ‘res.txt’ con varios datos numéricos. Se quiere contar
cuántos datos hay (n).
fid=fopen('res.txt','r');
n=0;
while ~feof(fid)
fscanf(fid,'%f',1);
n=n+1;
end
FICHEROS DE DATOS
Más ejemplos
Más ejemplos
Más ejemplos
(solución)
fid=fopen('resultados.txt','r');
aux=fgets(fid);
aux=fgets(fid);
n=0;
med=[ ];
while ~feof(fid)
fscanf(fid,'%30c',1);
not=fscanf(fid,'%f',[1,3]);
aux=fgets(fid);%para comerse el salto de línea después del tercer número
med=[med,sum(not)/3];
n=n+1;
end
fprintf('El número de alumnos presentados es %d\n',n);
fprintf('La media de notas es: %f\n',sum(med)/n);
FICHEROS DE DATOS
Más ejemplos
(otra solución)
fid=fopen('notas.txt','r');
aux=fgets(fid);
aux=fgets(fid);
n=0;
med=[ ];
while ~feof(fid)
aux=fgets(fid,30);
not=fscanf(fid,'%f',[1,3]);
aux=fgets(fid);%para comerse el salto de línea después del tercer número
med=[med,sum(not)/3];
n=n+1;
end
fprintf('La media de notas es: %f\n',sum(med)/n);
Lectura de datos contenidos en cadenas de caracteres:
Función sscanf
SSCANF (pag. 125)
Dada una variable tipo char se pueden leer los datos contenidos en ella
con diferentes formatos.
Utilización:
Siempre lee
[A,cont]=sscanf(cadena,'formato',size); desde el inicio
de la cadena
Lectura de datos contenidos en cadenas de caracteres:
dat =
texto='datos 45 51 Santander'; 45
[dat,n]=sscanf(texto,'%*s %d %d %*s') n =
51
NO ENTRA A
PARTIR DE AQUÍ
Más ejemplos
- Leemos encabezado
- Leemos hasta el final del fichero, cada vez una línea
- Usando sscanf, leemos el contenido de esa línea hasta el final
- Se guarda en la fila que corresponda de A