Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Practica de Archivos PDF
Practica de Archivos PDF
Acceder a archivos de texto plano (.txt) con las funciones de la librera fstream.h de C++.
Manejar las operaciones bsicas con los flujos entrada (ifstream) y de salida (ofstream) de
archivos.
Utilizar las funciones de manejo de archivos disponibles en librera fstream.h.
Escribir y leer datos de archivos de texto en C++.
Utilizar funciones de conversin de tipos de datos proporcionados por librera stdlib.h.
ARCHIVOS Y STREAMS
Un archivo finaliza ya sea con una marca de end-of-file (eof) o en un byte determinado (tamao
del archivo) en una estructura de datos administrada por el sistema operativo (como un archivo en
un directorio).
Cuando un archivo se abre, se instancia un objeto archivo del tipo adecuado y un stream (tambin
llamado nombre de archivo lgico) es asociado con este objeto.
Para realizar estas acciones en C++ deben incluirse los archivos <iostream> y <fstream>
APERTURA DE ARCHIVOS
Se define una variable (por ejemplo archivo) para administrar el flujo de acceso al archivo
(ofstream) por ejemplo:
ofstream archivo;
Luego se invoca al mtodo open con el parmetro apropiado segn la siguiente sintaxis:
archivo.open(ejemplo.txt,ios::out|ios::app|ios::binary);
Por ejemplo:
ofstream archivo(ejemplo.bin,ios::out|ios::app|ios::binary);
FUNCIONES DE ARCHIVOS
archivo.close(): Se encarga de vaciar los buffer que usa el archivo y cerrar el acceso al
archivo
1 T/23/11/2017
UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN
ESCUELA PROFESIONAL DE INGENIERA EN INFORMATICA Y SISTEMAS FACULTAD DE INGENIERIA
CURSO : PROGRAMACIN AVANZADA
AO DE ESTUDIOS : SEGUNDO CICLO
OPCIONES DE ESTADO: Permiten conocer el estado de los flujos de datos del contenido de un
archivo.
o bad(): Retorna true si ocurre una falla en las operaciones de lectura o escritura. Por
ejemplo en caso de que tratemos de escribir en un archivo que no est abierto para
escritura.
o fail(): Retorna true en los mismos casos que bad() y adems en caso de que ocurra un
error de formato, como tratar de leer un nmero entero y obtener una letra.
o eof(): Retorna true si el archivo abierto ha llegado a su fin.
o good(): Es el ms genrico. Retorna false en los mismos casos en los que al llamar a las
funciones previas se hubiera obtenido true.
void main(void)
{
ofstream ejemplo("ejemplo.txt"); //crea un archivo de salida
if(ejemplo.good()) //comprueba si el archivo esta abierto
{
//enviamos dos cadenas al archivo de salida
ejemplo<<"Esto es una linea.\n";
ejemplo<<"Esto es otra linea. \n";
void main(void)
{
char buffer[256];
ifstream ejemplo("ejemplo.txt");
if(!ejemplo.good())
{
cout<<"Error al abrir el archivo";
}
2 T/23/11/2017
UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN
ESCUELA PROFESIONAL DE INGENIERA EN INFORMATICA Y SISTEMAS FACULTAD DE INGENIERIA
CURSO : PROGRAMACIN AVANZADA
AO DE ESTUDIOS : SEGUNDO CICLO
else
{
while(!ejemplo.eof())
{
ejemplo.getline(buffer,100);
cout<<buffer<<endl;
}
system("pause");
}
}
Gracias al registro de datos dentro de archivos de texto, se logra almacenar diferente tipo de
informacin en los mismos, por ej.: fechas, nombres, descripciones, cantidades, distancias, etc.
Como complemento a esta interaccin con informacin almacenada en archivos, se necesita
conocer un conjunto de funciones definidas en la librera stdlib.h, que permiten convertir texto
en representaciones numricas y viceversa. A continuacin se describen las ms utilizadas.
Funcin itoa()
Convierte un valor entero (value) a una cadena de caracteres (str), indicando opcionalmente a la
base (Base) del sistema numrico en la que se expresar la respuesta. Ejemplo:
int n;
char buffer[33];
cout<<"Ingrese un numero entero: "; cin>>n;
itoa(n,buffer,10);
cout<<"decimal es "<<buffer;
itoa(n,buffer,16);
cout<<endl<<"hexadecimal sera "<<buffer;
itoa(n,buffer,2);
cout<<endl<<"binario sera "<<buffer;
Funcin atoi()
3 T/23/11/2017
UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN
ESCUELA PROFESIONAL DE INGENIERA EN INFORMATICA Y SISTEMAS FACULTAD DE INGENIERIA
CURSO : PROGRAMACIN AVANZADA
AO DE ESTUDIOS : SEGUNDO CICLO
La cadena puede contener caracteres adicionales despus de los que forman el nmero entero,
que seran ignorados y no tienen ningn efecto sobre el comportamiento de esta funcin.
Si el inicio de la secuencia de caracteres en str (que no sean espacios en blanco) no representan
un nmero entero vlido, o si no existe tal secuencia, ya sea porque str est vaco o slo
contiene espacios en blanco, la conversin no se realiza y la funcin devuelve cero (0).
Ejemplo:
int i;
char buffer[5];
cout<<"Ingrese un numero entero: ";
cin>>buffer;
i=atoi(buffer);
i=i*2;
cout<<"El doble del valor ingresado es: "<<i;
Funcin atof()
Ejemplo de uso:
double n,m;
double pi=3.1415926535;
char buffer[20];
cout<<"Ingrese valor de grados sexagesimales: ";
cin>>buffer;
n=atof(buffer); //convierte cadena buffer a valor double
m=sin(n*pi/180); //convierte numericamente a grados radianes
cout<<"Valor de "<<n<<" grados sexagesimales en radianes son: "<<m;
Ejemplo de salida:
III. PROCEDIMIENTO
PREPARAR UNA CARPETA DENOMINADA ARCHIVOS, EN LA CUAL GUARDAR CADA UNO DE LA CPPS DEL
PROCEDIMIENTO Y DE LOS PROBLEMAS A RESOLVER.
4 T/23/11/2017
UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN
ESCUELA PROFESIONAL DE INGENIERA EN INFORMATICA Y SISTEMAS FACULTAD DE INGENIERIA
CURSO : PROGRAMACIN AVANZADA
AO DE ESTUDIOS : SEGUNDO CICLO
Crear un nuevo archivo de cdigo fuente denominado ejemplo1 y digite el siguiente cdigo
#include <iostream.h>
void main(void)
{
ofstream archivo; //crea un objeto de la clase ofstream
char nom[25];
cout<<"DEMOSTRACION ACCESO A UN ARCHIVO DE TEXTO\n";
Ejecute el programa anterior. Observe que la aplicacin le indica que se ha logrado acceso al
archivo para escritura. Por ser la 1er vez que ejecuta el programa, ofstream crea el archivo
agenda.txt.
Ingrese al archivo de texto agenda.txt para confirmar el contenido del archivo y cierre la ventana
del editor de texto
5 T/23/11/2017
UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN
ESCUELA PROFESIONAL DE INGENIERA EN INFORMATICA Y SISTEMAS FACULTAD DE INGENIERIA
CURSO : PROGRAMACIN AVANZADA
AO DE ESTUDIOS : SEGUNDO CICLO
Vuelva a ejecutar el programa y este le solicita nuevamente 2 nombres para escribir en archivo.
Abra nuevamente el archivo agenda.txt y compare su contenido actual con el de la 1er ejecucin.
Cerrar ventana del archivo agenda.txt y retornar al editor de C++. Cambia el nombre del archivo
agenda.txt, para intentar crear el archivo de texto en la raz del sistema de archivos del disco
duro.
Retorne al cdigo fuente del programa y restaure el nombre del archivo a crear como
agenda.txt. Adems reemplazar el parmetro resaltando ios::out por el modo de agregar
archivo (ios::app).
Guardar los cambios del archivo cpp actual y hacer una copia del mismo bajo el nombre
Ejemplo2.
De este nuevo cpp, borre todo el contenido de la funcin main, excepto la ltima funcin
system(pause). Ahora har las pruebas de acceso a un archivo en modo Lectura, para obtener
la informacin almacenada en un archivo de texto ya existente.
Ejemplo:
if(!archivo2)
{
cout<<"-> Error, archivo imposible de abrir\n";
}
else
{
cout<<"-> Acceso exitoso para lectura de archivo ";
cout<<nombrearchivo<<"\nSu contenido linea x linea:\n";
//comienza proceso lectura archivo
//repetira lectura solo cuando no se alcance final contenido
while(!archivo2.eof())
{
archivo2>>lineatexto;
6 T/23/11/2017
UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN
ESCUELA PROFESIONAL DE INGENIERA EN INFORMATICA Y SISTEMAS FACULTAD DE INGENIERIA
CURSO : PROGRAMACIN AVANZADA
AO DE ESTUDIOS : SEGUNDO CICLO
cl++;
cout<<cl<<":\t"<<lineatexto<<endl;
}
archivo2.close(); //cierra acceso archivo de lectura
}
Guardar los cambios y compile el programa. Ante la solicitud del nombre del archivo, digitar
miagenda.txt.
El programa indicara que el archivo de no pudo abrir.
Repita el paso anterior, pero digite el nombre del archivo de texto ya existente (agenda.txt)
Del resultado devuelto, Qu es lo que realmente est leyndose del archivo con la lnea de
cdigo resaltada archivo2>>lineatexto?
Comente la lnea resaltada del paso anterior e inserte en su lugar este comando:
archivo2.getline(lineatexto,100);
Ejecute de nuevo el programa para leer contenido de archivo agenda.txt. Funciono esta vez la
lectura de las lneas del archivo?, Hay algn problema en el resultado visto en pantalla?
Crear un nuevo archivo cpp, para guardarlo bajo el nombre Ejemplo3. En este ejemplo, se permite
el ingreso de los datos de un total de n cuentas de ahorro, para luego ir agregndolos dato por
dato hacia un archivo de cuentas (llamado cliente.txt).
#include <iostream.h>
#include <fstream.h>
#include <stdlib.h>
#include <stdio.h>
void main(void)
{
//datos cuenta ahorro
int cuenta;
char nombre[15];
char apellido[15];
double saldo;
int n,i;
7 T/23/11/2017
UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN
ESCUELA PROFESIONAL DE INGENIERA EN INFORMATICA Y SISTEMAS FACULTAD DE INGENIERIA
CURSO : PROGRAMACIN AVANZADA
AO DE ESTUDIOS : SEGUNDO CICLO
cin>>n;
i=1; //inicia con empleado 1
//lee cuenta, nombre y saldo con cin
while(i<=n)
{
cout<<"\n\nDatos de Cuena (#"<<i<<"):\n";
cout<<"\nNumero de cuenta:\t"; cin>>cuenta;
cout<<"Nombres:\t"; gets(nombre);
cout<<"Apellidos:\t"; gets(apellido);
cout<<"Saldo inicial(S/.):\t"; cin>>saldo;
//escribe variables anteriores en el archivo de salida
archivoclientessalida<<cuenta<<endl<<nombre<<endl<<apellido<<endl
archivoclientessalida <<saldo<<endl;
i++; //proximo empleado a registrar
}
//cierra acceso archivo de escritura
archivoclientessalida.close();
cout<<"\nSE TERMINO DE AGREGAR DATOS AL ARCHIVO\n";
}
cout<<endl;
system("pause");
}
Compilar y ejecutar el programa anterior. Ingresar un total de 2 cuentas bancarias y luego ingresar
los respectivos datos de c/u. Al finalizar el programa, localizar archivo cuentas.txt en la carpeta de
trabajo y revisar su contenido.
Repetir el paso anterior, pero con datos de nuevas cuentas bancarias. Despus revisar
nuevamente el archivo de texto cuentas.txt y confirmar que la informacin se va acumulando al
final.
Crear un nuevo archivo cpp, para guardarlo bajo el nombre Ejemplo4. En este ltimo ejemplo, se
recupera la informacin sobre las cuentas bancarias registradas en el archivo de texto cuenta.txt
(creadas con el programa del ejemplo anterior).
#include <iostream.h>
#include <fstream.h>
#include <iomanip.h>
#include <stdlib.h>
#include <stdio.h>
void main(void)
{
//datos cuenta ahorro
char linea[10];
int cuenta;
char nombre[15];
char apellido[15];
double saldo;
int n,i;
8 T/23/11/2017
UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN
ESCUELA PROFESIONAL DE INGENIERA EN INFORMATICA Y SISTEMAS FACULTAD DE INGENIERIA
CURSO : PROGRAMACIN AVANZADA
AO DE ESTUDIOS : SEGUNDO CICLO
archivoclientesentrada.getline(linea,10);
cuenta=atoi(linea); //convierte cadena texto en valor entero
if(cuenta==0)
{
break; //finaliza while
}
archivoclientesentrada.getline(nombre,25);
archivoclientesentrada.getline(apellido,25);
archivoclientesentrada.getline(linea,9);
saldo=atof(linea); //convierte cadena texto en valor float
Compilar y ejecutar el programa. Confirmar que los datos mostrados en la consola son los mismos
almacenados en el archivo de texto cliente.txt.
Elabore el cdigo fuente de C++ que solucionen a cada uno de los problemas a continuacin:
Problema1.cpp:
Escriba un programa que lea una serie de caracteres y cree un archivo con ellos
9 T/23/11/2017
UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN
ESCUELA PROFESIONAL DE INGENIERA EN INFORMATICA Y SISTEMAS FACULTAD DE INGENIERIA
CURSO : PROGRAMACIN AVANZADA
AO DE ESTUDIOS : SEGUNDO CICLO
Problema2.cpp:
Escriba un programa que lea el nombre de un archivo y muestre su contenido por pantalla.
Problema3.cpp:
Escriba un programa que lea un archivo y lo copie hacia otro.
Problema4.cpp:
Lea 2 archivos y nalos hacia un tercer archivo.
Problema5.cpp:
Crear un programa que pida el salario base de n empleados. Calcule el salario neto de
c/empleado, tomando en cuenta que se le descuenta el 3% de impuesto y $60 por un seguro
contra accidentes.
Almacenar en un archivo de texto denominado planilla.txt a la siguiente informacin:
Informacin de cada uno de sus empleados: nombres, cdigo (formado por las 2 letras
iniciales de su 1er nombre y las 2 letras iniciales de su 1er apellido), su salario base y
salario neto.
Monto de la planilla a pagar, as como el sueldo neto promedio general
Importante:
Los registros deben ser almacenados en el archivo, ordenados por el 1er apellido de los
empleados.
El contenido del archivo debe quedar en un formato listo para imprimir, simulando una
tabla
10 T/23/11/2017