martes, 25 de enero de 2011

Creacion de Archivo de Acceso Secuencial en C++

En esta entrada explico brevemente cómo crear un archivo de acceso secuencial en C++. Información más detallada puede encontrarse en el capítulo 14 de Cómo Programar en C++, de Deitel. Sin embargo, cuando tuve la necesidad de crear y leer archivos de datos, para trabajar con métodos numéricos, leí y adapté buena parte de la información que ahí viene. Como tengo esto en mi computadora pienso que no esta mal subirlo y que le pueda servir a alguien más. Este tipo de conocimientos son muy útiles, sobre todo, si, como en mi caso, necesitan generar una cantidad grande de información para después procesarla. Por otro lado, los usuarios de linux o unix pueden usar las herramientas que proporciona el sistema.Como se muestra Aqui

 #include <iostream>
 using namespace::std;
 // <iostream> se incluye, como en todos los programas
 // porque se usara entrada - salida
 # include <fstream>
 using std::ifstream;
 // El encabezado fstream permite crear objetos ofstream
 // e ifstream, que abren un archivo para salida y para
 // entrada, respectivamente.
 # include <cstdlib>

 int main()

 { // Abre main

 ofstream Mi_Archivo_Salida( "Mis_Datos.dat", ios::out);
// El constructor ofstream abre un archivo para escribir en el,
// es decir para enviar datos a ese archivo, mediante la creacion
// de un objeto llamado Mi_Archivo_Salida (ustedes le pueden poner el
// nombre que quieran).
// Se pasan dos argumentos al constructor del objeto, el nombre
// del archivo, que es por completo arbitrario - "Mis_Datos.dat".
// y el modo de apertura del archivo - ios::out -.
// Existen diversos modos de apertura de archivos que pueden ser usados
// a conveniencia en este caso ( apertura para envio de datos)
// a saber:
// ios::out Si el archivo "Mis_Datos.dat" existe, entonces se
// sobreescribira todo lo que entre a continuacion en ese
// archivo y se BORRARAN todos los datos previos; hay que
// estar prevenidos acerca de esto.
// Si "Mis_Datos.dat" no existe, entonces se creara un
// archivo nuevo con ese nombre.
// ios::app En este caso, si el archivo existe, entonces la nuevas
// entradas se colocan debajo de las que ya existen.
// Caso contrario, el archivo se crea.
// ios::ate Si el archivo existe, borra los datos existentes y escribe
// los nuevos, si no existe, entonces lo crea.
// ios::trunc Si el archivo existe, borra los datos existentes y escribe
// los nuevos, si no, lo crea.
// ios::in Si el archivo existe, entonces borra dos entradas del archivo
// cada vez y eventualmente sustituye todos los datos existentes,
// pero si introduce menos de la mitad de datos, entonces los nuevos
// estaran encima de los datos primitivos, hay que tener cuidado.
// Si el archivo no existe, no lo crea.

 if ( !Mi_Archivo_Salida )
 { // Abre if
 cerr << "\nEL ARCHIVO NO PUDO ABRIRSE." <<endl;
 exit( 1 );
 // Por esto se incluyo <cstdlib>
 } // Cierra if

 /* como se esta usando ios::out como modo de apertura de archivo
 podria pensarse que es inutil poner el caso de un fallo en la
 apertura, ya que de no existir se creara. Sin embargo puede ocurrir
 otro tipo de fallos, como lo que sucede si se trata, por ejemplo, de
 crear un archivo en un directorio en el que no tenemos permiso
 ( basta sustituir "Mis_Datos.dat" por "/home/Mis_Datos.dat" para
 que, en mi caso, mande el mensaje); tambien podria suceder que no
 hay memoria suficiente para crear el archivo o cualquier otra cosa,
 asi que es mejor incluir la posibilidad de fallo */

 cout << "\nIntroduzca los datos (EOF para terminar): " << endl;
 float datos;

 /* while se evalua true siempre que no se introduzca el caracter
 de fin de archivo. Esta forma compacta de recibir datos es
 dificil de entender cuando se encuentra por primera vez, pero es muy
 util. En los ejercicios de Kernighan y Ritchie del capitulo 1
 ( que se pueden ver en este mismo blog) se
 puede encontrar un buen numero de ejemplos acerca del poder de esta
 forma de usar while */

 while ( cin >> datos )
 { // Abre while
 Mi_Archivo_Salida << datos << endl;

 // asi como se introduce datos, se podria introducir mas elementos
 // dejando un espacio ' ' si fuera necesario.
 cout << endl;

 } // Cierra while

 return 0;

 }

5 comentarios:

  1. Hola gracias por compartir tu programa.

    Soy nueva en programacion y estoy estudiando con un texto de esa editorial. Pero no trae como hacer un programa de archivo par a escritura y otro para lectura (. dat y .txt) y que haga otras "maromas" Ojala pudieras colocar algo parecido

    SAludos!!

    ResponderEliminar
  2. Hola. La extensión de los archivos puede ser cualquiera (.dat, .txt, etc.), por otro lado, si usas algún unix o linux puedes ver el link que puse en la parte de arriba de la entrada. Son herramientas del sistema. Desconozco si en windows se puede hacer pero supongo que sí.
    Saludos.

    ResponderEliminar
  3. Respuestas
    1. Tan fácil como que copies, pegues y ejecutes el programa. O sé más específico. ¿qué exactamente es lo que "no sirve"?

      Eliminar
  4. Hola. Gracias por compartir tu programa me sirvió de mucho

    ResponderEliminar

Related Posts Plugin for WordPress, Blogger...