Tema 3: Ficheros en C++

Tema 3 Ficheros de texto Definición Declaración Apertura y cierre Tema 3: Ficheros en C++ Lectura Escritura Ejercicios Programación 2 Ficheros bi...
143 downloads 2 Views 401KB Size
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