Procesamiento de archivos

Anuncio
Archivos
El almacenamiento de datos en variables y en arreglos es temporal, al terminar un
programa todos estos datos se pierden. Para conservar los datos en grandes cantidades se
usan los archivos. Los computadores almacenan los archivos en dispositivos de
almacenamiento.
Todos los elementos que procesa un computador se reducen a combinaciones de ceros y
unos. Esto es por que se aprovechan los estados de la electricidad asumiendo dos estados,
uno representa a 0 y el otro al uno.
En un computador el elemento más pequeño de dato puede asumir el valor 0 o 1. Este
elemento es un bit. Los circuitos realizan manipulaciones de bits.
Sería muy complicado manejar la información a nivel de bits, en ves de ello nosotros
preferimos trabajar con datos en forma de dígitos decimales, letras y símbolos especiales.
Los símbolos, letras, dígitos se conocen como caracteres. Debido que los computadores
solo pueden procesar unos y ceros, todo carácter de un conjunto de caracteres en un
computador es procesado como un patrón de 1s y 0s.
Al igual que los caracteres están formados por bits, los campos se componen de caracteres.
Un campo es un grupo de caracteres que contiene un significado. Por ejemplo: un campo de
letras mayúsculas y minúsculas puede usarse para representar el nombre o el apellido de
una persona.
Los elementos de datos procesador por los computadores forman la jerarquía de datos, en
la cual los elementos de datos se convierten en más grandes y complejos, en cuanto a
estructura conforme progresamos desde los bits, hacia los caracteres (bytes), hacia los
campos y así sucesivamente.
Un registro se compone de varios campos. (en C un registro es un struct). En un sistema de
registro de alumnos en la Universidad por ejemplo, un alumno puede estar formado por los
siguientes campos:
1. RUT.
2. Nombre
3. Dirección
4. Carrera
5. Año Ingreso
Entonces un registro es un grupo de campos relacionados. Cada uno de los campos
corresponde a un mismo alumno. Naturalmente la Universidad tiene muchos alumnos, y
para cada alumno tendrá un registro. Un archivo es un grupo de registros relacionados. El
archivo de registros de la Universidad contiene un registro para cada alumno. Entonces un
archivo para un pequeño colegio, puede contener unos tantos cientos de registros, pero un
archivo de registro para una Universidad grande puede contener fácilmente miles de
registros.
Existen muchas formas de organizar los registros dentro de un archivo. El más
popular se conoce como archivo secuencial, en el cual los registros se almacenan en orden
secuencial, en relación con el campo de registro clave. El registro clave es para facilitar la
recuperación de la información de registros específicos a partir de un archivo, por lo menos
un campo de cada registro se selecciona como registro clave. Por ejemplo el registro clave
para identificar una persona como única dentro de un archivo es el RUT.
Los registros normalmente se ordenan por el RUT. El primer registro de un alumno
contiene el número más bajo del RUT y los subsiguientes contienen cada vez más altos.
Para almacenar datos la mayor parte de las empresas usan muchos archivos. Por
ejemplo las empresas pueden tener archivos para las nóminas de sus empleados, archivos
de cuentas por cobrar, archivos de cuentas por pagar, archivos de inventario, y muchos
otros. A veces un grupo de archivos relacionados se conoce como una base de datos. Una
colección de programas diseñado para crear y administrar bases de datos ese conoce como
un sistema de administración de base de datos.
Archivos y flujos
C ve un archivo simplemente como un flujo secuencial de bytes, cada archivo termina con
un marcador de fin de archivo o en un número de bytes específico registrado en una
estructura administrativa de datos, mantenida por el sistema. Cuando un archivo se abre se
asocia un flujo con el archivo. Al empezar la ejecución de un programa se abren tres
archivos y sus flujos asociados (la entrada estándar, la salida estándar y el error estándar).
Los flujos proporcionan canales de comunicación entre archivos y programas. Por ejemplo
el flujo de entrada estándar permite que un programa lea datos del teclado, el flujo de salida
estándar permite que un programa imprima datos en pantalla. Abrir un archivo regresa un
apuntador a una estructura FILE (que está definida en <stdio.h>) que contien información
usada para procesar el archivo. Esta estructura incluye un descriptor de archivo, es decir un
índice a un arreglo del sistema operativo conocido como tabla de archivo abierto. Cada
elemento del arreglo tiene un bloque de control de archivo usado por el sistema operativo
para administrar el archivo particular. La entrada estándar, salida estándar y error estándar
son manejados usando los punteros de archivo stdin, stdout y stderr.
La biblioteca estándar proporciona muchas funciones para leer datos de los archivos y para
escribir datos a los archivos.
La función fgetc
Recibe como argumento un apuntador FILE para el archivo del cual se leerá un carácter.
La llamada fgetc(stdin), lee un carácter de stdin (la entrada estándar)
La función fputc
Escribe un carácter en un archivo. La función fputc recibe como argumento un carácter
para ser escrito y un apuntador al archivo hacia el cual el carácter será escrito. La llamada
de función fputc (‘a’, stdout) escribe el carácter ‘a’ a stdout.
Varias otras funciones usadas para leer datos de la entrada estándar y para escribir datos a
la salida estándar, tienen funciones de procesamiento de archivo similarmente identificados.
Las funciones fgets y fputs por ejemplo pueden ser usadas para leer una línea de un archivo
y para escribir una línea a un archivo.
Archivo de acceso secuencial
C no impone estructuras a un archivo. Por lo tanto en C no existe el concepto de registro de
un archivo. Para que cumpla con los requisitos de cada aplicación, el programador debe
proporcionar alguna estructura.
Por ejemplo creemos archivo de acceso secuencial, que podría ser usado en un sistema de
cuentas para llevar el control de las cantidades que deben los alumnos a la Universidad.
Para cada alumno el programa obtiene un número de matricula, el nombre del alumno y el
saldo del mismo. Los datos obtenidos de cada alumno constituyen un registro para cada
uno. En esta aplicación el número de matrícula se usa como registro clave. El archivo será
creado y mantenido por orden de número de matrícula.
#include<stdio.h>
main()
{
int n_matricula;
char nombre[30];
flota saldo;
FILE *archivo;
archivo = open(“alumnos.dat”,”w”);
printf(“Ingrese número de matrícula, nombre y saldo ”);
printf(“Ingrese ^Z para finalizar la entrada de datos”);
scanf(“%d%s%f”, &n_matricula, nombre, &saldo);
while(!feof(stdin))
{
fprintf(archivo, “%d %s %.2f\n”, n_matricula, nombre, saldo);
printf(“? ”); scanf(“%d%s%f”, &n_matricula, nombre, &saldo);
}
fclose(archivo);
return 0;
}
Examinando el programa:
El enunciado FILE *archivo establece que archivo es un apuntador a una estructura FILE.
El programa C administra cada archivo como una estructura FILE por separado. Para usar
archivos el programador no necesita saber los detalles específicos de la estructura FILE.
Cada archivo abierto debe tener un apuntador declarado por separado del tipo FILE, que es
usado para referirse al archivo.
La línea Archivo = fopen(“alumnos.dat”,”w”);
Nombra el archivo “alumnos.dat” para ser usado por el programa y establece una línea de
comunicación con el archivo. El apuntador del archivo archivo es asignado a un apuntador
a la estructura FILE para el archivo abierto con fopen.
La función fopen toma los argumentos, un nombre de archivo y un modo de apertura del
archivo. El modo del archivo abierto “w” indica que el archivo debe ser abierto para
escritura. Si existe el archivo y es abierto para escritura, el contenido del archivo se
descarta sin advertencia. Si no existe el archivo y es abierto para escritura, fopen lo crea.
El programa le solicita al usuario que introduzca los varios campos de cada registro o que
introduzca fin de archivo cuando esté completa la entrada de datos.
La línea While(!feof(stdin))
Usa la función feof para determinar si el indicador de fin de archivo está definido para el
archivo al que se refiere stdin. El indicador de fin de archivo le informa al programa que ya
no hay más datos a procesarse. La función regresa un valor verdadero una vez definido el
indicador de fin de archivo, de lo contrario regresa un cero (falso).
La línea fprintf(archivo, “%d %s %.2f”, n_matricula, nombre, saldo);
Escribe los datos al archivo alumnos.dat. Los datos pueden ser recuperados más tarde
mediante un programa diseñado para leer el archivo. La función fprintf es equivalente a
printf, excepto que fprintf también recibe como argumento un apuntador de archivo para el
archivo al cual se escribiran los datos.
Después que se introdujeron los datos, y ejecutado el fin de archivo, el programa cierra el
archivo alumnos.dat usando la función fclose. Esta función también recibe el apuntador de
archivo como argumento. Si no se llama a la función fclose normalmente cuando la
ejecución del programa termine el sistema operativo cerrará el archivo. Es recomendable
siempre cerrar los descriptores de archivo y no dejarle esa tarea al sistema operativo.
Descargar