Tabla de fichas Indice del Tema 1005
1001 1002 1003 1004 1005 1006 1007 1008

ARCHIVOS: FORMATO BINARIO NO HOMOGÉNEO.







Introducción.
Las estrategias de uso de memoria dinámica para el almacenamiento de registros en RAM pueden clasificarse en dos grandes bloques:



Archivos binarios inhomogéneos

Tanto si se emplea la primera estrategia como si se opta por la segunda, el volcado a disco de la información almacenada en estas estructuras (y su posterior recuperación) resultan más sencillas y rápidas empleando un archivo binario formado por un registro inicial, varios registros intermedios y (posiblemente) un registro final.

Formato de registro inicial.
Este primer registro contiene la especificación precisa del contenido posterior del archivo. La estructura dinámica empleada para el almacenamiento de la información en RAM consta de un cierto número de registros, y este número se almacena en el registro inicial. Una vez leído, se procede a preparar la estructura dinámica (lineal o no) que albergará la información, para su procesamiento.

Registros intermedios.
Una vez leído el registro inicial, y preparada la estructura, se van leyendo uno tras otro registros intermedios, en número ya conocido. Esta información se almacena en la estructura, sin que falte ni sobre espacio, porque el número de registros es conocido de antemano.

Formato de registro final.
Por último, se lee un registro que en muchos casos es una nueva copia del registro inicial. De este modo, se puede recuperar el contenido del archivo si por alguna razón se dañase el registro inicial. Si hubiera discrepancia entre los contenidos de ambos archivos, se puede notificar al usuario la aparición de posibles problemas. Es buena práctica de programación añadir a los registros información redundante destinada a la recuperación del archivo si se produjera algún tipo de error.

Ejercicios propuestos



En todos estos ejercicios se empleará la aproximación de módulos, de tal modo que sea posible ir añadiendo mejoras o modificaciones sin necesidad de recompilar todo el programa.

  1. Ejercicio 1005r01.- Considérense las estructuras siguientes:
    struct Registro {
    	char modelo[10];
    	int fecha;
    	char fabricante[20];
    	float peso;
    };
    
    

    Estas estructuras se han empleado en la sección anterior para construir una sencilla base de datos, que se almacenaba en dos archivos de disco de formato binario homogéneo. Se pide diseñar una estructura de registro inicial adecuada para almacenar toda la información de la base de datos en un archivo binario de formato inhomogéneo.

  2. Ejercicio 1005r02.- Considérese el registro inicial creado en el ejercicio anterior. Se pide construir una función adecuada para almacenar en disco toda la información de la base de datos, empleando un archivo binario inhomogéneo de la forma siguiente: El archivo construido debe cerrarse correctamente, con objeto de garantizar su corrección y posibilitar su posterior lectura.

  3. Ejercicio 1005r03.- Considérese el registro binario inhomogéneo construido en el ejercicio anterior. Se pide construir una función que cargue en memoria su contenido, poniendo a disposición del programa estructuras dinámicas que contengan la información leída.

  4. Ejercicio 1005r04.- El registro inicial del archivo binario tratado en el ejercicio anterior ha resultado dañado, de tal modo que su contenido es incorrecto. Construir un programa de reparación que lea el registro final y reconstruya el archivo dañado, creándolo de nuevo con un registro inicial y otro final correctos.

  5. Ejercicio 1005r05.- Construir dos funciones (altas() y bajas()) adecuadas para mantener una base de datos basada en los apuntes de inventario tratados en los ejercicios anteriores. La base de datos debe cargarse automáticamente al arrancar el programa, y se guardará también automáticamente al salir del mismo.

  6. Ejercicio 1005r06.- Construir dos funciones (informes() y modificaciones()) adecuadas para la realización de las tareas correspondientes en la base de datos construida en el ejercicio anterior. Esto completa el programa, que deberá ser una base de datos apta para el tratamiento de apuntes contables como los descritos, sin otras limitaciones que la memoria disponible y la cantidad de espacio libre en disco.

  7. Ejercicio 1005r07.- Añadir a la base de datos anterior las funciones necesarias para dotarla de capacidades de exportación en formato encolumnado y delimitado.

  8. Ejercicio 1005r08.- Añadir a la base de datos anterior las funciones necesarias para dotarla de capacidades de importación de datos en formato encolumnado y delimitado.