Está en la página 1de 31

Laboratorio Fundamentos de Programacin

David Vallejos Altamirano Primavera 2009

ENTRADA Y SALIDA MEDIANTE MANEJO DE ARCHIVOS


2

Introduccin
La entrada y salida por archivos es uno de los temas ms importantes para la programacin, es necesario para poder programar desde una pequea agenda hasta una completa base de datos, pero antes de entrar de lleno a este tema, y aprovechando l conocimientos t h d los i i t adquiridos hasta el momento, quiero mostrar el uso de la memoria dinmica dinmica.

Memoria Dinmica
Hasta el momento no contamos con una forma de administrar la memoria utilizada en nuestros programas, cuando declaramos una variable se asigna memoria para almacenar datos dentro de ella, y sta no se destruye hasta que termina el bloque en el que fue declarada se declarada, crea y se destruye cada que se pasa por ese bloque, quiz puede parecer poco importante, pero cuando se cuentan con grandes cantidades de datos, es necesario tener un mejor control de lo que se pone en memoria.
4

Memoria Dinmica
Una de las formas en que podemos asegurarnos que una variable declarada dentro de un bloque no sea borrada al trmino de ste, es mediante la utilizacin del calificador static static. De sta manera la variable perdurar hasta el manera, trmino de todo el programa.

static tipo_variable mi_variable;


5

Memoria Dinmica
En algunos casos esto nos ser insuficiente, vamos a necesitar destruir variables antes de terminar el programa. Para hacer esto contamos con los operadores new y delete delete.

Memoria Dinmica
Se puede utilizar el operador new para crear cualquier tipo de variables, en todos los casos devuelve un puntero a la variable creada. d En el momento en que se quiera borrar esta variable deberemos utilizar el operador delete, todas las variables creadas mediante el operador new deben de ser borradas con el otro operador.
7

Ejemplo 1
Las partes que nos interesan de este programa son la declaracin de la variable tipo apuntador que se encuentra al principio del main. i La asignacin de espacio dentro del bloque if y if, por ltimo la destruccin de nuestra variable lineas antes del trmino del programa.

Ejemplo 1
Si se hubiese declarado el apuntador dentro del bloque if, cuando se saliera de ste entonces la variable ya no existira y habra un error en tiempo de compilacin compilacin. El uso de la memoria dinmica nos ser muy til en muchos casos, en otros quiz prefiramos hacerlo de la manera ms comn. Estos operadores funcionan tanto para variables simples como para compuestas
9

Ejemplo 2
Como en el ejemplo anterior, se declara una anterior variable de tipo apuntador (apuntador a alumno) y luego le asignamos espacio en memoria. Cuando se i C d invoca a l f la funcin miembro inicia, se i i b i i i enva como argumento el nombre del apuntador, y como este contiene una direccin de memoria, pues entonces la funcin que lo recibe esta preparada para recibirlo y manejarlo adecuadamente con el operador flecha flecha.
10

Ejemplo 2
Ntese que despus de la destruccin de la variable alan se crea otra de nombre alfonse que tambin se destruye, y posteriormente se invoca de nuevo a la funcin constancia de alan. Es lgico que no se obtendr lo que deseamos porque esa variable ya no existe.

11

Manejo d M j de Archivos h

12

Manejo de Archivos
Para empezar con el manejo de archivos es necesario recordar el concepto de flujo, el cual se define como un dispositivo que consume o produce informacin. d i f i En nuestros programas hechos hasta el momento hemos utilizado los flujos estndar cin, cout, etc.

13

Manejo de Archivos
Para poder usar un flujo estndar basta con incluir la biblioteca iostream como lo hemos hecho hasta ahora. Cuando decidimos utilizar la funcin cin.get() no sabamos exactamente el porque de la utilizacin b t t l d l tili i del punto(.), ahora que hemos visto un poco el concepto de estructura p p podemos decir q que se trata de la invocacin a una funcin miembro del flujo cin.
14

Manejo de Archivos
S, el flujo es un objeto, vindolo desde la , j j , perspectiva de las estructuras y no precisamente de las clases como debera de ser, se trata de un tipo de dato que contiene variables y funciones que pueden ser invocadas. Las estructuras ( (en realidad clases) para l ld d l ) la entrada y salida de datos tienen un orden j jerrquico, en ellas existe la herencia q q , que bsicamente consiste en que una de orden inferior obtiene las mismas variables y funciones que la de orden mayor, adems de que puede mayor agregar ms.

15

16

Manejo de Archivos
Para poder trabajar los ficheros como flujos es necesario incluir la librera fstream, y segn la utilizacin que queramos dar a este fichero (lectura o escritura) deberemos declarar el tipo de flujo. Para crear un archivo de salida declaramos una variable de tipo ofstream, el cual ya est declarado dentro de nuestra librera librera. Es mejor ver un ejemplo de base base.
17

Ejemplo 1
Aqu declaramos a archivo como variable tipo archivo ofstream, y posteriormente utilizamos su funcin miembro open para asociarla a un archivo, archivo se pude asociar directamente en la declaracin de la siguiente manera: ofstream archivo(miarchivo.txt);

18

Manejo de Archivos
Tanto la primera como la segunda forma admiten un segundo argumento que especifica el modo de apertura de un archivo. Los modos disponibles se muestran en la i i t tabla l siguiente t bl y pueden ser utilizados d tili d incluyendo la librera iostream.

19

Manejo de Archivos

20

Manejo de Archivos
El mtodo para abrir un archivo en modo lectura es muy similar, pero en este caso utilizaremos ifstream. Para tener el control del fichero, aparte de conocer los modos de apertura de un archivo archivo, debemos de conocer el delimitador, as como en las cadenas existe el carcter de fin de cadena('\0'), en los archivos est el fin de archivo (EOF).
21

Ejemplo 2
Abrir un programa en modo de lectura

22

Ejemplo 2
El programa abre el archivo en modo de lectura lectura, inmediatamente el indicador de posicin se coloca en el primer caracter del flujo (el archivo), la funcin eof() d l f i f() devuelve verdadero en caso de l d d d que en la posicin en la que est el indicador est el fin de archivo. Hacemos una comprobacin de sto, y mientras (bucle hil ) (b l while) no se ll llegue al fi l d archivo se l final de hi leer un caracter de ste flujo, al hacer esto el p ,p indicador de posicin avanzar, posteriormente se imprime el caracter ledo en pantalla y continua el ciclo.

23

Manejo de Archivos
Para el manejo de caracteres desde un archivo podemos utilizar las funciones miembro get, getline, read, write, ignore, gcount con las que ya tenemos un poco de experiencia. t d i i Adems de stas, existen otras funciones que stas nos sern muy tiles para que no sea tan secuencial la forma en la que leemos o escribimos el archivo.

24

Manejo de Archivos

25

Ejemplo 3
Chatea con el PC

26

Ejemplo 3
El programa inicia abriendo el archivo en modo lectura, si existe un error el programa termina. Empieza su conversacin diciendo hola, y espera a que el usuario responda, atrapa su responda respuesta y la guarda en una cadena, si tecle algo que no fuera simplemente un enter entonces continua dentro del bucle.

27

Ejemplo 3
Se posiciona al inicio del archivo, y, dentro de otro bucle, lee la cadena de caracteres del archivo con un mximo de 290 caracteres y la almacena en texto_preg. texto preg Utilizando la funcin strstr() de la biblioteca cstring, compara la cadena introducida por el usuario con la cadena que acaba de leer del archivo, archivo la funcin strstr() devuelve un apuntador a la primera localizacin de la cadena texto_preg p, en texto_resp, si no se encuentra devuelve NULL.

28

Ejemplo 3
Si se ha llegado al final del archivo, es decir, no se encontr que contestar, pide a la persona que le diga que debe de contestar, entonces cierra el archivo y lo vuelve a abrir pero esta vez en modo de escritura para aadir la pregunta del usuario con su respectiva respuesta, luego cierra el archivo de salida y lo abre en modo de lectura de nuevo.

29

Ejemplo 3
Estos pasos de buscar y, si no encuentra entonces preguntar, continuarn mientras no se encuentren coincidencias entre lo escrito y lo l que est dentro del archivo. d d l hi Despus, Despus continuando con el bucle de mayor nivel, vuelve a leer del archivo una cadena de caracteres, y empieza la conversacin de nuevo. Para terminar el programa simplemente el usuario debe teclear enter sin ningn otro caracter.

30

Como ya se habr dado cuenta, la parte principal de este programa es el archivo, en l est la base de la conversacin, y si se quiere una pltica ms amena pues hay que modificar l i h difi el archivo y aumentar su repertorio de p respuestas. Note que al final del archivo hay una linea en blanco para el correcto funcionamiento del programa.
31