Está en la página 1de 27

OBJETIVO

El objetivo de la presente sesión es:

 Conocer a cerca de los archivos


 Tipo de archivos
 Tipo de acceso a los archivos
 Operaciones con archivos
 Funciones para manejo de archivos
 Ejemplo de aplicación

A L G O R I T M O S Y E S T R U C T U R A D E D AT O S 1
ARCHIVOS
Colección de información almacenados de distinta
naturaleza.
Esta información por lo general son datos relacionados
entre si.

ALGORITMOS Y ESTRUCTURA DE DATOS 2


ARCHIVOS
Esta información tradicional que se guarda en carpetas,
podemos guardar digitalmente en una unidad de
almacenamiento secundario (diskette, disco duro, CD,
memoria flash, la nube, etc).
El tamaño del archivo esta limitado solo por la capacidad
de la memoria secundaria disponible.

ALGORITMOS Y ESTRUCTURA DE DATOS 3


TIPO DE ARCHIVOS
C++ soporta 2 tipos de archivos.

Archivos de texto.
Archivo Binario.

Los archivos tipo texto almacenan información en


código ASCII (legible para al usuario). Es fácilmente
“vulnerable”
Los archivos binarios almacenan paquetes de bits en
forma directa y es necesario usar una dirección de una
posición de almacenamiento. Ocupa menos espacio, es
menos “vulnerable”.

ALGORITMOS Y ESTRUCTURA DE DATOS 4


TIPO DE ACCESO A LOS ARCHIVOS
Acceso Secuencial, exigen el tratamiento elemento
a elemento, es decir comenzando desde el primer
elemento (registro) hasta llegar al final.
Puntero de registro

m n o p q r

Elementos
Acceso aleatorio, permite acceder a un
elemento en particular(registro).
Puntero registro(posición)

ALGORITMOS Y ESTRUCTURA DE DATOS 5


APERACIONES CON ARCHIVOS
Operación de Lectura( Input, entrada), implica leer los
datos almacenados en el archivo.

Mem.
Ram

Operación de Escritura (output,salida), implicar grabar


los datos físicamente en el archivo.

Mem.
Ram

ALGORITMOS Y ESTRUCTURA DE DATOS 6


LIBRERÍA FSTREAM.H
Es una biblioteca de c++ que proporciona todas las
funciones y operadores para entrada y salida de
archivos.
Para manipular archivos es necesario crear objetos de
las clases ifstream y ofstream.
Estas clases están incluidos en la librería fstream.h

Creación de un objeto de Entrada (Lectura, Input)

ifstream <Nombre Objeto>;


Ejm.:
ifstream MiFile; // MiFile es de tipo ifstream

ALGORITMOS Y ESTRUCTURA DE DATOS 7


LIBRERÍA FSTREAM.H
Creación de un objeto de Salida (Escritura,
output)

ofstream <Nombre Objeto>;


Ejemplo:

#include <fstream.h>
int main()
{ ofstream File1; // File1 es de tipo ofstream
// instrucciones del programa
}
ALGORITMOS Y ESTRUCTURA DE DATOS 8
FUNCIONES VARIAS DE ARCHIVOS
Función open(), permite abrir un archivo en modo
output o input.
Al abrir un archivo se asocia el nombre del archivo físico
al objeto.

<Nombre Objeto>.open(<nombre archivo>[,<manipulador ios>]);

Donde:

Nombre de archivo: Es el nombre del archivo en si, y opcionalmente se


puede incluir la extensión, este debe estar separado del nombre del
archivo por el carácter punto.

ALGORITMOS Y ESTRUCTURA DE DATOS 9


FUNCIONES VARIAS DE ARCHIVOS
Ejemplo de nombre de archivos:

Planilla.dbf Almacen.xls Agenda.dat Costos

Nombre
de Extensión
archivo

El nombre de archivo puede ser una variable de cadena o


una constante de cadena, si es este, debe ir encerrado
entre comillas.

ALGORITMOS Y ESTRUCTURA DE DATOS 10


FUNCIONES VARIAS DE ARCHIVOS
El manipulador o indicador de modo esta dato por:

ios::in Abrir el archivo en modo entrada


ios::out Abrir el archivo en modo salida
ios::app Abrir el archivo en modo agregar mas registros
ios::ate Ir al final del archivo abierto
ios::binary Abrir el archivo en modo binario

ALGORITMOS Y ESTRUCTURA DE DATOS 11


FUNCIONES VARIAS DE ARCHIVOS
Función close(), permite cerrar una archivo abierto
<Nombre Objeto>.close();
Función eof(), devuelve verdadero si hemos alcanzado el
final del archivo y falso en caso contrario.
<Nombre Objeto>.eof()
Función fail(), devuelve verdadero si se produjo un error
al abrir un archivo.
<Nombre Objeto>.fail()
Función peek(), permite saber el carácter al cual apunta
el puntero de archivo, se usa en lectura de datos.
<Nombre Objeto>.peek()

ALGORITMOS Y ESTRUCTURA DE DATOS 12


FUNCIONES VARIAS DE ARCHIVOS
Función get(), permite leer carácter por carácter la
información del archivo.
<Nombre Objeto>.get(<variable>);
Función put(), permite escribir carácter por carácter en el
archivo.
<Nombre Objeto>.put(<variable o constante>);
Función getline(), permite la lectura de toda una línea
desde el archivo y almacenar en una variable.
<Nombre Objeto>.getline(<variable>,<n>,<car. final>);
Constante EOF, usado para verificar si el puntero de
archivo apunta al final del mismo, se emplea junto con la
función peek().
ALGORITMOS Y ESTRUCTURA DE DATOS 13
ABRIR UN ARCHIVO
Apertura de un Archivo de Salida (Escritura, output)
Al abrir un archivo para escritura, se crea uno nuevo, de
existir el archivo, el contenido se perderá.

Ejemplo:

#include <fstream.h>
int main()
{ ofstream File1; // File1 es de tipo ofstream
File1.open(“Notas.txt”); // Abre el archivo Notas para salida
}

ALGORITMOS Y ESTRUCTURA DE DATOS 14


ABRIR UN ARCHIVO
Apertura de un Archivo de Entrada (Lectura, Input)
Al abrir un archivo para lectura, este debe existir.

Ejemplo:

#include <fstream.h>
int main()
{ ifstream MiFile; // MiFile es de tipo ifstream
MiFile.open(“Versos.txt”); // Abre el archivo Versos para lectura
}

ALGORITMOS Y ESTRUCTURA DE DATOS 15


ABRIR UN ARCHIVO
Apertura de un Archivo de Entrada (Lectura, Input) y
salida (escritura, output)

Ejemplo:

#include <fstream.h>
int main()
{ fstream F1;
F1.open(“Carta.txt”, ios::in | ios::out); // Abre el archivo Carta
en modo lectura y escritura
}

ALGORITMOS Y ESTRUCTURA DE DATOS 16


ABRIR UN ARCHIVO
Apertura de un Archivo para Salida (Escritura, output) y
agregar registros
Si abre un archivo para escritura y desea agregar mas
registros al final del archivo, use el ios::app

Ejemplo:

#include <fstream.h>
int main()
{ ofstream Mi;
Mi.open(“Versos.txt”, ios::app); // Abre el archivo Versos para
escritura y apendizar
} ALGORITMOS Y ESTRUCTURA DE DATOS 17
ESCRITURA EN UN ARCHIVO TIPO TEXTO
Implica grabar la información contenidas en la memoria
para luego escribir en el archivo.
Para ello se usa el operador de flujo de salida << o la
funcion put().

<Nombre Objeto> << <Variable o expresion>;

Si existe mas de una variable o expresión , los mismos


deben ir separados por un espacio en blanco,
tabulación o un manipulador al momento de escribir en
el archivo.

ALGORITMOS Y ESTRUCTURA DE DATOS 18


LECTURA DE DATOS DE UN ARCHIVO TIPO TEXTO
Implica leer la información desde el archivo y cargarlo
hacia la memoria ram y almacenarlo en las variables.
Para ello se usa el operador de flujo de entrada >> o la
funcion get(), getline().

<Nombre Objeto> >> <Variable>;

Es posible incluir mas de una variable, para ello las


variables deben estar precedido del operador de flujo (>>).

ALGORITMOS Y ESTRUCTURA DE DATOS 19


EJEMPLO DE APLICACIÓN
//Programa que almacena los datos de N alumnos y luego lo muestra
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <fstream>
using namespace std;
const int M=15, N=25; // Longitud maximo para la descripcion del
producto
int main()
{ char mFile[M]="Notas.dat";
char cod[8],ApePat[N],ApeMat[N],Nom[N],obs[11];
float n1,n2,n3,prom;
ifstream F2; // Crea el objeto Archi para Lectura
ofstream F1; // Crea el objeto Archi para Escritura
F1.open(mFile); // Abre un archivo con un nombre externo
ALGORITMOS Y ESTRUCTURA DE DATOS 20
EJEMPLO DE APLICACIÓN
if(F1.fail())
{ cout<<"El Archivo no se puede abrir con exito\n“;
cout<<"Verifique si el archivo existe"<<endl;
exit(1);
}
cout<<"El archivo se abrio con exito para Escritura\n";
cout<<"Codigo o Enter para finalizar..... ";gets(cod);
for(;strlen(cod)!=0;)
{ cout<<"Apellido Paterno:";fflush(stdin);gets(ApePat);
cout<<"Apellido Materno:";gets(ApeMat);
cout<<"Nombres :";gets(Nom);
cout<<"Nota 1 :";cin>>n1;

ALGORITMOS Y ESTRUCTURA DE DATOS 21


CONTINUACION ...
cout<<"Nota 2 :";cin>>n2;
cout<<"Nota 3 :";cin>>n3;
prom=(n1+n2+n3)/3;
if(prom>10.5)
strcpy(obs,"Aprobado");
else
strcpy(obs,"Desaprobado");
F1<<cod<<" "<<ApePat<<" "<<ApeMat<<" "<<Nom<<" "<<n1<<
“ "<<n2<<" "<<n3<<" "<<prom<<" "<<obs<<endl;
cout<<"Codigo o Enter para finalizar..... ";gets(cod);
}
//Cerrando el archivo
F1.close();

ALGORITMOS Y ESTRUCTURA DE DATOS 22


CONTINUACION...
F2.open(mFile);
cout<<"Codigo\tApellidosy Nombres\tEvaluaciones\tPromedio\tObserv.\n";
F2>>cod; // Lectura Adelantada
while(!F2.eof())
{ F2>>ApePat>>ApeMat>>Nom>>n1>>n2>>n3>>prom>>obs;
cout<<cod<<"\t"<<ApePat<<"\t"<<ApeMat<<"\t"<<Nom<<"\t"<<n1<<"\t"
<<n2<<"\t"<<n3<<"\t"<<prom<<"\t"<<obs<<endl; F2>>cod;
}
//Cerrando el archivo
F2.close();
}

ALGORITMOS Y ESTRUCTURA DE DATOS 23


APLICACIÓN CON EOF, PEEK Y GETLINE
//Programa que almacena los datos de N alumnos y luego lo muestra
#include <iostream>
#include <fstream>
#include <string.h>
#include <stdio.h>
using namespace std;
const int M=15,n=25; // Longitud maximo para la descripcion de
Apellidos y Nombres
const int T=80;
int main()
{ char mFile[M]="Notas.txt";
char cod[8],ApePat[N],ApeMat[N],Nom[N],obs[11];
char registro[T];
float n1,n2,n3,prom;
ifstream F2; // Crea el objeto Archi para Lectura
ofstream F1; // Crea el objeto Archi para Escritura
F1.open(mFile); // Abre un archivo con un nombre externo

ALGORITMOS Y ESTRUCTURA DE DATOS 24


APLICACIÓN CON EOF, PEEK Y GETLINE
if(F1.fail())
{ cout<<"El Archivo no se puede abrir con exito\n"
<<"Verifique si el archivo existe"<<endl;
exit(1);
}
cout<<"El archivo se abrio con exito para Escritura\n";
cout<<"Codigo o Enter para finalizar..... ";gets(cod);
for(;strlen(cod)!=0;)
{ cout<<"Apellido Paterno:";fflush(stdin);gets(ApePat);
cout<<"Apellido Materno:";gets(ApeMat);
cout<<"Nombres :";gets(Nom);
cout<<"Nota 1 :";cin>>n1;
cout<<"Nota 2 :";cin>>n2;
cout<<"Nota 3 :";cin>>n3;

ALGORITMOS Y ESTRUCTURA DE DATOS 25


CONTINUACION...
prom=(n1+n2+n3)/3;
if(prom>10.5)
strcpy(obs,"Aprobado");
else
strcpy(obs,"Desaprobado");
F1<<cod<<" "<<ApePat<<" "<<ApeMat<<" "<<Nom<<“ “ <<n1<<“ “
<<n2<<" "<<n3<<" "<<prom<<" "<<obs<<endl;
cout<<"Codigo o Enter para finalizar..... ";gets(cod);
}
//Cerrando el archivo
F1.close(); F2.open(mFile);
cout<<"Codigo\tApellidos y
Nombres\tEvaluaciones\tPromedio\tObserv.\n";
while(F2.peek()!=EOF)
F2.getline(registro,T,'\n'); cout<<registro<<endl;
F2.close(); //Cerrando el archivo
}
ALGORITMOS Y ESTRUCTURA DE DATOS 26
SALIDA DE RESULTADOS

ALGORITMOS Y ESTRUCTURA DE DATOS 27

También podría gustarte