Archivos (Ficheros) - Departamento de Ingeniería Química

Anuncio
Programación
Instituto Tecnológico de Celaya
ARCHIVOS (FICHEROS)
Siempre que se usa una computadora, se utilizan archivos para almacenar la
información. Por ejemplo, cuando se crea un programa en C++, se crea un
archivo con extensión cpp que contiene el código del programa.
También se pueden utilizar archivos para almacenar los resultados que se
obtienen en un programa y para leer los datos que requiere un programa. Este
documento explica el uso de archivos I/O en C++.
Archivo I/O
El término I/O (Input/Output) se refiere a la “entrada” de datos y la “salida”
de resultados de un programa.
Hasta ahora, se han manejado la sentencia cout para “salida” de resultados y la
sentencia cin para “entrada” de datos a un programa. cout y cin envían los
mensajes o leen la información a/desde la pantalla de la computadora. El
mecanismo por el cual la información se lee y se envía a la computadora a
través de la pantalla se dice que es salida/entrada estándar.
Es posible, sin embargo, en lugar de enviar mensajes a pantalla enviarlos a un
archivo. De la misma forma, en lugar de leer datos a través de la pantalla, es
también posible leerlos desde un archivo.
Ambas formas son válidas y útiles. La diferencia es que cuando se utiliza la
salida a pantalla, la información se obtiene sólo en forma temporal, pues se
pierde cuando termina de ejecutarse el programa y la ventana desaparece. Por
otra parte, si los resultados se envían a un archivo, este archivo queda
guardado en el disco aún después de que el programa termina de ejecutarse.
Por ello se dice que los archivos son una forma de almacenar los datos en forma
permanente.
Los archivos que se guardan y se leen se dice que son de tipo texto, pues
pueden contener únicamente caracteres en código ASCII (como letras,
números, algunos símbolos, etc). Así, es posible editar archivos de este tipo con
Ingeniería Química
Programación
Instituto Tecnológico de Celaya
cualquier editor de texto (como Notepad, Wordpad, Word, etc.) siempre y
cuando se guarden como archivos de texto.
Cuando un programa envía información a un archivo, se dice que el archivo es
de escritura. Cuando un programa lee información desde un archivo, se dice
que el archivo es de lectura.
TIPOS DE ARCHIVOS I/O
Además de la clasificación en lo que respecta a si el archivo es de escritura o de
lectura, los archivos I/O se clasifican en dos categorías: Archivos secuenciales o
archivos de acceso aleatorio.
Archivos Secuenciales
En estos archivos, la información sólo puede leerse y escribirse empezando
desde el principio del archivo. Los archivos secuenciales tienen algunas
características que hay que tener en cuenta:
1. La escritura de nuevos datos siempre se hace al final del archivo.
2. Para leer un dato concreto del archivo hay que avanzar siempre hasta donde
se encuentre dicho dato. Si el dato requerido se encuentra antes del dato en
que está se está posicionado el archivo en un momento dado, será necesario
regresar al comienzo del archivo y avanzar hasta el dato necesario.
Archivos de Acceso Aleatorio
Los archivos de acceso aleatorio son más versátiles, permiten acceder a
cualquier parte del archivo en cualquier momento, como si fueran arreglos en
memoria. Las operaciones de lectura y/o escritura pueden hacerse en cualquier
punto del archivo.
En realidad C++ no distingue si los archivos que usamos son secuenciales o de
acceso aleatorio, es el tratamiento que hagamos de ellos lo que los clasifica
como de uno u otro tipo. En el curso se considerará sólo el caso en el que el
archivo se lee en orden desde el principio hasta el final (archivos secuenciales).
Ingeniería Química
Programación
Instituto Tecnológico de Celaya
DECLARACIÓN DE ARCHIVOS I/O Y APLICACIONES
Si se recuerda, las instrucciones cin y cout se definen en la librería iostream.h,
y es por ello que siempre incluimos esa librería en nuestro programa. En forma
similar, cuando se desea usa archivos I/O, es necesario incluir la librería
fstream.h, es decir, se debe incluir en el programa:
#include <fstream.h>
Asimismo, cin y cout pueden verse como dos comandos que ya han sido
definidos y que “conectan” la información del programa con la pantalla del
computador.
Si se quiere que la información se “conecte” con un archivo es
necesario declarar dos nuevos comandos que sirvan para ese propósito y que se
puedan usar en lugar de cin y cout. Una declaración típica que se realiza es la
siguiente:
ifstream in_stream;
ofstream
out_stream;
Esto puede interpretarse como una declaración de dos “comandos” (in_stream y
out_stream) que pueden utilizarse en lugar de cin y cout.
ifstream (“input-file-
stream”) y ofstream(output-file-stream) se encuentran definidos en la librería
fstream.h.
Si se realiza la declaración anterior, entonces sería posible utilizar in_stream y
out_stream exactamente como se han usado cin y cout. La diferencia es que la
salida de resultados y la entrada de datos se harían a y desde un archivo,
respectivamente. Por ejemplo:
int numero;
in_stream>>numero; /* Lee el valor de numero desde un archivo*/
out_stream<<”El numero es “>>numero>>”\n”;/*Escribe datos a un archivo*/
Ingeniería Química
Programación
Instituto Tecnológico de Celaya
Ahora, en el ejemplo anterior se habla de que se escribe y se lee a y desde un
archivo. ¿Desde/de cuál archivo?
La respuesta a esa pregunta se debe de
incluir en el programa a través de instrucciones como la siguiente:
in_stream.open(“entrada.dat”);
out_stream.open(“salida.dat”);
Instrucciones como las anteriores se deben de incluir en el programa antes de
usar in_stream y out_stream. Lo que las dos instrucciones anteriores no están
indicando es que el programa utilizará un archivo denominado entrada.dat para
leer datos y que va a escribir los resultados en un archivo llamado salida.dat.
Se dice que las instrucciones anteriores están “abriendo” archivos para que
éstos puedan ser usados para leer o escribir datos.
Por último, una vez que el programa se ha ejecutado, es necesario “cerrar” los
archivos que se “abrieron”. Para ello se utiliza:
in_stream.close();
out_stream.close();
Resumen de Sentencias e Instrucciones para Usar Archivos I/O
1) Incluir la librería correspondiente:
#include <fstream.h>
2) Seleccione los nombres para dos comandos que utilice en lugar de cin y cout
para leer y escribir de/desde un archivo. Si por ejemplo selecciona a_ent
(para entrada en lugar de cin) y a_sal (para salida en lugar de cout), deberá
declararlos como:
ifstream a_ent;
ofstream a_sal;
Ingeniería Química
Programación
Instituto Tecnológico de Celaya
3) Conecte los comandos al archivo en que quiera guardar los resultados o al
archivo del cual quiera leer los datos. Suponga que se quieren guardar los
datos en un archivo llamada salida.dat y se quieren leer los datos desde el
archivo entrada.dat. Se deberá usar entonces:
a_ent.open(“entrada.dat”);
a_sal.open(“salida.dat”);
4) A partir de entonces, cada vez que use a_sal es como usar cout, pero la
salida es al archivo, y cada vez que use a_ent es como usar cin, pero la
lectura de datos es desde el archivo. Ejemplo:
a_ent>>variable;
a_sal<<variable2;
5) Cierre los archivos luego de utilizarlos:
a_ent.close();
a_sal.close();
Ingeniería Química
Programación
Instituto Tecnológico de Celaya
EJEMPLO
#include <fstream.h>
#include<iostream.h>
#include<stdlib.h>
int main()
{
/* Este programa pide 3 numero a un usuario y luego los escribe en
el archivo salida.dat */
int x[3];
ofstream csalida;
csalida.open(“salida.dat”);
/* Observe que cin y cout se pueden seguir usando como antes */
cout<<”Dame el valor de 3 numeros enteros \n”
<<”Presiona Enter despues de cada uno \n”;
cin>>x[0]>>x[1]>>x[2];
/* Escribir los valores en el archivo */
csalida<<x[0]<<”\t”<<x[1]<<”\t”<<x[2]<<”\n”;
/* Cierra el archivo */
csalida.close();
system(“PAUSE”);
return 0;
}
Ingeniería Química
Descargar