Story Transcript
Tema 3
Ficheros de texto Definición Declaración Apertura y cierre
Tema 3: Ficheros en C++
Lectura Escritura Ejercicios
Programación 2
Ficheros binarios Definición Declaración, apertura y cierre Lectura Escritura Ejercicios
Errores
Curso 2013-2014
Índice Tema 3
1
Ficheros de texto Definición Declaración Apertura y cierre Lectura de un fichero de texto (1/2) Escritura de un fichero de texto Ejercicios
2
Ficheros binarios Definición Declaración, apertura y cierre Lectura de un fichero binario Escritura de un fichero binario Ejercicios
3
Control de errores de lectura/escritura
Ficheros de texto Definición Declaración Apertura y cierre Lectura Escritura Ejercicios
Ficheros binarios Definición Declaración, apertura y cierre Lectura Escritura Ejercicios
Errores
¿Qué es un fichero de texto? Tema 3
Ficheros de texto Definición Declaración Apertura y cierre Lectura Escritura Ejercicios
Ficheros binarios Definición Declaración, apertura y cierre Lectura Escritura Ejercicios
Errores
También se le denomina fichero con formato Es un fichero que contiene solamente caracteres imprimibles ¿Qué es un carácter imprimible? Aquel cuyo código ASCII es mayor o igual que 32. ¿Qué es el código ASCII? Es un código que asigna a cada carácter un número (los ordenadores solamente almacenan números). Ejemplos de ficheros de texto: un programa en C++, una página web (HTML), un makefile, . . .
Declaración de variables de tipo fichero Tema 3
Ficheros de texto Definición Declaración Apertura y cierre Lectura Escritura Ejercicios
Ficheros binarios Definición Declaración, apertura y cierre Lectura Escritura Ejercicios
Errores
Hay que poner #include : ifstream fich_leer; (sólo para leer) ofstream fich_escribir; (sólo para escribir) fstream fich_leer_y_escribir; (raro en ficheros de texto)
Apertura y cierre (1/2) Tema 3
Ficheros de texto Definición Declaración
Modos de apertura: lectura, escritura, lectura/escritura, añadir al final En C++ se abren los ficheros con “open”, p.ej.:
Apertura y cierre Lectura Escritura Ejercicios
Ficheros binarios Definición Declaración, apertura y cierre
const char nombre[]="mifichero.txt"; fichero.open(nombre,ios::in);
Si el nombre del fichero es un string debemos convertirlo con la función c_str().
Lectura Escritura Ejercicios
Errores
Modos de apertura en C++: lectura escritura lectura/escritura añadir al final
ios::in ios::out ios::in | ios::out ios::out | ios::app
(fstream)
Apertura y cierre (2/2) Tema 3
Forma abreviada: Ficheros de texto Definición Declaración
ifstream fl("ifi.txt"); // por defecto, ios::in ofstream fe("ofi.txt"); // ios::out
Apertura y cierre Lectura Escritura Ejercicios
Ficheros binarios Definición Declaración, apertura y cierre Lectura Escritura Ejercicios
¿Cómo comprobar si se ha abierto el fichero? ¿Cómo cerrarlo? if (fichero.is_open()) { // ya se puede leer ...
Errores
fichero.close(); // cerrar el fichero } else // error de apertura
Detección del fin de fichero Tema 3
Se utiliza el método “eof”: Ficheros de texto Definición Declaración Apertura y cierre
ifstream fi; ... while (!fi.eof() ...)
Lectura Escritura Ejercicios
Ficheros binarios Definición Declaración, apertura y cierre Lectura Escritura Ejercicios
Errores
¿Cómo funciona? Cuando se intenta leer un dato (carácter, número, etc) que ya no está en el fichero el método devuelve “true” OJO: después de haber leido el último dato válido sigue devolviendo “false”, luego ... Es necesario hacer una lectura “extra” (que puede devolver datos no válidos que deben ignorarse) para provocar la detección del final del fichero
Lectura por líneas (1/2) Tema 3
Ficheros de texto Definición Declaración Apertura y cierre Lectura Escritura Ejercicios
Ficheros binarios
... if (fi.is_open()) { getline(fi,s); // ’s’ es de tipo string // fi.getline(cad,tCAD); // ’cad’ es ’char []’ while (!fi.eof()) { // hacer algo con ’s’
Definición Declaración, apertura y cierre
getline(fi,s);
Lectura
}
Escritura Ejercicios
fi.close();
Errores
}
Lectura por líneas (2/2) Tema 3
¿Y si la última línea del fichero no tiene “\n”? se pierde y no se procesa!! Ficheros de texto Definición Declaración Apertura y cierre Lectura Escritura Ejercicios
Ficheros binarios Definición Declaración, apertura y cierre
... if (fi.is_open()) { s=""; getline(fi,s); while (!fi.eof() || s.length()!=0) { // hacer algo con ’s’
Lectura
s=""; // inicializar ’s’ getline(fi,s);
Escritura Ejercicios
}
Errores
fi.close(); }
Lectura carácter a carácter Tema 3
Ficheros de texto Definición Declaración Apertura y cierre Lectura Escritura Ejercicios
Ficheros binarios
... if (fi.is_open()) { c = fi.get(); while (!fi.eof()) { // hacer algo con ’c’
Definición
c = fi.get();
Declaración, apertura y cierre
}
Lectura Escritura Ejercicios
Errores
fi.close(); }
Lectura de más de una variable Tema 3
Los ficheros son “stream”, funcionan como cin y cout Ficheros de texto Definición Declaración Apertura y cierre
#include ... ifstream fi; int numentero; double numreal;
Lectura Escritura Ejercicios
Ficheros binarios Definición Declaración, apertura y cierre Lectura Escritura Ejercicios
Errores
fi.open("mifichero.txt",ios::in); if (fi.is_open()) { fi >> numentero; while (!fi.eof()) { fi >> numreal; // hacer algo con ’numentero’ y ’numreal’ fi >> numentero; // lectura "extra" ? } fi.close(); }
Escritura de un fichero de texto Tema 3
Ficheros de texto Definición Declaración
ofstream fo;
Apertura y cierre Lectura Escritura Ejercicios
Ficheros binarios Definición
fo.open("mifichero.txt",ios::out); if (fo.is_open()) { fo