Professional Documents
Culture Documents
is tream
is trstr eam
ostr eam
is tream _w ithasign
if stream
ostrstr eam
io stream
fstr eam
str stream
stdiostr eam
Pgina 1 de 11
ofstr eam
Los manipuladores pueden tener argumentos o no tenerlos. Los manipuladores sin argumentos (endl,
flush, etc.) estn definidos en <iostream>.
Los que tienen argumentos estn definidos en <iomanip>.
Un manipulador solo afecta al flujo (cin, cout, etc.) al que se aplica. Ver la tabla 1.
Tabla 1: Manipuladores de entrada/salida
Manipulador
Descripcin
dec, hex, oct
Establecer base para enteros
ws;
Saltar los blancos iniciales
endl;
Imprimir un \n y vaciar el buffer de salida
flush;
Se vaca el buffer de salida
setw(int w);
Establecer ancho mnimo de campo
setprecision(int p);
Establecer nmero de cifras
setfill(char c);
Establecer un carcter de relleno
setios(long i)
Equivalente a setf()
unsetios(int I)
Equivalente a unsetf()
Entrada/Salida de archivos
Para almacenar y recuperar datos de un archivo creado en C++ se requieren tres elementos:
Un archivo
Un objeto en el flujo de archivos
Un modo
Un Archivo es un conjunto de datos relacionados que se guardan fsicamente bajo un nombre nico
(nombre externo) en un dispositivo de memoria secundaria como discos, cintas CD ROM y similares. Al
respecto vea la Figura 2.
Flujo de entrada de datos
#include <fstream.h>
int main( )
{
...
Programa en C++
Unidad de disco
Pgina 2 de 11
de flujo de archivo son el nombre interno del objeto archivo. Los objetos de estas clases se declaran como
sigue,
ifstream archivo_in; /* archivo_in es el objeto de flujo de archivo para entrada */
ofstream archivo_out; /* archivo_out es el objeto de flujo de archivo para salida */
Las clases ifstream y ofstream son derivadas de la clase fstream. Los objetos de flujo de archivo tienen
acceso a funciones predeterminadas o mtodos definidos en sus respectivas clases. As; se tienen open( )
para abrir archivo, fail( ) averiguar si se realiz con xito la conexin al archivo y close( ) para cerrar el
archivo entre otras que vera ms adelante. Todas estas funciones conectan el nombre externo del archivo
con el nombre interno del archivo. Al respecto pruebe los siguientes programas
Ejemplo 1
/* Programa que solicita las notas de un alumno y calcula su promedio. El
resultado es guardado en un archivo texto.
*/
#include <iostream>
#include <fstream> // para objetos de flujo de archivo
#include <stdlib.h> // para exit()
using namespace std;
int main()
{
ofstream escribe; // Objeto logico para escribir en un archivo
char codigo[9]; // Codigo del alumno
cout<<"Codigo alumno? ";
cin.getline(codigo, 9);
// Asociar el objeto del flujo al archivo fisico
escribe.open("codigo.txt");
// Probar el flujo
if (escribe.fail())
{ cerr << "Error en la apertura del flujo de archivo...!\n";
cin.get();
exit(1);//cierra el programa y devuelve el control al Sistema Operativo
}
// Variables locales
char Curso[80]; // nombre del curso
int ep, ef, prac[4], i;
// Solicitar datos
cout<<"Curso? ";
cin.getline(Curso, 80);
cout<<"Examen parcial? ";
cin >> ep;
cout<<"Examen final? ";
cin >> ef;
cout<<"4 Notas practica? ";
for (i = 0; i< 4; i++)
cin >> prac[i];
// Almacenar en el archivo
escribe << "Codigo: " << codigo << endl;
escribe << "Curso: " << Curso << endl;
escribe << "Examen Parcial: " << ep << endl;
escribe << "Examen Final: " << ef << endl;
escribe << "Practicas: ";
for (i = 0; i< 4; i++)
escribe << prac[i] << " ";
escribe << endl;
// Sacando promedio de practicas
double acum = 0;
for (i = 0; i< 4; i++)
acum += prac[i];
Pgina 3 de 11
double pp = acum/4;
escribe << "Promedio Final: " <<(ep + ef + pp)/3.0<<endl;
cout << "Los datos se guardaron con exito..." << endl;
escribe.close(); // cerrando el flujo
return 0;
Pgina 4 de 11
Ejemplo 2
Objetos fstream
Pgina 5 de 11
Cuando se utiliza la funcin miembro de la clase fstream, como por ejemplo la funcin fopen() se requiere
de dos argumentos; uno el nombre externo del archivo y otro el indicador de modo para la apertura. Al
respecto vea la tabla 2.
Tabla 2: Indicadores de modo
Indicador de modo
Descripcin
ios :: in
Abrir en modo de entrada de datos (Lectura)
ios :: out
Abrir en modo salida de datos (Escritura)
ios :: app
Abrir en modo agregar (Escritura/Lectura)
ios :: ate
Ir al final de un archivo abierto
ios :: binary
Abrir en modo binario
ios :: trunc
Elimina el contenido de un archivo si este existe
ios :: nocreate
Si el archivo no existe, fall abrirlo
ios :: noreplace
Si el archivo existe, fallo para abrir la salida de datos
Lectura y escritura de archivos
Los datos enviados al flujo de archivo de salida de datos pueden formatearse de la misma manera que se
hace con el flujo estndar de salida de datos cout. Por ejemplo, si un flujo de salida de datos llamado
arhivo_out fue previamente declarado, se puede usar la siguiente instruccin
archivo_out<<setiosflags(ios::fixed)
<<setiosflags(ios::showpoint)
<<setprecision(2);
dar formato a todos los datos insertados en el flujo archivo_out de la misma forma que lo haran esos
manipuladores en cout. Al respecto se tienen
ios::fixed; ocasiona que el flujo extraiga todos los datos numricos en notacin convencional de punto
fijo(sin exponente).
ios::showpoint; indica al flujo que siempre debe insertarse un punto decimal.
setprecision(2); indica que siempre deben mostrarse dos valores decimales despus del punto decimal.
Ejemplo 3
Pgina 6 de 11
Pgina 7 de 11
Ejemplo 4: El siguiente programa abre el archivo del ejemplo anterior ymuestra su contenido en pantalla.
Ejemplo 5: Programa que genera un nuevo archivo de texto, pero esta vez sin encabezado.
Pgina 8 de 11
Ejemplo 6:
Teniendo el archivo TablaTrigo2.txt, el siguiente programa abre dicho archivo para lectura y con esta
informacin escribe en un nuevo archivo TablaTrigo3.txt, los datos del archivo anterior pero aadiendo
una nueva columna de datos que es el valor de la tangente de cada ngulo.
Pgina 9 de 11
Descripcin
Extrae el siguiente carcter en el flujo de insumo de
datos.
peek(variable_de_caracter)
put(expresion_de _caracter)
putback(expresion_de_carcter)
eof(void)
ignore(int n)
Pgina 10 de 11
EJERCICIOS
1. Escriba un programa tal que guarde en cada lnea del archivo Notas.txt, el cdigo, primer apellido,
segundo apellido y las cuatro notas de N alumnos.
2. Escriba un programa que abra el archivo anterior Notas.txt y guarde en cada lnea del archivo texto
Acta.txt, el cdigo, primer apellido, segundo apellido y el promedio del alumno. Las cuatro notas de un
alumno representan examen parcial, examen final, promedio de prcticas y promedio de laboratorio. La
frmula para calcular el promedio es PF = 0.25EP+0.35EF+0.2PP+0.2PL.
3. Se tiene un archivo de texto llamado marcas1.txt que contiene en cada una de sus lneas la marca de
un auto. Escribir un programa que permita crear otro archivo de texto llamado marcas2.txt de tal forma
que su contenido sea el mismo que el de marcas1.txt pero en orden contrario. En la solucin evite el
uso de arreglos de cadenas.
Por ejemplo:
Archivo marcas1.txt
Archivo marcas2.txt
Toyota
Mitsubishi
Volkswagen
BMW
Hyundai
Honda
Ford
Ford
Honda
Hyundai
BMW
Volkswagen
Mitsubishi
Toyota
4. Respecto al problema 6, escriba un programa que permita crear el archive marcas3.txt, el cual contiene
las marcas del archivo marcas1.txt, pero ordenadas ascendentemente.
5. Se tiene en el archivo texto datosTrab.txt los datos de para la planilla mensual de los trabajadores de la
empresa Construyendo SAC. En cada lnea del archivo se tiene: cdigo, apellido paterno, apellido
materno, nombre, horas trabajadas y tarifa por hora.
Escribir un programa tal que entre otras funciones tenga las siguientes
) Funcin que recibe el archivo de datos y crea un nuevo archivo donde se guardan en cada lnea:
cdigo, horas trabajadas, pago antes de descuento y pago despus de descuentos; de cada
trabajador. Para el pago se considera un descuento del 8% para la Seguridad Social y 10% para la
AFP.
b) Funcin que recibe el archivo de datos y procede a crear un nuevo archivo donde se guardan en cada
lnea el cdigo y el pago antes de descuentos ordenados de mayor a menor.
6. Escriba un programa que abra un archivo tipo texto; luego lo analice y en otro archivo imprima un
reporte, donde se guarden las estadsticas del primer archivo segn lo siguiente:
Caracteres: xx
Alfabeticos: xx
Maysculas: xx
Minsculas: xx
Consonantes: xx
Blancos: xx
Digitos: xx
Vocales: xx
De puntuacin: xx
Cinco letras ms usadas: ABCDE
Donde XX indica la cantidad de dichos caracteres y ABCDE las cinco letras ms usadas en el archivo
analizado.
Referencias
1.
Deitel H.M. y Deitel P.J. (2009). "C++ Cmo Programar". Mxico. Prentice-Hall Hispanoamericana., 1320 p.
2.
Eckel, Bruce (2000) Thinking In C++ U.S.A. 2nd. Edition Volume 1. MindView Inc.
3.
Joyanes Aguilar Luis (2000). Programacin en C++ Algoritmos, estructuras de datos y objetos Madrid.
McGraw Hill/Interamericana de Espaa S.A. 710p.
4.
Ruiz Lizama, Edgar (2009). "Programacin con C++" Lima, Fondo editorial UNMSM 434p.
5.
Schildt Herbert (1996). C++ Para Programadores Madrid. McGraw Hill/Interamericana de Espaa S.A. 398p.
6. Soustrup, Bjarne (2002). "El Lenguaje de Programacin C++ Edicin especial". Espaa. Addison Wesley
PEARSON EDUCACION S.A. 1050 p.
Profesor: EDGAR RUIZ LIZAMA
Pgina 11 de 11