STREAMS:
EN C++, LOS ARCHIVOS SE MANEJAN CON UN TIPO PARTICULAR DE
STREAM. UN STREAM
ES UNA ESTRUCTURA DE DATOS QUE SE UTILIZA PARA MANEJAR UN
“FLUJO DE CARACTERES”
Y PERMITIR PONER O SACAR DE ´EL TIPOS DE DATOS ESTÁNDAR O
CLASES DEFINIDAS POR EL
USUARIO. POR EJEMPLO, COUT ES
UN STREAM QUE NOS PERMITE ESCRIBIR CARACTERES EN
LA CONSOLA. REPASEMOS UN POCO EL FUNCIONAMIENTO DE COUT Y CIN:
UN ARCHIVO:
ES
UN GRUPO DE REGISTROS RELACIONADOS ALMACENADOS EN MEMORIA SECUNDARIA. POR
EJEMPLO, UN ARCHIVO DE NÓMINA DE UNA COMPAÑÍA CONTIENE NORMALMENTE UN REGISTRO
POR CADA EMPLEADO. DE ESTA MANERA, EL ARCHIVO DE NÓMINA DE UNA COMPAÑÍA PEQUEÑA
PODRÍA CONTENER SÓLO 20 REGISTROS Y, EN CAMBIO UN ARCHIVO DE NÓMINA DE UNA
COMPAÑÍA GRANDE PODRÍA CONTENER HASTA 50.000 REGISTROS. LA VENTAJA ES QUE LA
INFORMACIÓN ALMACENADA EN UN ARCHIVO ES PERSISTENTE EN EL TIEMPO, NO ES
SUSCEPTIBLE A FALLAS ELÉCTRICAS Y PUEDE REPRODUCIRSE Y TRANSPORTARSE A BAJO
COSTO.
ARCHIVOS Y FLUJOS EN C++:
C++ VE A CADA ARCHIVO
SIMPLEMENTE COMO UNA SECUENCIA DE BYTES QUE TERMINA CON UN MARCADOR ESPECIAL DE FIN DE ARCHIVO. LAS BIBLIOTECAS ESTÁNDAR DE C++ PROPORCIONAN UN AMPLIO
CONJUNTO DE CAPACIDADES DE ENTRADA/SALIDA. EN GENERAL, LA E/S EN C++ SE DA EN
FLUJO DE BYTES. UN FLUJO ES
SIMPLEMENTE UNA
SECUENCIA DE BYTES. EN LAS OPERACIONES DE ENTRADA, LOS BYTES FLUYEN DESDE UN
DISPOSITIVO (POR EJEMPLO: TECLADO, UNIDAD DE DISCO, ETC.) HACIA LA MEMORIA
PRINCIPAL. EN OPERACIONES DE SALIDA LOS BYTES FLUYEN DE LA MEMORIA PRINCIPAL
HACIA UN DISPOSITIVO (POR EJEMPLO: PANTALLA, IMPRESORA, UNIDAD DE DISCO, ETC.).
YA SE HA VISTO QUE EXISTEN CUATRO OBJETOS QUE SE CREAN ¡ AUTOMÁTICAMENTE CUANDO SE UTILIZA LA BIBLIOTECA
IOSTREAM: CIN, COUT, CERR Y CLOG. ESTOS OBJETOS ASOCIAN CANALES DE COMUNICACIÓN
ENTRE UN PROGRAMA Y UN ARCHIVO O DISPOSITIVO PARTICULAR. POR EJEMPLO, EL OBJETO
CIN (FLUJO DE ENTRADA ESTÁNDAR) PERMITE QUE UN PROGRAMA RECIBA DATOS DESDE EL
TECLADO; EL OBJETO COUT (FLUJO DE SALIDA ESTÁNDAR) PERMITE QUE UN PROGRAMA
ENVÍE DATOS A LA PANTALLA, Y LOS OBJETOS CERR Y CLOG (FLUJO DE ERROR ESTÁNDAR)
PERMITEN QUE UN PROGRAMA ENVÍE MENSAJES DE ERROR A LA PANTALLA.
ARCHIVOS DE ENCABEZADO:
PARA
REALIZAR EL PROCESAMIENTO DE ARCHIVOS EN C++ SE DEBEN INCLUIR
LOS ARCHIVOS DE ENCABEZADO
<IOSTREAM.H> Y <FSTREAM.H>.
• LA CLASE iftream,
PARA DEFINIR LOS ARCHIVOS QUE SE USAN
EXCLUSIVAMENTE PARA ENTRADA DE DATOS (LEER).
• LA CLASE oftream, PARA
DEFINIR LOS ARCHIVOS QUE SE USAN
EXCLUSIVAMENTE PARA LA SALIDA DE DATOS (ESCRIBIR).
• LA CLASE fstream,
PARA DEFINIR ARCHIVOS DE ENTRADA Y/O SALIDA
DE DATOS.
EL SIGUIENTE PROGRAMA MUESTRA LA FORMA DE CREAR ESTOS OBJETOS DE
LA CLASE FSTREAM
EN C++, LOS ARCHIVOS SE
MANEJAN MEDIANTE FILESTREAMS O FSTREAMS. ESTOS SON STREAMS QUE ADEM´AS PROVEEN
FUNCIONES PARA MANIPULAR ARCHIVOS. ES DECIR, SI NUESTRO PROGRAMA ESCRIBE COSAS
EN LA CONSOLA, CON LOS MISMOS COMANDOS PODEMOS ESCRIBIR COSAS EN UN ARCHIVO.
SIMPLEMENTE HAY QUE CAMBIAR COUT POR EL NOMBRE DEL STREAM QUE MANEJE NUESTRO
ARCHIVO.
ENTRADA:
PARA ABRIR UN ARCHIVO PARA LECTURA, UTILIZAMOS UN
IFSTREAM. PARA ESO, TENEMOS QUE DEFINIR UNA VARIABLE DE ESE TIPO Y VINCULARLA A
ALG´UN ARCHIVO. PARA REALIZAR ESTA VINCULACION, TENEMOS DOS M´ETODOS: DAR EL
NOMBRE DEL ARCHIVO AL DECLARAR LA VARIABLE O UTILIZAR EL M´ETODO OPEN. AMBOS
PRODUCEN EL MISMO RESULTADO. VEAMOS UN EJEMPLO.
#include<iostream>
#include<fstream>
#include<iomanip>
using namespace std;
int main()
{
ifstream entrada("hola.txt");
ifstream input;
char c;
input.open("hello.txt");
if (entrada.good())
cout<< "el archivo hola.txt fue abierto
correctamente";
else
cout<< "el archivo hola.txt no pudo ser
abierto correctamente";
cout<<endl;
entrada>> c;
entrada.close();
input.close();
cout<< c <<endl;
system("pause");
return 0;
}
EN ESTE
EJEMPLO, NUESTRO PROGRAMA ABRE DOS ARCHIVOS PARA ENTRADA Y LEE UNCARACTER DE
UNO DE ELLOS. CUANDO LOS ARCHIVOS YA NO SON NECESARIOS, LOS CERRAMOSUTILIZANDO
EL M´ETODO CLOSE. UNA VEZ QUE CERRAMOS EL ARCHIVO, PODEMOS USAR ELMISMO
IFSTREAM PARA LEER DE OTRO ARCHIVO DISTINTO, O DEL MISMO ARCHIVO UNA VEZ
MAS.ADEMAS DE LA APERTURA DE ARCHIVOS DE ENTRADA, VEMOS EL USO DEL METODOGOOD.
ESTE M´ETODO EST´A PRESENTE EN TODOS LOS STREAMS Y NOS INDICA SI LA PROXIMA
OPERACION
DE LECTURA/ESCRITURA SERA VIABLE. EN EL CASO DE ARCHIVOS, PREGUNTAR GOOD DESPUES DE ABRIR UN ARCHIVO NOS INFORMA SI SE PUDO ABRIR
CORRECTAMENTE.CUANDO SE TRABAJA CON STREAMS DE ENTRADA, A MENUDO ES NECESARIO
LEER UNCARACTER Y VOLVERLO A PONER DENTRO DEL STREAM. PARA ESO, LOS ISTREAMS POSEEN ELMETODO putback (char), QUE COLOCA
EL CARACTER EN EL STREAM, PASANDO A SER ELPROXIMO CARACTER QUE SE LEER´A. OTRO
M´ETODO ´UTIL PARA MANIPULAR IFSTREAMS ES eof(). ESTE NOS DICE SI Y LLEGAMOS AL FINAL
DEL ARCHIVO. ESO QUIERE DECIR QUE YA NO SE PODRA LEER MAS.
SALIDA:
PARA
MANEJAR UN ARCHIVO DE SALIDA, UTILIZAMOS UN OSTREAM:
#include<iostream>
#include<fstream>
#include<iomanip>
usingnamespacestd;
voidmain()
{
ofstream salida("hola.txt");
ofstream output;
char c;
output.open("hello.txt");
cin>> c;
salida<< c;
salida.close();
output.close();
}
MANIPULADORES:
PARA
CAMBIAR EL COMPORTAMIENTO DE UN STREAM, SE PUEDEN UTILIZAR CIERTAS
FUNCIONES ESPECIALES, LLAMADAS MANIPULADORES. LOS
MANIPULADORES EST´AN DEFINIDOS EN EL ARCHIVO IOMANIP.
VEAMOS ALGUNOS DE LOS M´AS ´UTILES.
ENDL:
PARA
MARCAR EL FINAL DE UNA L´INEA EN UN STREAM DE SALIDA, PODEMOS USAR EL
MANIPULADOR ENDL
#include<iostream>
#include<fstream>
#include<iomanip>
using namespace std;
int main()
{
ofstream salida("hola.txt");
ofstream output;
char c;
output.open("hello.txt");
cin>> c;
salida<< c;
salida.close();
output.close();
system("pause");
return 0;
}
MODOS DE APERTURA DE ARCHIVO:
DEPENDIENDO
DEL PROPÓSITO DEL PROGRAMA DEBE INDICAR EL MODO DE
ACCESO, POR EJEMPLO ES POSIBLE QUE SEA NECESARIO
AGREGAR DATOS A
LOS YA EXISTENTES EN EL ARCHIVO, O QUIZÁ QUE LAS
OPERACIONES DEL
PROGRAMA NO SE LLEVEN A CABO EN CASO DE QUE EL
ARCHIVO
ESPECIFICADO EXISTA EN EL DISCO, ETC., DEPENDIENDO DEL
CASO
PODEMOS ESPECIFICAR EL MODO DE APERTURA SEGÚN LA
SIGUIENTE TABLA:
CERRAR ARCHIVOS:
DESPUÉS DE TERMINAR EL PROCESAMIENTO DEL ARCHIVO, DEBERÁ
CERRAR EL ARCHIVO PARA GARANTIZAR SU CONTENIDO Y PERMITIR SU POSTERIOR USO.
ESTO SE REALIZA CON LA FUNCIÓN close () PARA CERRAR UN ARCHIVO, LO QUE NECESITA
HACER ES LLAMAR AL MÉTODO CLOSE() CON UN OBJETO DE FLUJO DE ARCHIVO. COMO
RESULTADO, LOS ENUNCIADOS LECTURA ESCRITURA.
CLOSE (), ESCRITURA. CLOSE () Y LECTURA.close() DEBERÁN CERRAR LOS ARCHIVOS QUE
SE ABRIERON ANTERIORMENTE.
ESTADO DE LAS OPERACIONES DE E/S SOBRE ARCHIVOS:
SE
RECOMIENDA UTILIZAR LOS SIGUIENTES MÉTODOS PARA VERIFICAR EL
ÉXITO DE LAS OPERACIONES DE, APERTURA, LECTURA Y
ESCRITURA SOBRE
ARCHIVOS:
·
GOOD(): PRODUCE UN 1 SI LA OPERACIÓN PREVIA FUÉ EXITOSA.
·
EOF(): PRODUCE UN 1 SI SE ENCUENTRA EL FINAL DEL ARCHIVO.
·
FAIL(): PRODUCE UN 1 SI OCURRE UN ERROR.
·
BAD(): PRODUCE UN 1 SI SE REALIZA UNA OPERACIÓN INVÁLIDA.
ENUM:
ENUM
ES UN MECANISMO DEL LENGUAJE
PARA DEFINIR CONSTANTES SIMB´OLICAS. POR
EJEMPLO, SI QUEREMOS REPRESENTAR LOS PALOS DE UNA BARAJA
FRANCESA EN C++, CREAR
UNA CLASE PUEDE SER DEMASIADO, YA QUE SOLO TENEMOS QUE
TRATAR CON CUATRO VALORES
SENCILLOS. ENTONCES, RECURRIMOS AL ENUM.
#include <iostream>
#include <iomanip>
using namespace std;
enum palo {corazones = 'c', treboles = 't',
diamantes = 'd', piques = 'p'};
int main()
{
palo p;
p = corazones;
cout << p << endl;
cout<< char(p);
cout<<"\n";
system("pause");
return 0;
}
EN
ESTE EJEMPLO, ASIGNAMOS A CADA UNA DE LAS CONSTANTES SIMB´OLICAS (CORAZONES,
ETC.) UN CARACTER. ESE CARACTER PODR´IA USARSE, POR EJEMPLO,
PARA ALMACENAR EL PALO
EN UN ARCHIVO.
LA SALIDA DE ESTE EJEMPLO ES:
67
C
AQUÍ LES DEJARE UN CÓDIGO DONDE SE PUEDE
CREAR UN ARCHIVO INCLUYENDO LA EXTENSIÓN Y EL CONTENIDO INTERNO... LO
DISEÑE YO AUNQUE NO SE MUCHO DE ESTO PERO ASÍ VOY APRENDIENDO Y USTEDES
CONMIGO..! ES SIMPLE:
#include
<fstream>
# include
<iostream.h>
using namespace std;
int main(){
menu:
int a;
system ("color 1e");
cout<<"\t\t\t\tmenu de
archivo\n";
cout<<" 1 crear
archivo\n";
cout<<" 2 modificar
archivo\n";
cout<<" 3 salir\n";
cin>>a;
if (a==1) {goto
hola;}
if (a==2) {goto
modificar_archivos;}
if (a==3) {exit (0);}
modificar_archivos:
int m;
cout<<" \t
para modificar un archivo ya creado\n valla al menu, crear archivo y haga otro
nuevo con el mismo nombre\n\n";
cout<<"presione 1\n";
cin>>m;
if (m==1) system ("cls"); {goto
menu;}
hola:
system ("cls");
system ("color 2b");
cout<<"\nintrodusca
el nombre del archivo seguido de la extension\n\n";
cout<<"\t
ejemplo: nombre.txt nombre.ppt
nombre.txt nombre.doc nombre.pdf\n\n";
char
nombre_de_archivo[15];
cin>>nombre_de_archivo;
if (nombre_de_archivo==0) {goto menu;}
ofstream crear(nombre_de_archivo);//
crear el archivo
system ("cls");
system ("color e9");
cout<<"introduce
el contenido del doumento:\n";
char texto_archivo
[1024];
cin>>texto_archivo;
cin.getline(texto_archivo,1024,'\n');
crear<<texto_archivo;
crear.close();
system ("cls");
cout<<"el archivo
a sido creado\n\n";
cout<<"\t que
desea hacer..?\n\n";
cout<<" presione 1
para ir al menu\n\n";
cout<<" presione 3
para salir del programa\n";
int q;
cin>>q;
system ("cls");
if (q==1) {goto menu;}
if (q==3){exit (0);}
ifstream
lectura(texto_archivo);//lectura de archivo
lectura.getline(texto_archivo,1024);
system
("pause");
return 0;
}
CABE DESTACAR QUE EL ARCHIVO SE CREARA Y SE GUARDARA EN LA MISMA
CARPETA DONDE TENGAN GUARDADO EN CODIGO ASI COMO SE VE EN LA IMAGEN:
Chamo si te gusta cambiar el color del fondo jajaja
ResponderEliminarJusto abajo de la h?
ResponderEliminarJAJAJAJA XD