Está en la página 1de 13

Conceptos Bsicos (puntero a FILE, fopen, fclose) Leyendo Datos de un Archivo de Acceso Secuencial Escribir un Archivo de Acceso Secuencial

al - Carcter por Carcter - Lnea por Lnea - Con Formato

Conceptos Bsicos

La informacin que se guarda en variables es temporal


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

Tipo de Dato FILE

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 *

Abrir y Cerrar Archivos

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,

Abrir y Cerrar Archivos

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

Abrir y Cerrar Archivos

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:

getc, putc (Caracteres) fgets, fputs (Lneas)

Se puede incluso tomar o leer datos usando un cierto formato:

E/S de Caracteres

int getc (FILE *infile);

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

void putc (int ch, FILE *outfile)


E/S de Lneas (Cadena)

char * fgets (char *buffer, int buffsize, FILE *infile);


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

void fputs (char *str, FILE *outfile);

E/S con Formato

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 &

fscanf(pfin, "%d %s %s", &id, nombre, cedula);

E/S con Formato


fscanf(pfin, "%d %s %s", &id, nombre, cedula); Luego del % tambin pueden ir un numero que indique el ancho mximo

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

fscanf (infile, %[^,] %d, palabra, &valor);

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

También podría gustarte