Unidad 11 ARCHIVOS Objetivos n n n n n Entender la función del almacenamiento externo como medio para solucionar el problema de guardar grandes cantidades de datos. Conocer y comprender el concepto de archivo o fichero. Comprender los conceptos relacionados con la nueva estructura de datos. Distinguir las características especiales de las estructuras de datos externas, y sus limitaciones y ventajas frente a las internas. Conocer y aplicar las operaciones de manejo de archivos (creación, lectura, escritura,...). n n n n Aprender las diferencias entre los distintos tipos de organización de archivos, y ser capaz de elegir la más idónea en cada caso. Saber diferenciar los distintos modos de acceso a los archivos según la organización de éstos. Aplicar los conocimientos anteriores para el diseño y construcción de programas que usen archivos. Integrar el uso de archivos en la construcción de aplicaciones. 2 1 Contenidos 1. INTRODUCCIÓN 2. GENERALIDADES 3. TIPOS DE FICHEROS 3.1. Según su función 3.2. Según su organización 4. MODOS DE ACCESO 4.1. Acceso secuencial 4.2. Acceso directo 5. OPERACIONES SOBRE FICHEROS Creación, Recorrido, ordenación, Actualización, Partición, Fusión, Borrado. 6. OPERACIONES SOBRE REGISTROS Consulta, Modificación, Supresión, Inserción. 7. FICHEROS DE ORGANIZACIÓN SECUENCIAL Creación, Recorrido, Consulta, Partición, Fusión Actualización, Actualización interactiva. 8. FICHEROS DE ORGANIZACIÓN DIRECTA 8.1. Modos de direccionamiento 8.2. Transformaciones calculadas de claves o Hashing 8.3. Tratamiento de sinónimos 8.4. Ventajas e inconvenientes de la organización directa 9. FICHEROS DE ORGANIZACIÓN SECUENCIAL INDEXADA 10. INCONVENIENTES DE LAS ESTRUCTURAS DE DATOS ARCHIVOS 3 Introducción n Estructuras de datos arrays, problemas: q q q n Aplicaciones triviales Limitación en almacenamiento de datos (memoria principal). Introducción de datos cada vez que se ejecuta el programa. Tiempo de vida de los datos limitado (memoria volátil). Solución de estos inconvenientes: ARCHIVOS q q Pueden tratar grandes cantidades de datos (memoria secundaria). Almacenamiento permanente (memoria no volátil). Aplicaciones mucho más complejas 4 2 ARCHIVOS o FICHEROS n Definición: • Los registros tienen formatos preestablecidos y número finito e indeterminado “Es una estructura externa de datos, constituida por un conjunto de elementos todos del mismo tipo, organizados en unidades de acceso, llamadas registros.” n Características: q q q q Residen en soporte de almacenamiento externo. La información se almacena de forma permanente. Alta capacidad de almacenamiento de datos. Independencia de la información que guardan respecto a los programas que los usan. 5 REGISTROS n n Registro lógico : cada uno de los componentes de un archivo. Registro físico o bloque: fragmento de un fichero que el sistema puede transferir, en una sola operación de E/S, entre la memoria principal y el dispositivo de almacenamiento. • El tamaño del bloque depende del procesador y del S.O. • La cantidad de registros lógicos de un bloque se llama Factor de Bloqueo. 6 3 Contenido de los registros n n n Campo: Cada uno de los elementos de un registro. Subcampo: Cada uno de los elementos de un campo. Clave: campo que identifica unívocamente a un registro. q q Puede ser uno o varios de los campos de información del registro. Puede ser creada con independencia de la información del registro. Longitud de los registros n Fija: todos los campos tienen longitud fija. q n Por ejemplo: ficheros binarios en C. Variable: algún campo tienen longitud variable. q Por ejemplo: ficheros de texto en C. Nombre Externo: nombre con el que lo reconoce el S.O. Interno: Variable con la que lo referencia el programa que lo usa. 7 Tipos de ficheros n Según su función o uso que se hace de ellos: q Permanentes: Su información varía poco en el tiempo n n n q q n De situación: estado actual de la información (F. maestros) De constantes: Consultas. Baja o nula modificación (Códigos Postales). Históricos: Nunca se modifican (Rentas de años anteriores) De movimientos: información para actualizar ficheros permanentes (compra-ventas diarias). De trabajo: Creados por el sistema, compilador,...(.bak). Según su organización: q q q Secuencial Directa Secuencial-indexada Fichero Secuencial Fichero Directo Fichero Secuencial-Indexado 8 4 Modos de accesos n Acceso secuencial: Para acceder a un registro en particular deben ser accedidos todos los registros que le preceden. Este modo de acceso se permite en soportes direccionables o no. q q n n Por ejemplo: Archivo de canciones almacenadas en cinta magnética, no tiene más remedio que organizarse de manera secuencial y accederse de igual forma. Acceso directo: Permite acceder a un registro directamente, sin tener que acceder antes a todos los registros que le preceden. Sólo se permite este modo de acceso en soportes direccionables, disquetes, discos duros, etc. El acceso puede realizarse bien por el número de registro o por la clave de acceso. q q q n Por ejemplo: Archivos almacenados en nuestro Pen Drive. 9 Operaciones sobre ficheros Operaciones que atañen al fichero completo n Creación: q Consiste en: n n q Normalmente se requiere establecer: n Forma en que se almacena: texto o binario. Tipo de organización: Secuencial, Directa o Secuencialindexada n Modo de acceso: Secuencial o Directo. n q Darle nombre Escribir registros iniciales Si los datos provienen de teclado Crear el fichero con programa independiente 10 5 Operaciones sobre ficheros n Recorrido: q n n Ordenación Actualización q n Descomponer un fichero en varios. Fusión q n Proceso para altas, bajas o modificaciones (sincronización de ficheros). Partición q n Lectura secuencial de todos los registros para un determinado proceso. Obtener un fichero a partir de dos o más ficheros de idéntica estructura. Borrado q Eliminación física del fichero. 11 Utilización de ficheros n Una vez creado el fichero, para usarlo: Realizar apertura: q q Comprobar su existencia y prever caso de error La apertura: n n n Establece vínculo NombreInternoó NombreExterno. Bloquea el fichero en exclusividad para su uso. Crea buffer de memoria intermedia. q q q q n El apuntador señala al primer registro y se mueve en cada acceso (registro Hay que indicar si se abre para leer, escribir o ambas cosas. activo) Procesar: q n para comunicaci ón entre memoria secundaria, memoria central y programa. A él se pasa un registro físico en cada acceso. Realizar las operaciones previstas. Cierre: q q q q Desvincula NombreInternoó NombreExterno. Desbloquea el fichero. Vacía el buffer. Coloca marca de fin de fichero. fichero 12 6 Operaciones sobre registros n Consulta: q n Localización de uno o varios registros. Modificación: q q Cambio de contenido de uno o varios de los campos de un registro que no sean clave. Para modificar: n n n Supresión: q Por marca n q Poner marca de obsoleto, pero el registro es accesible. Supresi ón real n n Búsqueda y lectura previa. Escritura de nuevos datos. Registro inaccesible o eliminación por sobreescritura de otro registro. Inserción de un registro: 13 Ficheros secuenciales n Características: q q Pueden crearse en todo tipo de soporte de almacenamiento. Los registros se almacenan como una lista lineal. n n q El acceso se realiza según el soporte de almacenamiento. n n Si el soporte es direccionable pueden almacenarse como fichero Secuencial Encadenado (No tienen por qué estar consecutivos en memoria ðlista enlazada) Ventajas: q q q n Ocupan posiciones consecutivas de memoria. En orden de entrada. Fácil localización ð Conocer campo de búsqueda. Eficiente con tasa de actividad alta. Eficaz aprovechamiento del espacio de almacenamiento (sin huecos libres) Inconvenientes: q q q Consulta lenta si son grandes. Procesar todo el archivo cualquiera que sea la operación a realizar. Uso de ficheros auxiliares para actualizar. 14 7 F.S. Creación n n Directamente con un editor de texto, si son ficheros de texto. Dise ñando un programa que lo cree (sea o no de texto). Pseudocódigo Generalizado <CREAR FICHERO_N> inicio abrir FICHERO_Npara escribir <Procesar Fichero> cerrar FICHERO_N fin Similar a ... escribir (datos) <Procesar Fichero> leer (condicion) /* Se lee la VCB para controlar la entrada de datos */ mientras (condicion sea cierta) leer(datos) escribir en registro de FICHERO_N(datos) leer (condicion); fin_mientras FinPF 15 F.S. Recorrido n n Acceso secuencial desde el primero al último registro para procesar: Escribir, pintar en pantalla, actualizar, etc. Para el recorrido se usará un bucle controlado por fin de fichero. <RECORRIDO> Similar a ... leer (registro) inicio abrir Fichero_N para.../* ...leer, escribir, L/E, según proceso a realizar */ Si hay error de apertura <ProcesarFichero_N> Escribir (“Error...”) Inicio En otro caso Leer registro de Fichero_N (registro) <ProcesarFichero_N> Mientras (no FF) //FF, fin de fichero <Procesar registro> Cerrar Fichero_N Leer registro de Fichero_N (registro) Finsi Fin mientras FinR FinPR 16 8 F.S. Consulta n n n Buscar secuencialmente en el archivo información referente a un registro, según un valor de uno de los campos. Si existen varios registros con el mismo valor del campo de búsqueda, se obtendrá el primero de ellos, salvo que se especifique como precondición buscarlos todos. El archivo puede estar q q Desordenado è llegar al final buscando para afirmar que no existe registro buscado. Ordenado è no es necesario recorrerlo hasta el final para asegurar que el registro no existe. 17 Búsqueda secuencial en archivo INTERFAZ Propósito: buscar secuencialmente un elemento en un fichero. Entradas: el elemento a buscar y el fichero. Precondiciones: ninguna. Salidas: un entero Postcondiciones: asociado al nombre se devuelve: - Número de registro del elemento buscado, si es encontrado. - -1 si el elemento no se encuentra. - 0 si se produce error en la apertura del fichero. 18 9 F.S. Partición n n La operación no afecta al fichero de origen. Distintos algoritmos de partir ficheros en razón de diferentes especificaciones: q Partición por contenido. n n q Objetivo: “dividir un archivo según una condición de partición que determina que registros se almacenan en un fichero y cuáles en otro”. Por ejemplo: Ver diapositiva sig. Partición en secuencias. n n Objetivo: “distribuir los registros de un fichero en otros ficheros, obedeciendo a secuencias alternativas de igual o diferentes longitudes” Por ejemplo: Ver diapositiva sig. 19 F.S. Ejemplos para partir n Contenido Partir un fichero de nombre Fichero Contenido: en otros dos, Fichero1 y Fichero2, pasando a Fichero1 los registros de Fichero cuyo valor del CampoRegistro sea igual al valor prefijado de Campo y al Fichero2 los registros que no cumplan esta condición. Ver pag. 417 - 418 n Secuencias Partir Fichero en Fichero1 y Secuencias: Fichero2, con longitud de secuencias de distribución de registros igual a 1, es decir, que pasen a Fichero1 los registros que ocupan las posiciones pares y a Fichero2 los que ocupan posiciones impares. Ver pag. 418 20 10 F.S. Fusión n n n Objetivo: agrupar en un sólo fichero los registros de otros archivos. La operación no afecta a los ficheros de origen. El orden de origen puede o no ser mantenido: q q Archivos de origen desordenado. Ver pag. 419 n Objetivo: “almacenar secuencias de registros de longitud determinada de cada archivo origen en el destino”. n Por ejemplo: Sean Fichero1 y Fichero2 archivos desordenados origen a fusionar, Fichero el destino, también desordenado y Longitud el tamaño de las secuencias. Archivos de origen ordenado. n Mezcla controlada por FF Objetivo: “Fusionar conservando el orden” 21 F.S. Ordenación n HÍBRIDA q Proceso: cargar la información del archivo en un array, ordenar el array, volver la información del array ya ordenado al archivo. q Método aplicable sólo si la totalidad de la información a ordenar cabe íntegramente en la memoria central. q El array tendrá la misma estructura que los registros del archivo y tantas casillas como registros tenga éste. q Pueden usarse arrays dinámicos para los que se pedirá tanta memoria como registros tenga el archivo. n EXTERNA q q q q Se realiza si el archivo no cabe en memoria central. Tiene la desventaja de ser mucho más lenta que la ordenación híbrida (acceso a memoria secundaria). Requiere un número de archivos auxiliares dependiente del método que se vaya a implementar. El método más común es el conocido Método de mezcla directa. directa 22 11 F.S. Ordenación Híbrida <OrdenHibrida FICHERO> > inicio <Calcular NumRegistros del FICHERO> pedir memoria para el ARRAY <Volcar FICHERO en ARRAY> <Volcar FICHERO en ARRAY> <Ordenar ARRAY> <Volcar ARRAY en FICHERO> inicio abrir FICHERO para leer Devolver memoria del ARRAY Si no hay errores de apertura Fin Ordenar leer reg de FICHERO (AUX ) Para (I = 0, mientras (no FF), I = I + 1) ARRAY [ I ] = AUX leer reg de FICHERO (AUX) fin_mientras cerrar FICHERO Finsi Fin volcar 23 F.S. Ordenación Externa n Método de mezcla directa q Ver pag. 423 Proceso: realizar sucesivamente una partición y una fusión de archivos, con lo que se producen secuencias ordenadas de longitud cada vez mayor. n n n n Para realizar las sucesivas operaciones de particiones y mezclas, se requieren dos ficheros auxiliares con la misma estructura que el original. La primera partición se hace en secuencias separadas por una distancia o longitud 1, y la fusión correspondiente produce sobre el archivo inicial secuencias ordenadas de longitud 2. Con cada nueva partición y mezcla se duplica la longitud de las secuencias ordenadas. El proceso finaliza cuando la longitud de la secuencia ordenada es igual o excede a la longitud del archivo a ordenar. 24 12 F.S. Actualización n Proceso: Si la información está en un archivo principal, se n guardarán las modificaciones en un archivo auxiliar llamado DE MOVIMIENTOS. Y cada cierto tiempo se procederá a la actualización del fichero MAESTRO, generando un fichero MAESTRO ACTUALIZADO. Y ambos ordenados siguiendo un mismo criterio. CONSIDERACIONES: q q n Los registros tendrán una clave de ordenación única. Cada registro tendrá como máximo un movimiento. Recorreremos simultáneamente los dos ficheros , compararemos los campos clave y analizaremos cada situación: q Registro de movimiento con registro de maestro n si es una Baja à no se copia en el maestro n si es una Modificación à se actualiza y se graba en el maestro n si es un Alta à se produce un error porque ya existe ese registro. § LEEREMOS DE FICHERO MAESTRO Y DE MOVIMIENTOS 25 F.S. Actualización q Registro de maestro sin movimiento ¿ACCIÓN? • Grabaremos el registro en el maestro directamente § LEEREMOS DE FICHERO MAESTRO q Registro de movimiento sin maestro n si es una Alta à se copia en el maestro n si es una Baja o Modificación à se produce un error no existe ese registro. § LEEREMOS DE FICHERO MOVIMIENTOS Ver pag. 427 y ejercicio 6 26 13 F.Directos n n Debemos contar con un soporte que admita el direccionamiento directo Se establece una relación entre el campo clave y la dirección de almacenamiento del registro: q q Si la clave es numérica: se le aplica un algoritmo de transformación de clave. Si la clave no es numérica: se convierte a numérica y después se le aplica un algoritmo de transformación de clave. 27 F.D. Direccionamiento n Directo : la dirección es la clave. n Por tabla: n Calculado o Hashing: Dirección = Fórmula(clave) – hay que creamos una tabla donde guardamos cada clave asociada a una dirección. controlar muy bien los sinónimos que aparezcan. F.D. VENTAJAS E INCONVENIENTES ? ? ? ? ? Acceso a los registros es directo y rápido No son necesarios ficheros auxiliares Supresiones por marcas y directas El software apara la gestión es responsabilidad del programador. Se desaprovecha espacio en el soporte de almacenamiento. ? No admiten métodos de acceso secuencial. 28 14 F. Secuenciales Indexados n n Cada registro se identifica unívocamente con una clave única, conocida como clave primaria. Y esta clave pertenece al registro. Organizado en tres zonas: q Área de índices: q Área primaria: zona dividida en segmentos que contiene, organizada secuencialmente y actualizada permanentemente. Cada registro contiene la dirección de comienzo de un bloque y la clave más alta que contiene. organizados secuencialmente, más de un registro q Área de excedentes: contendrá aquellos registros que no caben en el área principal. 29 F. Secuenciales indexados: VENTAJAS E INCONVENIENTES ? No hay espacio libre entre registros. ? Es posible la actualización sin necesidad de un archivo auxiliar. ? Las altas son siempre por marca y después hay que reorganizar el fichero. ? Las bajas sólo se pueden efectuar por marcas. ? Se necesita espacio para la tabla de índices. ? No es aconsejable para ficheros con un alto número de actualizaciones y modificaciones. Todos estos problemas terminan buscando una solución en una Base de Datos. Aquí los datos son independientes de los programas y la peticiones por parte de éstos se resuelven a través de el Sistema Gestor de Base de Datos. 30 15 " Si sale, sale. Si no sale, hay que volver a empezar. Todo lo demás son fantasías." Edouard Manet, 31 16