Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Conceptos Bsicos
Todo lo que se almacena en variables se pierde cuando el programa termina. Esta informacin es almacenada realmente en memoria principal (RAM).
Para poder guardarla permanentemente se debe almacenar la informacin en archivos. Los archivos se almacenan en memoria secundaria como Discos Duros, DVD, Flash Memory, etc. As la informacin se mantiene en el archivo, an despus que el programa haya terminado su ejecucin. Ejemplos:
Puntajes en los juegos, como el Buscaminas Notas de estudiantes en una hoja electrnica Voces grabadas usando el computador, etc.
Archivos de Texto
Los archivos pueden almacenar todo tipo de informacin, dependiendo de eso tienen un tipo el cual se reconoce en Windows por la extensin En lenguaje C tenemos los archivos que almacenan informacin tipo texto como secuencia de caracteres (extensin .txt), y los archivos tipo binario (extensin .dat) Estructura bidimensional:
Conjunto de lneas, cada una Que hay en un nombre? compuesta de caracteres Eso que llamamos una rosa Emanara un olor tan dulce, aun teniendo otro nombre
Este ejemplo de un archivo es un conjunto de caracteres presentado en 3 lneas, pero en realidad los archivos de texto son una sola secuencia de caracteres, incluido el carcter \n:
Estructura unidimensional, es solo un conjunto de caracteres, incluyendo el \n
Que hay en un nombre?\nEso que llamamos una rosa\nEmanaria un olor tan dulce, aun teniendo otro nombre
stdio.h es una de las interfaces que nos permite trabajar con archivos. El tipo de dato FILE est declarado en esta interfaz Un puntero de tipo FILE sirve para representar a un archivo en un programa en C. Por cada archivo con el que se desee trabajar, se declara una variable FILE * FILE *infile, *outfile; stas dos variables, pueden representar a dos archivos en el programa. Si una funcin va a trabajar con un archivo, puede recibir una variable de tipo FILE *
Desde un programa en C se puede crear archivos, o abrir archivos ya existentes para modificarlos Adems, se puede tomar datos del archivo y ponerlos en variables, eliminar y renombrar archivos, y muchas otras operaciones Todas son operaciones que se manejan a travs de funciones Para trabajar con archivos : Declare una variable de tipo FILE *(un puntero) Esta se debe asociar con el archivo, usando la funcin fopen Se efectan las operaciones indicadas Cuando se ha terminado de trabajar con el archivo,
La variable de tipo FILE * se la utiliza asocindola a un archivo con la funcin fopen variable de tipo FILE * = fopen (nombre de archivo, modo); Un archivo se puede abrir en los siguientes modos: Lectura: r Para tomar datos del archivo. El archivo DEBE existir Escritura: w Para crear archivos, y escribir o enviar datos al archivo. Si el archivo no existe, lo crea, si ya existe, lo sobreescribe Aadir: a Para escribir o enviar datos a un archivo que ya existe. Si no existe, lo crea, si ya existe, los datos enviados se aaden
Si la operacin de abrir falla por alguna razn (por ejemplo el archivo no existe), fopen devuelve NULL.
FILE *infile; infile = fopen (shakespeare.txt,r); if(infile == NULL) { printf(Error al abrir el archivo\n); } /*trabajar con el archivo*/ Cuando se ha terminado de trabajar con el fclose(infile);
archivo, este se cierra con fclose. Cuando un programa termina, todos los archivos se cierran, pero es una BUENA PRACTICA de programacin, cerrar los archivos, pues al revisar el cdigo se sabr cuando ya no se usa mas una archivo
Operaciones de Entrada/Salida
stdio ofrece funciones para manipulacin de E/S en un programa usando los dispositivos estndar (teclado y monitor), pero tambin para operaciones de E/S desde archivos
Tomar (get) datos de un archivo existente: Entrada Poner (put) datos a un archivo, sea nuevo o existente: Salida
Se puede tomar o poner 1 carcter o 1 lnea entera Para esto se deben usar las funciones:
E/S de Caracteres
Toma un caracter del archivo representado por infile y devuelve el cdigo ASCII de dicho carcter El programa lo toma y lo puede almacenar en una variable de tipo char La primera llamada a getc, luego de abierto un archivo, retorna el 1er carcter, la segunda, retorna el 2do, y as sucesivamente Al llegar al final del archivo, getc retorna EOF (fin de archivo). EOF es una constante definida en stdio con -1 Pone un carcter en el archivo representado por outfile Al abrir un archivo, la primera llamada a putc, pone un caracter en el inicio; la segunda, lo pone en la segunda posicin del archivo, y as sucesivamente
Permite tomar de un archivo, una lnea Busca en el archivo, el siguiente fin de lnea, y termina. El ultimo caracter de la cadena (antes del fin de cadena \0) seria el de nueva linea \n Termina antes, cuando el numero de caracteres ledos es igual a buffsize-1. En este caso, a la cadena leda se le aumenta el carcter de fin de cadena \0 La lnea leda se deposita en buffer, y tambin es retornada Si se llama a fgets estando en el EOF, retorna NULL Pone o copia los caracteres de la cadena str en el archivo asociado con outfile
int fscanf (FILE *infile, cadena de control, var1, var2, var3, ); Permite leer o tomar datos de un archivo, asociado con infile. Los valores ledos se ubican en cada variable enviada. void fprintf (FILE *outfile, cadena de control, exp1, exp2, exp3, ..); Su uso es igual que printf, con la excepcin de que la impresin no se hace en pantalla, sino que enva los datos al archivo asociado con outfile En la funcin fscanf , para la cadena de control, si la variable enviada es entera, real, o carcter, aadir delante el operador & (direccin de memoria) Si la variable es una cadena, no hay que aadir el &
de caracteres que deben ser ledos, un [ ] dentro del cual pueden ir caracteres: %[abc], se leern caracteres hasta encontrar el primer caracter que no est en el conjunto. Ejemplo: %[0123456789], solo permite ingresar dgitos. %[^abc], se leern caracteres mientras no se encuentren los caracteres en el conjunto. Ejemplo: %[^!?], el una ingreso termina cuando se ingresa ! Lee cadena sin espacios en blanco, ? char palabra[tamao]; pero se puede pasar del tamao
int valor; fscanf (infile, %s, palabra); fscanf (infile, %24s, palabra); Lee mximo 24 caracteres de una cadena sin espacios en blanco, as se puede evitar pasarse del tamao Lee una cadena de la forma: palabra valor que est en el archivo
Ejercicio
Suponga que existe el archivo elementos.txt que lista la siguiente informacin: El nombre del elemento, de 15 caracteres mximo El smbolo qumico, nunca ms de 2 caracteres El numero atmico, un entero El peso atmico, un real Escriba un programa que lea los datos y los muestre:
Elemento (symbol) Peso Atmico -------------------------------------------1. Hidrogeno (H) 1.008 2. Helio (He) 4.003 3. Litio (Li) 6.939 4. Boro (B) 10.811
Hidrogeno, H, 1, 1.008 Helio, He, 2, 4.003 Litio, Li, 3, 6.939 Boro, B, 5, 10.811