0% encontró este documento útil (0 votos)
28 vistas7 páginas

Prаctica 4 - Archivos Secuenciales

El documento habla sobre la gestión básica de archivos en C++. Explica conceptos como la definición de archivo, la importancia de los archivos, los tipos de archivos, la apertura, cierre, escritura y lectura de archivos de texto secuencial. Incluye ejemplos de código para mostrar cómo abrir, escribir y leer archivos de texto en C++.

Cargado por

José Sansonetti
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como ODT, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
28 vistas7 páginas

Prаctica 4 - Archivos Secuenciales

El documento habla sobre la gestión básica de archivos en C++. Explica conceptos como la definición de archivo, la importancia de los archivos, los tipos de archivos, la apertura, cierre, escritura y lectura de archivos de texto secuencial. Incluye ejemplos de código para mostrar cómo abrir, escribir y leer archivos de texto en C++.

Cargado por

José Sansonetti
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como ODT, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 7

Procesamiento de Datos I Lic.

Juan Espinoza
ARCHIVOS EN C++

Práctica 1:

 Archivos: Definición.
 Importancia de los archivos.
 Tipos de archivos.
 Apertura de archivos.
 Cierre de archivos.
 Escritura de archivos de texto secuencial. Ejemplos.
 Lectura de archivos de texto secuencial. Ejemplo.
 Ejercicios.

Este tema abarca la gestión básica de ficheros (también llamados


archivos) en C++ y lo haremos a partir del concepto de flujo.

Se estudiara cómo declarar los identificadores que establecen el modo


de flujos de los ficheros (de entrada o salida básicamente). Se verán las
características básicas que nos permitirán trabajar con ficheros (también
llamados archivos).

• Definición de Archivo:

Es una colección de elementos lógicamente relacionados y almacenados


en memoria secundaria. A más bajo nivel, un archivo es una secuencia de
bits almacenado en algún dispositivo externo (como por ejemplo uno de
memoria secundaria).En dichos casos se utilizarán archivos para contener la
información en memoria secundaria (disco duro, disquetes, etc.).

En C++ un archivo es simplemente un flujo externo que se puede abrir


para entrada (dando lugar a un flujo de archivo de entrada que, para
simplificar, llamaremos simplemente archivo o fichero de entrada), para
salida (dando lugar a un flujo de archivo de salida que, para simplificar,
llamaremos simplemente archivo o fichero de salida) o para entrada-salida
(archivo o fichero de entrada-salida o archivo de E/S).

• Importancia de los archivos:

Todos los programas vistos hasta ahora trabajaban con información


almacenada en memoria principal, no obstante, hay situaciones en que esto
no es apropiado. Algunas de esas situaciones podrían ser:

1. Los datos con los que necesita trabajar el programa son demasiado
grandes (ocupan mucha memoria) para que entren en la memoria
principal.

2. Nos interesa mantener la información después de cada ejecución,


necesitamos utilizar datos procedentes de otros programas (editores,
etc.), o generar datos para que puedan ser utilizados por otros
programas.

• Tipos de archivos:

1
Procesamiento de Datos I Lic. Juan Espinoza

C++ soporta dos tipos de archivos: de texto y binarios. Los primeros


almacenan datos como códigos ASCII. Los valores simples, tales como números
y caracteres están separados por espacios. Los segundos almacenan bits de
forma directa y se necesita usar la dirección de una posición de
almacenamiento.

• Apertura de archivos:

Una biblioteca en C++ que proporciona “funciones” y operadores para el


manejo de archivos es la biblioteca fstream. En general emplearemos ésta
para la gestión básica de archivos por lo que deberemos incluir el archivo
de cabecera correspondiente en nuestros programas mediante la declaración
adecuada, o sea, incluyendo la directiva de preprocesamiento siguiente

#include <fstream.h>

La biblioteca fstream ofrece un conjunto de funciones y operadores


comunes a todas las operaciones de Entrada/Salida (E/S) de archivos.

Antes de que un programa pueda manipular un archivo para leer o


escribir información se debe abrir (o crear si es necesario) el archivo
para identificar la posición del mismo en el programa (o sea, la dirección
de memoria a partir de la cual almacenaremos o leeremos el contenido del
archivo). Ya hemos indicado anteriormente que los archivos son tratados
como flujos de entrada/salida por lo que, al igual que sucede con los
flujos estándares y por efecto cin y cout, la información “debe” ser
transferida en una sola dirección por lo que, salvo en ciertos casos, los
archivos deben abrirse bien para entrada o bien para salida.

Supongamos que tenemos un archivo cuyo nombre en el sistema operativo


es “nombre.extensión”. Entonces hay varias formas de abrirlo.

(A) Como archivo de entrada: Para ello empleamos la sentencia


ifstream descriptor (“nombre.extensión”);

(B) Como archivo de salida: Para ello empleamos la sentencia


ofstream descriptor (“nombre.extensión”);

En ambos casos descriptor es una variable de tipo fstream, que se asocia al


archivo cuyo nombre es “nombre.extensión”.

Comentario:
Observe que a partir de la apertura de un archivo, el descriptor del
archivo será utilizado en todas las operaciones que se realicen sobre el
archivo.

Otra forma de abrir un archivo para operar sobre él consiste en crear


primero el flujo de entrada asociado al mismo, o sea, en asociar una
variable descriptor a un archivo en una forma similar a como se declara una
variable en C++, es decir, mediante una sentencia tal como:

ifstream descriptor; // Para archivos de entrada


ofstream descriptor; // Para archivos de salida

2
Procesamiento de Datos I Lic. Juan Espinoza

y, posteriormente, abrir el archivo (en el modo deseado: de entrada o


salida por ejemplo) mediante el uso de la función open aplicada a ese flujo
de entrada, o sea en la forma

descriptor.open(“nombre.extensión”,int modo);

donde la variable modo indica el modo de apertura del archivo y los modos
de apertura, posiblemente combinados mediante el símbolo ‘|’ como veremos a
continuación, pueden ser:

ios:: in // Modo entrada


ios:: out // Modo salida
ios:: app // Modo añadir, o sea, posicionar el cursor del fichero al final
del fichero antes de cada escritura
ios:: binary // El archivo se abre en modo binario
ios:: ate // El archivo se abre y el cursor se posiciona al final
ios:: nocreate // Genera un error si el fichero no existe
ios:: noreplace // Genera un error si el fichero existe ya

• Cierre de archivos:

Un archivo anteriormente abierto y con un descriptor asociado a él debe ser


cerrado con el fin de liberar los recursos asociado a él de la siguiente forma:

descriptor.close()

• Escritura de archivos de texto secuencial

Un archivo abierto con ofstream puede serlo en dos modos:

1. Modo salida, usando ios::out. En este caso todos los datos en el archivo
se descartan (o sea, se borra el contenido del archivo si existe
previamente). Naturalmente si el archivo no existe lo crea. En ambos casos
el cursor del archivo (o sea, la cabeza de lectura/escritura del mismo) se
posiciona al principio del archivo

Este es el modo por defecto de apertura de un archivo de salida.

Ejemplo:

/*Programa que permite escribir información en un archivo secuencial de


texto.*/

#include<fstream.h>
#include<conio.h>

int main()
{
ofstream f;

f.open("archivo.txt", ios::out);

if(!f)

3
Procesamiento de Datos I Lic. Juan Espinoza
{
cerr<<"Error de apertura del archivo";
getch();
return 1;
}
else
{
f<<"Linea1"<<endl;
f<<"Linea2"<<endl;
f<<"Linea3"<<endl;
}

f.close();

cout<<"Los datos se han almacenado en ARCHIVO.TXT";


getch();
return 0;
}

Descripción:

Podemos observar en el ejemplo que se crea un descriptor para la


escritura en el archivo, a través de la sentencia ofstream f, y luego
empleando la función open se le especifica a través del modo ios::out que
el flujo será de escritura.

Es necesario verificar si el archivo se creo satisfactoriamente, esto


de forma abreviada se realiza con la instrucción if(!f).

Luego en caso de apertura exitosa, se procede a escribir registros en


el archivo, utilizando los operadores (<<) para la escritura de datos en el
archivo.

Un paso muy importante al trabajar con archivos consiste en cerrar el


archivo cuando este ya no sea necesario, empleando la función miembro
close().

2. Modo añadir, usando ios::app. En este caso los datos adicionales se


añaden a partir del final del fichero (o sea, el cursor se sitúa al final
del fichero y es ahí a partir de donde se empieza a realizar la escritura).

Ejemplo:

/*Programa que permite añadir información en un archivo secuencial de


texto.*/

#include<fstream.h>
#include<conio.h>

int main()
{
ofstream f;

4
Procesamiento de Datos I Lic. Juan Espinoza
f.open("archivo.txt", ios::out | ios::app);

if(!f)
{
cerr<<"Error de apertura del archivo";
getch();
return 1;
}
else
{
f<<"Linea4"<<endl;
f<<"Linea5"<<endl;
}

f.close();

cout<<"Los datos se han agregado en ARCHIVO.TXT";


getch();

return 0;

Descripción:

Para añadir datos en un archivo ya existente, simplemente le


establecemos como parámetro a la función open(), el modo ios::app.
Observamos que la función open() admite varios modos de apertura,
siempre y cuando estos vayan separados del operador lógico OR (|).

• Lectura de archivos de texto secuencial

Para abrir un archivo y realizar operaciones de lectura se crea un


objeto de la clase ifstream y se procede prácticamente de la misma forma
que lo expuesto en el apartado anterior. Después de abrir el archivo se
puede leer su contenido utilizando las funciones miembro de la clase
ifstream (como get(), getline() o read()), o bien el operador de extracción
(>>).
Cuando se lee un archivo, por lo general se empieza al principio del
mismo y se leerá su contenido hasta que se encuentre el final del archivo.
Para determinar si se ha llegado al final del archivo se puede utilizar la
función miembro eof como condición de un bucle while.

Ejemplo:

/*Programa que permite leer información en un archivo secuencial de


texto.*/

#include<fstream.h>
#include<conio.h>

int main()

5
Procesamiento de Datos I Lic. Juan Espinoza
{
int n=0;
char lineas[6][10];

ifstream f;

f.open("archivo.txt", ios::in);

if(!f)
{
cerr<<"Error de apertura del archivo";
getch();
return 1;
}
else
{
while(!f.eof())
{
f>>lineas[n];
n++;
}
}

f.close();

cout<<"El contenido de ARCHIVO.TXT es: \n";

for (int i=0; i<n; i++)


{
cout<<lineas[i]<<endl;
}

getch();
return 0;

Descripción:

En el código se observa que se crea un descriptor del tipo ifstream,


además que la función open() tiene como argumento el modo ios::in,
indicándole que el descriptor del archivo será empleado para la lectura del
mismo.
Para extraer los registros almacenados en el archivo, se emplea la
sentencia while(!f.eof()), que bien se podría plantear de la forma
while(f.eof()!=1), ya que la función miembro eof() tomará el valor de 1
cuando el archivo llegue a su final.

6
Procesamiento de Datos I Lic. Juan Espinoza
Ejercicios

1_ Escribir un programa que permita almacenar 10 números y almacenarlos en


un archivo llamado “numeros.txt”. El descriptor se debe crear y asociar al
archivo en una sola sentencia.

2_ Escribir un programa que permita añadir al archivo “numeros.txt”, cinco


números.

3_ Escribir un programa para la lectura del archivo “numeros.txt”. Luego


almacenar los valores en un arreglo de 15 posiciones y obtener el promedio
de la serie de números.

4_ Escriba un programa llamado “empleado.cpp” que cree un archivo de texto


llamado "nomina.txt" en el que se guarde la información de 35 personas. La
información que se guardará por cada persona será: cédula, nombre, edad,
sexo y sueldo. Los campos se deben almacenar en el archivo separados
espacios en blanco, y cada registro debe estar del siguiente por un salto
de línea.

5_ En el programa “empleado.cpp” se debe incorporar la opción de agregar


nuevos registros al final del archivo, de modo que al ejecutarse varias
veces, los registros mantengan su orden de ingreso.

6_ En el programa “empleado.cpp” añadir la función que permita mostrar en


pantalla los registros almacenados en el archivo “nomina.txt”.

7_ Incorporar dos funciones de mostrar registros en el programa


“empleado.cpp”, las cuales consisten en:

o Mostrar sólo a las personas de sexo masculino.

o Mostrar sólo a las personas con cédulas menores a 15.000.000.

8_ Incorporar dos funciones que permitan actualizar el archivo “nomina.txt”

También podría gustarte