Ficheros en los lenguajes de programación

504 visualizaciones

Publicado el

Publicado en: Educación
0 comentarios
0 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Sin descargas
Visualizaciones
Visualizaciones totales
504
En SlideShare
0
De insertados
0
Número de insertados
2
Acciones
Compartido
0
Descargas
5
Comentarios
0
Recomendaciones
0
Insertados 0
No insertados

No hay notas en la diapositiva.

Ficheros en los lenguajes de programación

  1. 1. TEMA 11. INTRODUCCIÓNLos datos con los que trabajamos normalmente en informática son procesados y manipulados de forma directaen lo que denominamos normalmente como Memoria Principal. Esto repercute en una doble limitación a lahora de tratar la información correspondiente :Por ser limitada la memoria principal, esto implica que la capacidad de almacenamiento queda tambiénlimitada o restringida a la capacidad propia de cada memoria principal que puede ser de diferente tamañosegún el ordenador y sus características. Por ello deberemos de recurrir a otros dispositivos dealmacenamiento de datos o de almacenamiento masivo de información, como la denominada MemoriaAuxiliar.Todos los datos que quedan almacenados en la memoria principal, podemos decir que tienen un corto o breveperíodo de vida que variará siempre en función del tiempo que dure o tarde en ejecutarse el programa encuestión. Una vez que este programa finaliza su ejecución, sus datos correspondientes se pierden de formairremediable y para siempre si antes no se han almacenado en un dispositivo o periférico de tipo externo comopodría ser por ejemplo un disco de almacenamiento.El uso de ficheros nos va a servir de gran ayuda a la hora de estructurar adecuadamente toda la información, yademás nos facilitará el manejo de grandes volúmenes de datos. Los ficheros nos permiten acceder a esacreciente avalancha de información de una forma rápida.Cualquier aplicación implica la generación y uso de una determinada información. Con algunas excepcionesla entrada a la aplicación se hace utilizando archivos y casi en todas las aplicaciones, la salida se guarda enarchivos para almacenamiento a largo plazo y para posteriores accesos por parte del usuario y de otrosprogramas.TEMA 22. CONCEPTOS Y DEFINICIONESFICHEROUn fichero es un conjunto de datos estructurados que pueden estar almacenados en un soporte de datos deforma que puedan ser tratados o utilizados de forma individual o global. Cada fichero se tiene que identificarcon un nombre. Los elementos que forman un fichero se llaman registros y dichos registros se definen comola unidad mínima de información completa de un fichero.Existen dos modelos de ficheros:Fichero Lógico:Los crea el programador agrupando un conjunto de datos con características comunes (nombres, apellidos,dirección, teléfono... etc. ).Fichero Físico:Es una determinada cantidad de información que el sistema operativo es capaz de tratar como una sola unidad. 1
  2. 2. TIPOS DE FICHEROSEGÚN SU UTILIZACIÓNPermanentes o fijos:Constantes:Contienen información fija y necesaria para el óptimo funcionamiento y rendimiento de la aplicación einformación con un bajo índice de variación en el tiempo.Por ejemplo un fichero de códigos postales en el cual se pueden relacionar códigos postales con una serie dediversas poblaciones y distritos. Contienen tablas y funciones.Históricos :Contienen información acumulada a lo largo del tiempo sobre las actualizaciones sufridas en los ficherosmaestros y constantes. Los hacen los usuarios para las estadísticas. Por ejemplo el inventario al final de año delas existencias de un almacén.Maestros :Ficheros maestros llamados también ficheros de situación. Están encargados de mantener de forma constantey actualizados los campos cuya información es variable. Estos ficheros se modifican constantemente. Porejemplo un fichero de inventario con información sobre la cantidad de piezas existente en un almacén.No permanentes o temporales:Se borran y actualizan a los ficheros fijos maestros.Fichero de movimientos:Este tipo de ficheros suele contener la información necesaria para la actualización de los ficheros maestros.Contienen las últimas modificaciones que hay que añadir al fichero maestro. La información se obtiene de losresultados obtenidos en operaciones realizadas y que posteriormente será utilizada para actualizar los camposque tienen en común el fichero maestro y el fichero de movimiento.La durabilidad o período de vida de este tipo de ficheros es muy corto, debido a que su función o utilidadfinaliza al efectuarse la modificación o actualización de dichos datos (Campos) en el fichero maestro. Una vezrealizada dicha operación el fichero de movimientos puede ser destruido o mantenido durante un tiempolimitado. Por ejemplo los datos de una cuenta bancaria.Ficheros de maniobra o transitorios:Son ficheros auxiliares creados durante la ejecución de programas o aplicaciones. El fin de estos ficheros es elde obtener cierta información que posteriormente será procesada para conseguir unos resultados esperados ocalculados. Su período de vida es aún mas corto que el de los ficheros de movimiento o transición, pues sondestruidos antes de que el programa o la aplicación correspondiente finalice su ejecución y el usuario nopuede verlos.Por ejemplo un fichero auxiliar que contiene la clasificación de un fichero de inventario para hacer un listadoestadístico anual. Finalizado el proceso de listado, es destruido. 2
  3. 3. Ficheros de trabajo:Este tipo de ficheros son creados por el sistema para crear los ficheros de maniobra o transitorios.SEGÚN SU ORGANIZACIÓN:Ficheros secuenciales:Es aquel fichero cuyos registros pueden ser tratados en secuencia, unos datos detrás de otros. Después dehaber leído un registro el dispositivo de lectura se posiciona al principio del siguiente registro.Este tipo de ficheros son muy convenientes cuando tenemos que leer todos los datos del fichero. No podemosañadir datos a un fichero secuencial, se copia todo en un fichero nuevo.Ficheros relativos:La principal ventaja de estos archivos es la de permitir el acceso directo a un determinado registro sin tenerque acceder de forma secuencial, sino utilizando una clave para ello. En este tipo de ficheros la clave esfundamental ya que se utilizan para obtener la posición relativa de cada registro dentro del fichero. Estosficheros deben estar almacenados en un soporte de acceso directo, como un disco duro o un disquete.Ficheros indexados secuenciales:Mediante este tipo de ficheros podemos solucionar el problema de los ficheros secuenciales respecto a laactualización y acceso a un registro, haciéndolo de forma casi directa, así como la realización de altas y bajas.Este tipo de ficheros tiene que estar almacenado en un soporte físico de acceso directo.Todos los registros del fichero tendrán un campo clave para identificarlo de forma única, no pudiendo existirdos registros con el mismo campo clave. Será por este campo por el cual se graben en orden ascendente y selocalicen los registros del fichero.Ficheros indexados:En este tipo de ficheros se abandonan los conceptos de secuencialidad y clave única. Se alcanza unaflexibilidad utilizando una estructura que utiliza múltiples índices, uno para cada tipo de campo que pueda serobjeto de búsqueda. A los registros se accede solo a traves de los índices. Como resultado existe unarestricción a la ubicación de los registros. Por ello al menos un índice contiene un puntero a cada registro ypueden utilizarse registros de longitud variable.Se suelen utilizar dos tipos de índices:Un índice exhaustivo, que contiene una entrada para cada registro del archivo principal. Este índice seorganiza en sí mismo como un archivo secuencial, facilitando la búsqueda.Otro índice parcial contiene entradas a los registros donde está el campo de interés. Al utilizar registros delongitud variable, algunos registros no contendrán todos los campos. Si añadimos un registro al archivoprincipal, todos los archivos de índice deben actualizarse.TEMA 33. ESTRUCTURA DE REGISTROS 3
  4. 4. Existen dos tipos de registros:Registro lógico:Son estructuras de datos homogéneas que hacen referencia a una misma entidad o cosa. Esta estructura estádividida a su vez en unos elementos más pequeños a los cuales denominaremos Campos, estos podrán ser delmismo o diferente tipo. Podríamos considerar al registro como una unidad de tratamiento incluida dentro deun fichero.Registro físico:Un registro físico al que podemos llamar también bloque, es la cantidad de información que el sistemaoperativo puede transferir como unidad al realizar una operación de entrada y salida entre la memoriaprincipal del ordenador y los periféricos o dispositivos de almacenamiento. El tamaño de un bloque o registrofísico dependerá o variará en función de las características del ordenador.DEFINICIONES :Campo :Llamaremos campo a cada uno de los elementos que constituyen un registro lógico, considerándolo como unaunidad de tratamiento independiente dentro del mismo registro. Cada campo se caracteriza y se diferencia delos demás dentro de un registro por:El tipo de dato que tiene asociado (numérico, alfanumérico, lógico, de tipo fecha, de campo memo,... etc. ).El identificador o nombre a través del cual podemos referenciarle y acceder a su contenido (nombre, apellidos,dirección, fecha de nacimiento,... etc. ).El tamaño del dato (20 bytes, 45 bytes,... etc.).Subcampo :Los campos de un registro, con frecuencia, se pueden subdividir en unidades de tratamiento con las mismascaracterísticas que un campo. De esta forma podemos establecer cierta jerarquía entre los datos almacenadosdentro de un fichero y más concretamente dentro de cada registro. Esta jerarquía deberá tenerse en cuenta a lahora de tratar o procesar la información que tenemos almacenada. Dentro de un subcampo puede haber massubcampos.Campo clave:Para poder diferenciar a un registro de otro dentro de un fichero, se tiene que recurrir a una información quesea única. Esta información sólo nos la puede ofrecer el campo clave. Este campo solo se puede crear conindependencia del resto de la información (campos) del registro o por defecto se puede utilizar un campo delos ya existentes y disponibles en la estructura de dicho registro. El objetivo es poder realizar a traves de éloperaciones de búsqueda y clasificación. La definición de un campo clave en un fichero no es obligatoria, esdecir, se puede carecer de ella o puede estar formada por varias definiciones de campos claves, en cuyo casose establecerán diferentes categorías entre ellas, dando lugar a lo que denominaremos como clave principal yclaves secundarias.Bloqueo de registro o registro bloqueado: 4
  5. 5. Un registro puede constar de un número variable de registros lógicos, por tanto, suponiendo que utilizáramoscomo soporte de almacenamiento el disco, podríamos transferir varios registros lógicos de la memoria al discoy del disco a la memoria en una sola operación de entrada y salida. Este fenómeno recibe el nombre debloqueo y el registro físico así formado se llama bloque.Registro expandido:Es justamente el concepto contrario del registro bloqueado, cuando el registro lógico ocupa varios bloques sele da la denominación de registro expandido.Factor de bloqueo:Con factor de bloqueo hacemos alusión al conjunto o número de registros lógicos que pueden entrar o estarcontenidos en un bloque o registro físico.Ejemplo :210 97 Tamaño del registro lógico.162 Factor de bloqueo.Resto : Nº de bytes que sobran.Tamaño del registro físico.REGISTRO LÓGICONOMBRE APELLIDOS DIRECCIÓN EDADTamaño : 97 bytesREGISTRO FÍSICO O BLOQUE DE 210 BytesREGISTRO LÓGICO 1 REGISTRO LÓGICO 2 ?Factor de bloqueo=2 Espacio sobrante=16 bytesEstructura de registros :FICHERO1 2 3 4 5 6 7 8 9 10 11 12REGISTRO 7COD_ALUMNO NOMBRE APELLIDOS FECHA_NACCAMPO FECHA_NACDIA MES AÑO 5
  6. 6. SUBCAMPO DIATEMA 4• CLASIFICACIÓN DE REGISTROS• Formas de gestión en variossistemas.• Registros de longitud fija.• Registros de longitud variable.Un registro está constituido por campos. Estos pueden ser de longitud fija o variable e incluso existir unnúmero distinto de campos en cada uno de los registros.• REGISTROS DE LONGITUD FIJA:Los registros tienen todos el mismo tamaño.Existen cuatro tipos o formas de diseño.• Con igual número de campos y la misma longitud. No es necesario definir ni el principio ni el final.Ejemplo :Tamaño :Registro 30campo 1 8 Se definen al principio del programacampo 2 12campo 3 102. Con igual número de campos pero distinta longitud, cambia la longitud. Tenemos que expresar la longitudde cada campo.Ejemplo :4 campo 6 campo 20 campoLongitud del campoOtro ejemplo :TIPO A : A 4 16 10 =30 TIPO B : B 8 12 10 =30campo 1=4 campo 1=8campo 2=16 campo 2= 12 6
  7. 7. campo 3=10 campo 3=10Poniendo al principio del registro el tamaño de los tres campos, será más rápido que el anterior porque miralos tres campos de una sola vez.• Cuando se tiene un número de campos igual en ambos registros, pero estos son de distinta longitud de campo en el mismo o diferentes registros.Ejemplo :REGISTRO Nº 1: CAMPO CAMPO CAMPO CAMPOREGISTRO Nº 2: CAMPO CAMPO CAMPO CAMPO• Con distinto número de campos y distinta longitud:1º) En primera posición se pone el número de campos, y antes de cada campo se pone su tamaño.Ejemplo :4 2 CAMPO 4 CAMPO 3 CAMPO 7 CAMPONúmero de campos Tamaño del campo2º) Se ponen todos los datos al principio.Ejemplo :7,2,4,3Tamaño de los campos3º) Definiendo los tipos ( A, B, C ).Ejemplo :TIPO A : A 8 9 13 =30 TIPO B : B 6 20 4 =30campo 1=8 campo 1=6campo 2=9 campo 2=20campo 3=13 campo 3=4Lo normal es que los registros utilizados sean de longitud fija.4.2 REGISTROS DE LONGITUD FIJA :Ejemplos :Mismo número de campos por registro e igual longitud de los campos en el mismo y distintos registros. 7
  8. 8. Registro 1 A B C D E F G H I J K L MRegistro 2 A B C D E F G H I J K L MIgual número de campos por registro, y distinta longitud de cada campo del mismo registro e idéntica longituddel mismo campo en distintos registros.Registro 1 A B C D E F GRegistro 2 A B C D E F GIgual número de campos por registro, y distinta longitud de campos en el mismo y diferentes registros.Registro 1 A B C D .................................. NRegistro 2 A B C D ........................ NRegistro 3 A B C D .................................. NDiferente número de campos por registro y distinta longitud de campo en el mismo y diferentes registros.Registro 1 A B C D ERegistro 2 A B C DRegistro 3 A B C D E F G H4.3 REGISTROS DE LONGITUD VARIABLE :El tamaño total del registro es variable ( longitud indefinida o variable). En este tipo de registros es necesarioestablecer desde el programa un tratamiento para diferenciar el comienzo y fin de cada campo y cada registro.Existen tres tipos o formas de diseño :1º) Ponemos al principio la longitud del registro y en cada campo la longitud del campo.Ejemplo :89 12 CAMPO 38 CAMPO 20 CAMPO 19 CAMPOTamaño total del registro Tamaño del campo2º) Pondremos señales de final de campo y de registro.Ejemplo :CAMPO + CAMPO + CAMPO + CAMPO *Señal de final de campo Señal de final de registro3º) Definiremos tipos. 8
  9. 9. Ejemplo :TIPO A : A 9 12 9 TIPO B : B 6 13 11campo 1=9 campo 1=6campo 2=12 campo 2=13campo 3=9 campo 3=11El resultado sería :B CAMPO B CAMPO A CAMPO A CAMPORegistros de longitud variable :Son aquellos registros cuya longitud varía de un registro a otro.Registro 1 A B C D E XXXXXRegistro 2 A B C DRegistro 3 A B C D E F G H XXXXXXRegistro 4 A B C D E F G H XXXTEMA 55. OPERACIONES CON REGISTROS• Forma lógica• Pseudocódigo• FORMA LÓGICA :Las dos operaciones esenciales que se pueden realizar con los registros son las siguientes :LECTURA :Esta operación implica el movimiento de información que va desde el fichero a la Memoria Central delordenador. Esta información está contenida en un registro.Para guardar la información del registro en la memoria central habrá que asignar unas variables. En laoperación de lectura los nombres de las variables que están encargadas de almacenar los datos del registroleído se habrán asignado a los campos del mismo.Los datos no desaparecen de la memoria auxiliar, sino que se copian en las variables antes mencionadas. Eneste momento ya podemos proceder a su uso para lo que queramos.Si realizamos una nueva lectura, los datos del nuevo registro ocuparán el lugar del anterior sustituyéndolos.Solo podemos disponer de un registro en cada instante del proceso. 9
  10. 10. Cuando el fichero se acaba, el sistema detecta que lo que ha leído no es un registro, a esto se le llama marcade fin de fichero.Un fichero de entrada es aquel que se utiliza para hacer operaciones de lectura, el flujo de información vadesde el fichero a la memoria central.ESCRITURA O GRABACIÓN :Esta opción implica movimiento de información desde la memoria central hacia el fichero en cuestión. Lainformación comprende al delas variables cuyos nombres coincidan con los campos definidos para un ficheroEl fichero de salida es aquel que recibe la información de la memoria central y la escribe es sus registros.Utilizando la lectura y escritura de registros podemos realizar una serie de operaciones, que son las siguientes:Altas :Consiste en la adición o inserción de uno o más registros en el fichero. Esta operación sólo será posible si elfichero ya existe.Bajas :Consiste en eliminar uno o varios registros del fichero. Esta operación requiere un primer proceso de lecturapara la localización del registro que se pretende borrar.Modificaciones :Consiste en realizar un cambio total o parcial de uno o varios campos de los registros de un fichero. Estaoperación requiere un primer proceso de lectura para la localización del registro que se desea modificar y unsegundo proceso de escritura para la actualización de todo o parte del registro.Consultas :Esta operación nos permite acceder a uno o varios registros con la intención de visualizar el contenido total oparcial de sus campos en pantalla o impresora en forma de listados ordenados siguiendo ciertos criterios declasificación establecidos por el usuario.• PSEUDOCÓDIGO :FICHEROS SECUENCIALES :Consultas :Se supone :Un fichero lógico llamado Fich.Un registro llamado R_Fich.La condición establecida campo_n = valor introducido por teclado.El fichero Fich está asignado a un fichero físico y abierto para lectura. 10
  11. 11. a) Consulta en un fichero secuencial desordenado :Búsqueda de un registro :INICIOAbrir Fich de lecturaLeer valorsw=0Mientras no FF (Fich) y sw=0 hacerleer R_Fich de FichSi campo_n = valor entoncessw=1FinsiFinmientrasSi sw=1 entoncesescribir R_Fichsinoescribir No encontradoFinsiCerrar FichFinb) Consulta en un fichero secuencial ordenado :Búsqueda de un registro :INICIOAbrir Fich de lecturaLeer valorsw = 0Mientras no FF (Fich) hacer 11
  12. 12. Leer R_Fich de FichSi campo_n >= valorsw = 1FinsiFinmientrasSi sw = 1 y campo_n = valor entoncesEscribir R_FichSinoEscribir No encontradoFinsiCerrar FichFinBúsqueda de todos los registros :INICIOAbrir Fich de lecturaLeer valorsw = 0Encontrado = FMientras no FF (Fich) y sw = 0 hacerLeer R_Fich de FichSi campo_n > valor entoncessw = 1SinoSi campo_n = valor entoncesEscribir R _FichEscribir Encontrado = V 12
  13. 13. FinsiFinsiFinmientrasSi Encontrado = FEscribir No encontradoFinsiCerrar FichFinActualización : (Altas, Bajas, y modificaciones )• Actualización por lotes :Se actualiza un fichero origen ordenado por un campo clave con un lote de transacciones contenidas en unfichero de movimientos con la misma ordenación que el fichero origen, además contiene un campo que indicael tipo de movimientos ( alta, baja, o modificación ). Esto implica que la información que no sea baja oerronea pasa al fichero destino con los registros ordenados y actualizados. Los errores producidos en laactualización pueden ser enviados a una impresora o escritos en el soporte de almacenamiento para suposterior tratamiento.Para la actualización, se van a utilizar cuatro ficheros :Un fichero de origen ( Fich_origen )Un fichero de movimientos ( Fich_mov )Un fichero de destino ( Fich_destino )Un fichero de errores ( Fich_errores )INICIOVariables :clave_origenclave_destinoregistro_origenregistro_destinoregistro_movregistro_error 13
  14. 14. resto_destinoresto_movAbrir Fich_origen de lecturaAbrir Fich_mov de lecturaAbrir Fich_destino de escrituraAbrir Fich_errores de escrituraFin_origen = 0Fin_mov = 0Procedimiento Leer_origenProcedimiento Leer_movMientras Fin_origen = 0 y Fin_mov = 0 hacerSi clave_origen < clave_mov entoncesProcedimiento CopiaProcedimiento Leer_origenSinoSi clave_origen > clave_mov entoncesProcedimiento AltaProcedimiento Leer_movSinoProcedimiento Baja_modifProcedimiento Leer_origenProcedimiento Leer_movFinsiFinsiFinmientrasMientras Fin_origen = 0 hacer 14
  15. 15. Procedimiento CopiaProcedimiento Leer_origenFinmientrasMientras Fin_mov = 0 hacerProcedimiento AltaProcedimiento Leer_movFinmientrasCerrar Fich_origen, Fich_mov, Fich_destino, Fich_errorFinProcedimiento Alta :INICIOSegún sea tipo_mov`A´ :clave_destino = clave_movresto_destino = resto_movEscribir registro_destino en Fich_destinoOtros :registro_error = registro_movEscribir registro_error en Fich_errorFinsegún_seaFinSegunSeaFINProcedimiento Leer_origen :INICIOSi FF ( Fich_origen ) entoncesFin_origen = 0 15
  16. 16. SinoLeer registro_origen de Fich_origenFinsiFinProcedimiento Leer_mov :INICIOSi FF ( Fich_mov ) entoncesFin_mov = 0SinoLeer registro_mov de Fich_movFinsiFinProcedimiento Baja_Modif :INICIOSegún_sea Tipo−mov`B´ :** No se copia`M´ :** Se modifican los campos deseadosEscribir registro_destino en Fich_destinoOtros :registro_error = registro_movEscribir registro_error en Fich_errorregistro_destino = registro_orgenEscribir registro_destino en Fich_destinoFinsegún_sea 16
  17. 17. FinsegunseaFINProcedimiento Copia :INICIOregistro_destino = registro_origenEscribir registro_destino en Fich_destinoFIN• Actualización interactiva :Consiste en actualizar un fichero introduciendo datos por teclado, produciremos altas. Bajas, y modificacionesde registros. Utilizaremos un fichero temporal para organizar el fichero cuando tengamos que hacer una baja oun borrado de registro. Las altas se producen en el lugar correspondiente, tendremos que utilizar un ficherotemporal para reorganizar el fichero si este está ordenado, sino las altas se realizarán añadiendo registros alfichero. Los errores se presentan en pantalla cuando se producen.Se utilizará un fichero llamado ( Fichero ) y un fichero temporal llamado ( Temp )INICIOVariables :vclavevale_claveverif_claveclave_registroresto_registroRepetirEscribir 1. Alta• Baja3. ModificaciónEscribir Seleccionar operaciónLeer operaciónSegún_sea operación 17
  18. 18. 1 : Procedimiento Alta2 : Procedimiento Baja3 : Procedimiento ModificaciónFinsegún_seaMientras operación > 0 y operación < 4 hacerCerrar FicheroFinProcedimiento Alta :INICIOEscribir Introducir clave para altaLeer vclaveVale_clave = Verif_clave ( vclave )Cerrar FicheroSi vale_clave = V entoncesEscribir Clave existente. No hay altaSinoAbrir Fichero para añadirclave_registro = vclaveLeer resto_registroEscribir registro en FicheroFinsiFinProcedimiento Baja :INICIOEscribir Introducir clave para bajaLeer vclave 18
  19. 19. vale_clave = verif_clave ( vclave )Cerrar ficheroSi vale_clave = F entoncesEscribir No existe clave para bajaSinoEscribir registroAbrir Fichero para leerAbrir Temp para escribirMientras no FF ( Fichero ) hacerLeer registro de FicheroSi clave_registro <> vclave entoncesEscribir en TempFinsiFinmientrasBorrar_Fichero ( Fichero )Renombrar_Fichero ( Temp, Fichero )FinsiFinProcedimiento Modificación :INICIOEscribir Introducir clave para modificar registroLeer vclavevale_clave = veirf_clave ( vclave )Si vale_clave = F entoncesEscribir No existe clave para modificarsino 19
  20. 20. Escribir registro** Leer valores de campos del registro que se va a modificar.Escribir registro de FicheroFinsiFinProcedimiento Verificar_clave ( clave)INICIOAbrir Fichero para lectura y escriturasw = 0Mientras no FF ( Fichero ) y sw = 0 hacerLeer registro de FicheroSi clave_registro = clavesw = 1FinsiFinmientrasSi sw = 1 entoncesretorno VSinoretorno FFinsiFinFICHEROS SECUENCIALES INDEXADOS :• Actualización desde un fichero secuencial de movimientos (Proceso Batch ) :Iremos actualizando en un fichero secuencial de movimientos, durante un período de tiempo las altas, bajas, ymodificaciones producidas sobre el fichero secuencial indexado. El fichero maestro contendrá todos losmismos campos, y además un campo tipo de movimiento. Uno de los campos será un campo identificador oclave por el que se buscará el registro.Ejemplo : 20
  21. 21. Tenemos los siguientes ficheros :AR_COD AR_NOM AR_DIRE AR_EXIS FARTIX(5) A(30) 9(6) 9(4)MV_COD MV_MOV MV_PRE MV_EXIS MV_TIPO FMOVIX(5) A(30) 9(6) 9(4) A(1)ER_COD ER_NOM ER_PRE ER_EXIS ER_TIPO ER_MENX(5) A(30) 9(6) 9(4) A(1) A(30)FERRORINICIOVariables :FARTI : Fichero Secuencial indexadoRARTIAR _COD :Alfanumérico, 5AR_NOM :Alfabético, 30AR_PRE :Numérico, 6AR_EXIS :Numérico, 4FMOVI : Fichero SecuencialRMOVIMV_COD :Alfanumérico, 5MV_NOM : Alfabético, 30MV_PRE : Numérico, 6MV_EXIS : Numérico, 4MV_TIPO : Alfabético, 1FERROR :Fichero SecuencialRERRORER :COD : Alfanumérico, 5 21
  22. 22. ER_NOM : Alfabético, 30ER_PRE : Numérico,6ER_EXIS : Numérico, 4ER_TIPO : Alfabético, 1ER_MEN : Alfabético, 30Abrir de entrada y salida FARTIAbrir de entrada FMOVIAbrir de entrada FERRORLeer FMOVIMientras no FF FMOVI hacerSi MV_TIPO = A entoncesProcedimiento ALTASinoSi MV_TIPO = B entoncesProcedimiento BAJASinoSi MV_TIPO = M entoncesProcedimiento MODIFICACIONESSinoER_MEN ! Error de tipo en FMOVI Procedimiento ERRORFinsiFinsiFinsiFinmientrasCerrar Ficheros FARTI, FMOVI, FERRORFin 22
  23. 23. Procedimiento Alta :INICIOAR _COD ! MV_CODAR _NOM ! MV_NOMAR_PRE ! MV_PREAR_EXIS !MV_EXISGrabar Directa FARTISi error en grabación entoncesER_MEN ! Registro ya existenteProcedimiento ERRORFinsiFinProcedimiento Baja :INICIOAR_COD ! MV_CODBorrar Directa RARTISi error en borrado entoncesER_MEN ! Registro no existenteProcedimiento ERRORFinsiFinProcedimiento Error :INICIOER_COD ! MV_CODER_NOM ! MV_NOMER_PRE ! MV_PRE 23
  24. 24. ER_EXIS ! MV_EXISER_TIPO ! MV_TIPOGrabar RERRORFinProcedimiento Modificaciones :INICIOAR_COD ! MV_CODLeer Directa FARTISi error de lectura entoncesER_MEN ! No existe registroProcedimiento ERRORSinoSi MV_NOM <> Espacios entoncesAR_NOM ! MV_NOMFinsiSi MV_PRE <> 0 entoncesAR_PRE ! MV_PREFinsiSi MV_EXIS <> 0 entoncesAR_EXIS ! MV_EXISFinsiRegrabar Directa RARTIFinsiFin• Actualización desde el teclado ( Proceso On Line ) :Las altas ,bajas y modificaciones se realizan según van produciendose. Estos procesos se denominanProcesos On Line . El ordenador hace las preguntas y el operador o usuario envía respuestas a traves de 24
  25. 25. teclado.Ejemplo :PRINCIPALMENÚ1−ALTAS2−BAJAS3−MODIFICACIONES4−SALIRELIGE :SI 1 ! Procedimiento ALTASSI 2 ! Procedimiento BAJASSI 3 ! Procedimiento MODIFICACIONESSI 4 ! FINAlgoritmo Actualización IndexadaINICIOFichero IndexadoOPCIÓN ( Para los procedimientos )ClaveAbrir Fichero de entrada y salidaOPCIÓN ! SMientras OPCIÓN <> S hacerEscribe MENÚ DE ACTUALIZACIÓNEscribeEscribe 1− ALTASEscribe 2− BAJASEscribe 3− MODIFICACIONES 25
  26. 26. Escribe 4− FINEscribe ELIGE OPCIÓNAcepta OPCIÓNSi OPCIÓN = 1 entoncesProcedimiento ALTASinoSi OPCIÓN = 2 entoncesProcedimiento BAJASinoSi OPCIÓN = 3 entoncesProcedimiento MODIFICACIONESFinsiFinsiFinsiFinmientrasFinProcedimiento AltasINICIOEscribe Dime la claveAcepta CLAVE ( La clave evita tener que leer todos los campos )Leer Directa FICHEROSi existe ( Si existe registro con esa clave ) entoncesEscribe Registro ya existenteSinoEscribe Dime datosAcepta datos 26
  27. 27. REGISTRO ! datosGrabar Directa registroFinsiFinProcedimiento Bajas :INICIOEscribe Dime la claveAcepta CLAVELeer Directa FICHEROSi no existe entoncesEscribe No existeSinoCOMPROBACIÓN : Escribir todos los datosSinodato ! REGISTROEscribe datosEscribe Borrar SI o NOAcepta SSi S = si entoncesBorrar Directa REGISTROFinsiFinsiFinProcedimiento Modificaciones :INICIOAcepta CLAVE 27
  28. 28. Leer Directa FICHEROSi no existe entoncesEscribe No existe, errorSinoEscribe Dime datosAcepta datosREGISTRO ! datosRegrabar Directa registroFinsiFinFICHEROS RELATIVOS :Tanto la actualizaciones Batch como On Line en un fichero directo se realizan igual que con los ficherossecuenciales indexados. La única diferencia radica en la forma en que el sistema localiza un registro.Existen dos variantes de organización relativa, directa o indirecta.Organización Directa :Cuando las claves son numéricas los registros se ubican en direcciones de memoria de tipo numérico entero.Esto facilita establecer una correspondencia directa entre la clave y la dirección de memoria. Por ello lasecuencia lógica de almacenamiento de los registros coinciden con la secuencia física de almacenamiento delos registros sobre el soporte utilizado.El valor de la clave está en relación de la capacidad del soporte de almacenamiento. No se puede almacenarun registro cuya clave esté por encima de los límites del fichero. El hecho de existir mas de un registro con lamisma clave será un error, a lo que denominaremos sinónimo o colisión.Organización Aleatoria o IndirectaEn este caso la clave debe sufrir un proceso de conversión a un valor numérico entero. Por ello la secuencialógica no coincide con la física.Nunca podremos almacenar registros cuyas direcciones de almacenamiento están por encima de los límitesfísicos del fichero.En este tipo de organización cada dirección puede tener mas de un registro asociado. Este hecho recibe elnombre de sinónimo o colisión.TEMA 66.FICHEROS EN EL SISTEMA 28
  29. 29. OPERATIVO6.1 Sistema Ms−Dos6.2 Sistema Unix6.3 Sistema OS/26.4 Sistema MVSLos registros son la unidad lógica de acceso a los archivos, mientras que los bloques son la unidad de entraday salida para el almacenamiento secundario. Para realizar entradas y salidas los registros deben organizarse enbloques.Los bloques pueden ser de longitud fija o variable. En la mayoría de los sistemas los bloques son de longitudfija, esto simplifica la entrada y salida, la asignación de memoria intermedia ( Buffers ) en memoria principaly la organización de los bloques en memoria secundaria.Cuanto mayor sea el bloque mas registros se pasarán en una operación de entrada y salida.Si el archivo se procesa secuencialmente es una ventaja porque usando bloques mayores se reduce el númerode operaciones de entrada y salida. Por otro lado si se accede aleatoriamente a los registros y no existecercanía en las referencias el uso de bloques mayores redunda en una transferencia innecesaria de registros nousados. Pero si combinamos las operaciones secuenciales con la cercanía de referencias el tiempo detransferencia se reduce usando bloques mayores. La única barrera es que los bloques grandes necesitan buffersde entrada y salida mayores, dificultando su gestión.Existen tres métodos de agrupación en bloques :Bloques fijos :Utilizan registros de longitud fija, en cada bloque guardaremos un número entero de registros. Al final de cadabloque puede haber espacio sin usar.Bloques de longitud variable por tramos :Utilizan registros de longitud variable agrupados en bloques sin espacio por usar. Algunos registros usarándos bloques, indicando con un puntero el bloque siguiente.Bloques de longitud variable sin tramos :Utilizan registros de longitud variable, pero no se dividen en tramos. Existirá un espacio desperdiciado en losbloques debido a ello no se podrá aprovechar el resto del bloque si el siguiente registro es mayor que elespacio sin usar.Los bloques de tamaño fijo es lo más común para archivos secuenciales con registros de longitud variable.El sistema operativo o el sistema de gestión de archivos es responsable de la asignación de los bloques aarchivos. En primer lugar tenemos que asignar el espacio de memoria secundaria a los archivos y en segundolugar guardar información sobre el espacio disponible para asignar. Estos dos temas están relacionados.En la asignación de archivos surgen cuestiones : 29
  30. 30. • Al crear un archivo ¿ Asignaremos el máximo espacio que necesite ?Una asignación previa requeriría que el tamaño de un archivo se declarase al crearlo. Sin embargo paramuchas aplicaciones es muy difícil estimar el tamaño posible del archivo. En estos casos la inclinación deusuarios y programadores sería sobrestimar el tamaño del archivo. Pero esto es un derroche desde el punto devista de la asignación de memoria secundaria. Por tanto las ventajas usando asignación dinámica se hacennotar al asignar espacio a los archivos en secciones a medida que se necesiten.• El espacio se asigna en forma de unidades contiguas llamadas secciones . ¿ Qué tamaño de sección usaremos para asignar archivos ?En un extremo podemos asignar una sección grande para guardar el archivo entero o asignar espacio debloque en bloque. Tendremos que considerar cuatro aspectos importantes :• El espacio contiguo aumentará el rendimiento sobremanera al ejecutar un sistema orientado a transacciones.• Un gran número de secciones pequeñas aumentan el tamaño de las tablas para gestionar la informaciónc) Disponer de secciones de tamaño fijo ( bloques ) simplifica la reasignación del espacio.• Las secciones de tamaño variable o pequeñas de tamaño fijo minimiza la perdida de espacio.Como resultado aparecen dos opciones principales :Secciones contiguas variables y grandes :El resultado es un rendimiento mejor. El tamaño variable evita la perdida y las tablas serán pequeñas. Pero elespacio será difícil de reutilizar.Bloques :Las secciones fijas y pequeñas dan mayor flexibilidad. Podemos necesitar tablas grandes. La contigüedad seabandona y los bloques se asignarán a medida que se necesiten.• ¿ Qué tabla usaremos para guardar constancia de las secciones asignadas a un archivo ?Dicha tabla se conoce como Tabla de asignación de archivos denominada ( FAT ).Cualquier opción es compatible con la asignación previa o la dinámica. En el primer caso se asignapreviamente a los archivos un grupo contiguo de bloques, lo cual limita la necesidad de una tabla deasignación de archivos, Solo necesita un puntero al primer bloque y el número de bloques asignados. En elsegundo caso todas las secciones necesarias son asignadas de una vez. Esto significa que la tabla deasignación del archivo permanecerá con tamaño fijo.Si las secciones son de tamaño variable tenemos que pensar en la fragmentación del espacio libre. Existenunas estrategias alternativas.Primer hueco ( first fit ) :Tomaremos el primer grupo de bloques contiguo sin usar, de tamaño suficienteMejor hueco ( best fit ) : 30
  31. 31. Elegiremos el grupo más pequeño sin usar que tenga tamaño suficienteHueco más cercano ( nearest fit ) :Tomaremos el grupo sin usar de tamaño suficiente más cercano al asignado previamente al archivo, paraaumentar así la cercanía.MÉTODOS DE ASIGNACIÓN DE ARCHIVOS :Existen tres métodos :Asignación contigua :Al crear el archivo se le asigna un único conjunto contiguo de bloques. Esta es una estrategia de asignaciónprevia que emplea secciones de tamaño variable. La tabla de asignación de archivos necesita una entrada porcada archivo que nos muestre el bloque de comienzo y l longitud del archivo. Este tipo de asignación es lamás conveniente para un archivo secuencial ya que se pueden traer múltiples bloques de una sola vez, paramejorar el rendimiento en los tratamientos secuenciales.Surgen también problemas, como fragmentación externa. Deberemos declarar el tamaño del archivo en elmomento de la creación.Asignación encadenada :La asignación se hace con bloques individuales. Cada bloque contiene un puntero al bloque siguiente de lacadena. La tabla de asignación de archivos de nuevo una sola entrada por cada archivo que muestre el bloquede comienzo y la longitud del archivo. Aunque la asignación previa puede ser posible, lo más común esutilizar bloques a medida que se necesitan. La elección del bloque es simple, ya que cualquier bloque puedeañadirse a la cadena. No nos preocupará la fragmentación externa porque solo se necesita un bloque cada vez.Este tipo de organización física se ajusta mejor a los archivos secuenciales. Para poder seleccionar un bloquedebemos recorrer la cadena hasta el bloque deseado. Una consecuencia, es que no tendrá cabida el principiode cercanía. Por ello necesitaremos accesos a parte diferentes el disco cuando queramos traer varios bloquesde un archivo al mismo tiempo.Asignación indexada :La tabla de asignación de archivos contiene un índice separado de un nivel para cada archivo, este índiceposee una entrada para cada sección asignada al archivo. Los índices no están almacenados físicamente comoparte de la tabla de asignación de archivos. El índice del archivo se guarda en un bloque aparte y la entrada delarchivo en la tabla de asignación apuntará a dicho bloque.La asignación por bloques elimina la fragmentación externa, y la asignación por secciones de tamaño variablemejora la cercanía. Los archivos pueden concentrarse en zonas cercanas de cuando en cuando. Laconcentración reduce el tamaño del índice para secciones de tamaño variable, pero no en el caso de asignaciónpor bloques.La asignación indexada soporta el acceso secuencial y el acceso directo a los archivos, y por ello es la formamás popular de asignación de archivos.• SISTEMA MS−DOS :La tarea más frecuente en MS−DOS es la gestión de ficheros. Los ficheros mas importantes son : 31
  32. 32. Autoexec.bat :Es un archivo de proceso por lotes. Contiene los archivos ejecutables de aplicación de los programas o rutinasque queremos ejecutar al cargar el sistema, tiene que estar situado en el directorio raíz.Config.sys :Es un fichero del sistema. Controla el sistema incluyendo dispositivos, opciones y tareas de búsqueda.Command.com :Este fichero contiene los comandos internos de ejecución que podremos utilizar sin necesidad de cargarlos.Las operaciones mas frecuentes con ficheros son las siguientes :CREAR FICHEROS DE TEXTO:En general en un fichero de texto podemos almacenar cualquier tipo de información compuesta de caracteres.Copy con :Este comando copia el texto introducido por teclado en el disco.Formato : copy con c : nombre_ficheroA continuación insertaremos es texto.Para terminar pulsaremos F6 o control−ZCOPIAR FICHEROS.Copy :Formato : copy origen : fichero1 destino : fichero2Utilización de comodines :Es posible copiar con una sola operación un grupo de ficheros que tengan en el nombre una parte común.El caracter * representa cualquier conjunto de letras del nombre.Ejemplo :copy *.dat a :! Copia todos los ficheros de extensión .dat en a :El carácter ? sustituye a un solo caracterEjemplo :copy fichero?.dat a :! Copia todos los ficheros con nombre fichero mas un último caracter con extensión .dat en a : 32
  33. 33. Duplicación de un fichero :Se puede copiar un fichero en el mismo disco con otro nombre.Ejemplo :copy fichero1.dat fichero2.datEl modificador /V detrás del comando copy verifica que la copia se efectue correctamente.MOVER UN FICHERO.Move :Consiste en cambiar de posición u fichero. Por ello primero copia el fichero en el disco destino y luego loborra en el origen.Formato : move origen : fichero.ext destino :MOVER UN GRUPO DE FICHEROS :Se moverán utilizando los comodines * y ? como anteriormente hemos descrito.Ejemplo :move a : *.dat c :COMPARAR FICHEROS.fc o ( comp ) :Podemos comparar ficheros para ver si son idénticos.Formato : FC unidad : fichero.ext unidad : fichero2.extTambién se pueden utilizar comodines para comparar grupos de ficheros.Ejemplo :FC c : fichero?.ext c : fichero2?.extBORRAR FICHEROS.Del :Podemos borrar ficheros innecesarios utilizando este comando.Borrar un fichero :Formato : Del unidad : fichero.extUtilizando Erase marcamos el archivo como eliminado permitiendo que otro fichero pueda grabarse en el 33
  34. 34. espacio que antes ocupaba aquel.Borrar un grupo de ficheros :Utilizaremos comodines.Ejemplo :Del a : *.dat ! Borrará todos los archivos con extensión .dat de la unidad marcada.Borrar ficheros con confirmación :Utilizando el parámetro /P se solicitará confirmación antes de borrar el fichero.RENOMBRAR FICHEROS.Ren (Rename) :Permite asignar un nuevo nombre a un fichero.Formato : Ren fichero1.ext fichero2.extRECUPERACIÓN DE FICHEROS BORRADOS.Undelete :Mientras no se escriba sobre el fichero borrado podemos recuperar los archivos borrados.Formato : Undelete unidad : fichero.extSi no especificamos ningún archivo, undelete recupera todos los archivos borrados.Podemos utilizar comodines :Ejemplo :undelete *.dat ! Recupera todos los archivos con extensión .datCon /ALL se recuperan todos los archivos sin pedir confirmación.Con /List se mostrará una lista de ficheros borrados, pero no se recuperará ninguno.• SISTEMA UNIX :El núcleo ( Kernel ) de UNIX contempla a todos los archivos como flujos de bytes. Cualquier estructuralógica interna será específica de la aplicación. Unix basándose en la estructura física de los archivos distinguetres tipos muy importantes de archivos de la siguiente manera :Ordinarios :Archivos que contienen información introducida por un usuario, programa de aplicación o programa deutilidad del sistema. Los archivos ordinarios se corresponden con los que la mayoría de los sistemas llaman 34
  35. 35. simplemente archivos.Directorio :Contiene una lista de nombres de archivo y punteros a nodos−i ( nodos de información ) asociados. Losarchivos de directorio son en realidad archivos ordinarios que tienen unos privilegios especiales de protección,ya que solo el sistema de archivos puede escribir en ellos, mientras que los programas de usuarios disponen deacceso para lectura.Especiales :Se usan para poder acceder a dispositivos periféricos, terminales, impresoras. Cada dispositivo de entrada ysalida está asociado a un archivo especial.Nodos−i :Todos los archivos en Unix se administran por el sistema operativo por medio de nodos−i. Un nodo−i ( nodoíndice ), es una estructura de control que contiene la información clave de un archivo necesaria para el sistemaoperativo. Se pueden asociar varios nombres de archivo a un mismo nodo−i , pero un nodo−i activo solopuede asociar a un único archivo, y ese es controlado por un solo nodo−i.los atributos, permisos y cualquier otra información de control se almacena en el nodo−i.En un sistema multiusuario existe la necesidad de permitir a los usuarios compartir archivos. Debido a estosurgen dos cuestiones : Los derechos de acceso y la gestión de los accesos simultáneos.DERECHOS DE ACCESO :Se debe ofrecer una herramienta flexible para permitir la compartición de archivos entre usuarios y unconjunto de opciones para controlar la manera de acceso a un archivo en particular, la lista muestra losderechos de acceso que pueden darse a un usuario particular para un archivo específico.Ninguno :El usuario no conoce el archivo y no puede acceder a él. No se permite al usuario leer el directorio que incluyeel archivo.Conocimiento :El usuario sabe que el archivo existe y quien lo posee, puede solicitar derechos de acceso.Ejecución :El usuario puede cargar y ejecutar un programa pero no copiarlo.Lectura :El usuario puede leer, copiar y ejecutar el archivo.Adición :El usuario puede añadir datos al archivo pero no puede ni modificar ni borrarlo. 35
  36. 36. Actualización :El usuario puede modificar, borrar y añadir datos al archivo.Cambio de protección :El usuario puede cambiar los derechos de acceso a otros usuariosBorrado :El usuario puede borrar el archivo del sistema.Estos derechos constituyen una jerarquía, así si un usuario en particular adquiere el derecho de actualización,también adquiere el conocimiento, ejecución, lectura y adición del mismo.ACCESOS SIMULTANEOS :Cuando se otorga acceso para añadir o actualizar un archivo a mas de un usuario, el sistema operativo o elsistema de gestión de archivos debe cumplir una disciplina. Un método consiste en permitir a los usuariosbloquear el archivo entero cuando lo vaya a actualizar. Otro control es bloquear los registros individualesdurante la actualización. Al diseñar la posibilidad de accesos compartidos, deben abordarse aspectos deexclusión mutua e interbloqueo.ASIGNACIÓN DE ARCHIVOS :Los archivos se asignan en bloques de forma dinámica, a medida que se necesiten. No se emplea asignaciónprevia. Por tanto los bloques no tienen porqué estar contiguos necesariamente.Se utiliza un método de indexación para seguir la pista de cada archivo, estando parte del índice almacenadoen el índice de archivo.El nodo−i incluye 39 bytes de información de direccionamiento, organizada como 13 direcciones o punterosde 3 bytes. Las 10 primeras apuntan a los 10 primeros bloques de datos del archivo. Si el archivo es mayorque 10 bloques, usaremos mas niveles de indexación de la forma siguiente :La dirección undécima apunta a un bloque del disco que contiene la siguiente parte del índice. Este bloque seconoce como bloque de indexación simple , contiene los punteros a los siguientes bloques de archivo.Si el archivo contiene mas bloques, la dirección duodécima del nodo−i apunta a un bloque de indexacióndoble. Este contiene una lista de direcciones de bloques de indexación simple adicionales, y cada uno de estoscontiene a su vez punteros a los bloques de archivo.Si el archivo contiene aún mas bloques. La dirección decimotercera del nodo−i apunta a un bloque deindexación triple. Ese bloque apunta a bloques de indexación doble adicionales.El número total de bloques de datos de un archivo depende de la capacidad de los bloques de tamaño fijo delsistema.En Unix versión V, la longitud de un bloque es de 1Kb que a su vez albergara un total de 256 direcciones debloques. Por ello el tamaño máximo de un archivo usando este esquema se aproximará a los 16Gb.Las ventajas son las siguientes : 36
  37. 37. • Los nodos−i son de tamaño fijo y pequeños, por lo que se pueden guardar en memoria principal durante períodos largos.• Se puede acceder a archivos pequeños con poca indexación, reduciendo el procesamiento y el tiempo de acceso al disco.• El tamaño máximo teórico de un archivo es suficientemente grande como para satisfacer a casi todas las aplicaciones.• SISTEMA OS/2 WARP :Las ordenes en OS/2 se configuran de la misma manera que en MS−DOS. Los archivos tienen atributos,nombre y extensiones. OS/2 los trata como objetos en el escritorio.OS/2 tiene dos sistemas de archivo : el sistema de archivos de tabla de archivos ( FAT ) y el sistema dearchivos de alto rendimiento ( HPFS ).El sistema HPFS sitúa el directorio raíz en el centro de búsqueda de la partición, esto mejora el tiempo deacceso.El sistema FAT situa el directorio raíz al principio o final de la partición. La tabla guarda la posición de losdatos en el disco fijo. Al solicitarse un archivo, el sistema operativo lee la tabla y posiciona el archivo enmemoria.HPFS asigna espacio contiguo a los archivos, esto hace que labúsqueda de archivos sea más sencilla y rápida.Con FAT los nombres tienen un máximo de 8 caracteres y una extensión de 3 caracteres.Con HPFS los nombres tienen un máximo de 254 caracteres de tipo largo.El sistema FAT no puede reconocer nombres de archivos creados por HPFS, pero si puede ocurrir alcontrario.Los ficheros pueden tener atributos extendidos. Como por ejemplo el nombre de usuario del creador delarchivo. Los atributos extendidos se guardan en FAT n un archivo oculto con extensión . SF .Para HPFS, a aquellos archivos con espacios en el nombre hay que ponerle comillas antes y después parapoder leerlos.En un sistema FAT no importa si se utilizan mayúsculas o minúsculas en los nombres de archivo. El sistemaoperativo convierte a mayúsculas automáticamente. HPFS permite nombres de archivo tanto den mayúsculascomo en minúsculas, siempre que no estén situados en el mismo directorio.Para copiar archivos utilizaremos la orden Xcopy y sus parámetros :/H : Copia archivos ocultos./T : Copia archivos de sistema./R : Copia archivos de solo−lectura./F : Copia atributos extendidos. 37
  38. 38. ARCHIVOS ESENCIALES EN OS/2 :Config.sys :Este fichero se encarga de controlar el sistema. Principalmente su tarea es gestionar los dispositivos, opcionesy las tareas de búsqueda.Startup.cmd :Este archivo es similar al autoexec.bat. Es un archivo de procesos por lotes. Contiene los archivos ejecutablesde aplicación de los programas que queramos ejecutar en el momento de cargar el sistema, el fichero debe deestar posicionado en el directorio raíz.Swapper.dat :Es un archivo de intercambio. OS/2 crea memoria virtual, de manera que todas las aplicaciones softwarepiensan que tienen toda la memoria necesaria. OS/2 copia datos de la RAM en un archivo de intercambiollamado swapper.dat. Para utilizar este archivo tiene que estar activado. La activación se hace en el ficheroconfig.sys. Swapper.dat puede crecer de tamaño de forma dinámica para satisfacer las necesidades de losprocesos hasta un límite marcado en el fichero config.sys.VISUALIZAR INFORMACIÓN DE ARCHIVO :Deberemos pulsar con el botón derecho del ratón y solicitar vista de detalles. Esto cambia el formato deiconos en la carpeta por una información detallada de cada archivo. Esta operación es similar a la orden Dirde la línea de comandos.Type :Visualiza por pantalla el contenido de uno o varios ficheros.Formato : Type fichero1 fichero2..........etc.Esta orden acepta comodines.Se puede redireccionar la salida del contenido de uno o más archivos a otro fichero destino.Ejemplo :Type fichero1 fichero2 > fichero_nuevo.Copy :Su utilización es igual a la vista en MS−DOS anteriormente.Copia archivos entre directorios.Copia archivos a la impresora.Copia un archivo con otro nombre ( Duplicación de archivos )Pero además combina archivos utilizando un signo mas + entre los nombres de archivo fuentes. 38
  39. 39. Puede cambiar atributos de hora y fecha introduciendo un signo mas + seguido de dos comas ,, .Ejemplo :Copy MI_ARCH +,, ! Cambia la fecha y la hora del archivo.Se pueden utilizar comodines :Ejemplo :Copy *.* +,, ! Cambia la fecha y la hora de todos los archivos.El parámetro /F : Dice al sistema operativo que no copie un archivo en un directorio en el cual no se fueran amantener los atributos extendidos del archivo.OS/2 permite mover ficheros mediante el comando move ( Igual que en MS−DOS ). Pero solo se podrá hacerdesde directorios de una misma unidad.Los archivos por lotes se pueden ejecutar tanto en una sesión de OS/2 o de MS−DOS. Si estamos en unasesión de OS/2 se inicia automáticamente una sesión de DOS para ejecutar el archivo por lotes, esta sesión secierra al terminar de ejecutarse el fichero.ARCHIVOS POR LOTES Y DE ÓRDENES :Un archivo de ordenes ( .CMD ) se ejecuta en una sesión de OS/2, un archivo por lotes ( .BAT ) se ejecuta enuna sesión de DOS. Existen archivos .BAT que pueden ejecutarse en OS/2, solo tenemos que cambiar laextensión a .CMD.ARCHIVOS DE ÓRDENES REXX Y CMD :Ambos sólo se pueden ejecutar en sesiones de OS/2. Sin embargo, REXX es más potente y flexible, ya querealiza mas con menos esfuerzo. Al introducir un archivo de extensión .CMD el sistema operativo mira si enla primera línea del archivo aparece ( /* ), si es así el sistema operativo sabe que es un archivo por lotesREXX, ejecuta las instrucciones utilizando el intérprete REXX que es de donde viene la potencia adicional.LISTADOS DE ARCHIVOS :Para listar archivos y directorios utilizaremos el comando Dir y sus parámetros propios.Ejemplos :/ON : Clasifica por nombre alfabéticamente./O−N : Clasifica por nombre en orden alfabético inverso./OE : Clasifica por orden alfabético de la extensión./O−E : Clasifica por extensión./OD : Clasifica por fecha, con la fecha más temprana primero./O−D :Clasifica por fecha, con la fecha más tardía primero. 39
  40. 40. /OS : Clasifica por tamaño, con el más pequeño primero./O−S : Clasifica por tamaño, con el más grande primero./OG : Clasifica directorios, después archivos, en orden alfabético./O−G : Clasifica archivos, después directorios, en orden alfabético./A : Indica atributos.DIR /A : Muestra todos los archivos del directorio incluyendo los ocultos y de sistema.Ejemplo :Dir /AH : Muestra todos los archivos ocultos./F : Visualiza los nombres de archivos completos, unidad, directorio, y nombre de archivo.También podemos redireccionar una salida a un fichero :Ejemplo : Dir c :OS/2 > Listadir.• SISTEMA MVS/XA :Es una nueva versión del MVS. ( XA ) quiere decir Arquitectura extendida.Se diferencia del anterior en que el MVS tenía una limitación de 16Mb para direccionar, mientras que elMVS/XA dispone de 31 bits de direcciones lógicas y físicas. Por ello en el MVS/XA podemos direccionar2Gb.Los programas pueden seguir trabajando con direccionamientos de 24 o 32 bits respectivamente. Con todoello aparece la memoria expandida situada en la caja de la CPU, es más lenta que la Memoria Principal peromás rápida que los discos. Su tamaño varía entre 4Kb y 2GbExisten varias organizaciones de archivos :Secuencial :El acceso es de acuerdo a un orden físico, un registro se almacena detrás de otro.Secuencial indexado :Los registros se ordenan mediante una clave, además mantiene índices de recuperación.Directo al azar :Los registros se organizan de cualquier forma y existe una clave para cada registro.De partición :Un archivo tiene múltiples subarchivos con un directorio, cada subarchivo pertenece a la partición. 40
  41. 41. ACCESOS A LOS REGISTROS :Existen dos técnicas :Técnicas de acceso por colas :Se realiza un acceso secuencial y los registros se agrupan en anticipación de futuras peticiones.Técnicas de acceso básico :Podemos acceder a cualquier tipo registro cuando queramos.Estas técnicas dan lugar a nuevos métodos ( BDAM, BSAM, BPAM,....ETC. ).El método más interesante es el VSAM ( Método de acceso de almacenamiento virtual ), fue diseñado paraproporcionar soporte al almacenamiento virtual.Puede procesar tres tipos de datos :Secuenciados por clave :Cada registro tiene una clave y se cargan en secuencia de dicha clave.Secuenciados por entrada :Se cargan los registros de forma secuencial y el sistema devuelve una clave por cada registro, para realizar unacceso directo.De registro relativo :Se cargan los registros de acuerdo con un número de registro relativo.Para localizar ficheros, se les dota de un nombre almacenado en un catálogo, en el cual se indica el volumendonde se encuentra el fichero. Una vez localizado se accede a un directorio denominado Tabla de contenidosdel volumen ( VTOC ) para localizar el fichero.Existen dos tipos o niveles de catálogos donde guardar los ficheros :A estos catálogos se accede mediante una clave obtenida del nombre del fichero. El primer nivel se denominamaestro y el segundo está compuesto por catálogos de usuarios.El catálogo maestro tiene dos tipos de entrada, por nombre y por alias.Si entramos por nombre, se nos indica el volumen donde encontrarlo.Si entramos por alias, en el catálogo maestro existe una referencia al catálogo de usuario donde ir a buscar elficheroLa VTOC se crea al iniciar el volumen ( disco ). Contiene una entrada para fichero. La asignación contigua esla utilizada para tratar estos ficheros.Para evitar la fragmentación podemos utilizar el programa defrag compactando los huecos libres y una 41
  42. 42. utilidad de usuario para definir el número de pistas iniciales y secundarias.El espacio de grabación se selecciona entre los espacios disponibles utilizando el mejor ajuste.TEMA 77. CLASIFICACIÓN DE FICHEROS7.1 Ficheros permanentes7.2 Ficheros Temporales o de Transacción7.1 FICHEROS PERMANENTESSon aquellos en los que sus registros permanecen inalterables (o casi inalterables) a través de los distintosprocesos en los que intervienen. Así pues, un fichero que se procese realizando una sola operación de consultase puede considerar como fichero permanente.Dentro de estos ficheros, podemos hacer una triple subdivisión, atendiendo a la frecuencia de actualización.FICHEROS CONSTANTESLos datos de este tipo de ficheros no sufren habitualmente casi ninguna modificación, aunque a veces ocurraque forzosamente tengan que ser actualizados. En general, los registros que componen estos ficheros constande una serie de campos. Unos perennes y otros susceptibles de ser modificados. Toda la informacióncontenida en estos ficheros, es información de consulta y nunca contienen resultados. Un ejemplo claro dearchivo maestro es un fichero con los datos de los empleados de una empresa, figurando en el fichero camposcomo nombre, DNI, número seguridad social... etc.Hay algunos en los que incluso todo su contenido será fijo. Este tipo de ficheros son aquellos que contenganinformación inalterable, como tablas matemáticas, tablas periódicas... etc.FICHEROS DE SITUACIÓNSon los que tienen registros que se actualizan con más frecuencia. Contienen la situación actual de lainformación susceptible de sufrir frecuentes modificaciones o alteraciones.Las modificaciones de la información contenida en los ficheros se hace en tiempo real, es decir, en el instanteen que ocurren los cambios. La puesta al día de estos ficheros se realiza frecuentemente.Se les llaman a veces ficheros en línea debido a que el proceso de actualización tiene que hacerse de formainstantánea. Estos ficheros reciben datos que le han sido enviados al ordenador a través de líneas detelecomunicación.Un ejemplo de este tipo de ficheros es aquél en el que estén contenidas todas las cuentas corrientes de losclientes de una determinada entidad bancaria, sufriendo continuas modificaciones y siendo preciso que éstasse computen al instante. Otro ejemplo es un fichero de reservas de una empresa de ferrocarril, existencias deuna almacén... etc.FICHEROS HISTÓRICOSSon aquellos cuyos registros contienen información referente a resultados de operaciones. Constituyen el 42
  43. 43. resultado el tratamiento de la información para el ordenador.En general se utilizan para confeccionar estadísticas y preparar informes. La información que utilizan puedentomarla, bien de ficheros constantes o de ficheros de situación.El contenido de estos ficheros puede ser de información ya resumida y directamente utilizable, o informacióndetallada de la cual se tiene que confeccionar el resultado final.Un ejemplo de este tipo de ficheros puede ser un fichero que contenga todas las incidencias ocurridas en undeterminado período de tiempo en una empresa de ferrocarril, desvíos de trenes, salidas aplazadas, llegadaspuntuales... etc. con el único fin de elaborar estadísticas.7.2 FICHEROS TEMPORALES O DE MOVIMIENTOSon los que contienen los registros resultantes del tratamiento de las transacciones o modificaciones. Van aservir en la mayoría de los casos para actualizar o consultar ficheros permanentes y para producir junto conlos maestros la información final. La vida de estos ficheros es corta ya que contendrán información el tiempoque dure el proceso de actualización o consulta; cuando el proceso termina, no tiene ningún sentidomantenerlos activos. La desaparición puede ocurrir en el mismo momento de terminar la actualización delfichero maestro, o cuando haya otro nuevo fichero de movimientos que intervenga en el proceso.Es el caso de un fichero de movimientos que modifique una determinada información de un fichero maestro.Por ejemplo, supongamos un fichero maestro con los datos de los empleados en una empresa. El ficheromovimientos puede ser el que contenga todas las variaciones sufridas por esos empleados, tales como cambiode categoría, número de hijos, retención... etc.TEMA88. FICHEROS SECUENCIALES8.1 Organización8.2 Tipos de acceso8.3 Operaciones8.4 Ejemplos8.1 ORGANIZACIÓNLa organización de un fichero guarda una importante relación con el modo de acceso.La organización es la forma particular de disponer los registros del mismo en el soporte de almacenamientodurante su creación.Hay tres formas básicas de organizar un fichero:− Organización SecuencialSe caracteriza, fundamentalmente, por almacenar los registros físicamente contiguos, en el soporteauxiliar. Es decir, uno a continuación de otro y en la misma secuencia en que se introducen. 43
  44. 44. − Organización Secuencial Indexada− Organización Directa o RelativaEstos dos últimos tipos de organización se estudiarán aparte.8.2 TIPOS DE ACCESOModo de acceso es la manera de acceder a los registros de un fichero para extraer (leer) informaciónque pueda ser procesada posteriormente, o para grabar información nueva en el fichero.Hay, fundamentalmente, dos formas de acceso:− Acceso SecuencialSe accede a los registros según su secuencia física, es decir, uno a continuación de otro, en el orden enque están escritos.Dicho de otro modo, para acceder al registro S hay que pasar previamente por los S−1 registrosanteriores.− Acceso DirectoPermite el acceso a un registro determinado sin tener que pasar previamente por los registrosprecedentes.La utilización de un método u otro, depende de cómo se organizó el fichero al crearse, del soportedonde está almacenado y de las necesidades específicas de cada programa.En los ficheros con organización secuencial, el único modo de acceso posible es el secuencial.Un ejemplo claro de la afirmación anterior sería asociar un fichero secuencial a una cassette de música.Cuando se graba en una cinta, las canciones se disponen una a continuación de otra. Si nuestra pletinano dispusiera de rebobinad, para poder escuchar una determinada canción sería necesario haberescuchado previamente las anteriores.8.3 OPERACIONESLas operaciones básicas se van a dividir en dos grupos. El primero incluirá aquellas que estánrelacionadas con los propios ficheros, y el segundo las relativas a sus registros consideradosindividualmente.Las operaciones fundamentales que se pueden realizar sobre archivos son las siguientes:CREACIÓN:Para poder utilizar un archivo, éste debe haber sido creado previamente.Crear un fichero significa introducir sus registros en el soporte de almacenamiento auxiliar elegido.Al crear un archivo, se le asocia un nombre para poder referenciarlo posteriormente. 44
  45. 45. Cuando finaliza la creación de un fichero, el sistema graba en el mismo una marca final de fichero,cuya única utilidad es la de detectar, cuando se accede a dicho fichero de forma secuencial, si este haterminado.APERTURA:Abrir un fichero quiere decir dejarlo dispuesto para ser utilizado.Todos los archivos empleados en un programa deben ser abiertos, previamente a su uso.CIERRE:Cerrar un archivo significa dejarlo inaccesible para su uso.Puesto que todos los archivos utilizados en un programa deben ser abiertos, en consecuencia, alfinalizar el proceso, deben ser cerrados.Sobre un archivo se pueden realizar otras operaciones como consulta, actualización clasificación,borrado.8.4 TRATAMIENTOSLas dos operaciones esenciales sobre registros son las siguientes:LECTURA:Una operación de lectura implica el traspaso de información desde el fichero a la memoria central delordenador. La información que se traspasa es la contenida en un registro.Como siempre, la única forma de guardar información en la memoria central es a través de variables.En una operación de lectura los nombres de las variables en que se reciben los datos del registro leídoson los que se han asignado a los campos del mismo. En este movimiento de información, los datostransferidos no desaparecen de la memoria auxiliar sino que simplemente se copian en las variablescorrespondientes de la memoria central.EJEMPLO:Si hemos abierto previamente el fichero Agenda, que tiene la siguiente descripción:NOM DIR TELEl nombre, la dirección y el teléfono del primer registro del fichero se guardarán en las variables Nom,Dir, Tel, respectivamente, de la memoria central del ordenador. A partir de este momento, se podráoperar con estas variables de la misma forma que hemos hecho hasta ahora: visualizarlas por pantalla,imprimirlas, etc.Si efectúa una segunda lectura, el contenido del segundo registro pasará a las mismas variables de lamemoria, sustituyendo sus anteriores valores. Por tanto, en cada instante del proceso sólo se dispone dela información del registro recién leído.Si se sigue haciendo lecturas sucesivas sobre el fichero, llegará un momento en que éste se acabe; esdecir ya no queden más registros por leer. Esta situación la detecta el sistema cuando, después de una 45
  46. 46. operación de lectura, lo que se ha leído no es un registro de datos, sino lo que se conoce con el nombrede marca de fin de fichero. Por tanto, siempre que se ejecute una operación de lectura sobre un ficherosecuencial, a continuación hay que preguntar si lo que se ha leído es la marca de fin de fichero o, por elcontrario, un registro de datos para ejecutar las acciones pertinentes.El termino de fichero de entrada se utiliza para caracterizar a aquellos ficheros que ya existen y sobrelos cuales se van a realizar operaciones de lectura; es decir, el flujo de información va desde el fichero ala memoria central (la información entra en la memoria central). Esta cualidad del fichero debeindicarse en la operación de apertura del mismo.ESCRITURA O GRABACIÓN:Una operación de escritura implica el traspaso de información desde la memoria central del ordenadoral fichero. La información que se traspasa es la contenida en las variables cuyos nombres coinciden conlos campos definidos para un fichero.EJEMPLO:Tenemos un registro con la siguiente descripción:NOM DIR TELF.AgendaY se ha introducido desde el teclado un nombre, una dirección y un teléfono en las variables: Nom, Dir,Tel, respectivamente. El término fichero de salida se utiliza para referenciar a aquellos ficheros sobrelos que se está escribiendo y, por lo tanto, el flujo de información va desde la memoria central al fichero(la información sale de la memoria central). Al igual que en los ficheros de entrada, dicha cualidad debeindicarse en la operación de apertura.8.5 EJEMPLOSTenemos el siguiente fichero:AL_NOM AL_DIR AL_EDAD AL_NOT AL_CUR AL_ALTA(30) X(30) 9(2) 9(2) X(4) 9(3)Realiza un ordinograma que imprima la nota media obtenida por los alumnos de 2º BUP y la edad media delos alumnos de COUAlgoritmo:INICIOVariables:F.alum fichero secuencialR.ALUMAL_NOM : alfabético, 30 46
  47. 47. AL_DIR: alfanumérico,30AL_EDAD : numérico,2AL_NOT : numérico, 2AL_CUR: alfanumérico, 4AL_ALT: numérico, 3C_DOS: numérico, 2C_COU: numérico, 2T_NOTA: numérico, 4T_EDAD: numérico, 2MED_NOT: numérico, 2MED_EDAD: numérico, 2Abrir de entrada F.alumLeer F.alumMientras no F.F. hacerSi AL_CUR =2º BUP EntoncesT_NOTA = T_NOTA + AL_NOTC_DOS = C_DOS + 1SinoSi AL_CUR = COU EntoncesT_EDAD = TEDAD_ + AL_EDADC_COU = C_COU + 1FinsiFinsiLeer F.alumFinmientrasMED_NOT = T_NOTA/C_NOTMED_EDAD= T.EDAD/C_COU 47
  48. 48. Imprime Nota media MED_NOTImprime La nota media EDAD_NOTImprime La edad media EDAD_MEDCerrar F.alumFin.Con el fichero del ejercicio anterior realizar un ordinograma para calcular e imprimir:• La estatura máxima de los alumnos de COU• La estatura mínima de los alumnos de 1º BUPAlgoritmo:INICIOVariables:F.alum Fichero secuencialRALUM:AL_NOM: alfabético, 30AL_DIR: alfanumérico, 30AL_EDAD: numérico, 2AL_NOT: numérico, 2AL_CUR: alfanumérico, 4AL_ALT: numérico, 3AL_MAX: numérico, 3AL_MIN: numérico, 3Abrir de entrada F.alumLeer F.alumMientras no F.F F.alum hacerSi AL_CUR =COU entoncesALT_MAX AL_ALTSino 48
  49. 49. Si AL_CUR = 1º BUP entoncesSi AL_ALT<ALT_MIN entoncesALT_MIN AL_ALTFinsiFinsiFinsiLeer F.alumFinmientrasIMPRIME Altura máxima ALT_MAXIMPRIME Altura mínima ALT_MINCerrar F.alumFin.Utilizando el fichero anterior. Realizar un ordinograma para obtener dos ficheros secuenciales de salida, unode alumnos aprobados y otro de alumnos suspensos, que tendrá la siguiente descripción:AP_NOM AP_DIR AP_NOT AP_CURA(30) X(30) 9(2) X(4)SU_NOM SU_DIR SU−NOT SU_CURA(30) X(30) 9(2) X(4)INICIOVariables:F.alum fichero secuencialR.alumAL_NOM: Alfabético, 30AL_DIR: Alfanumérico, 30AL_EDAD: Numérico, 2AL_NOT: Numérico, 2AL_CUR: Alfanumérico,4 49
  50. 50. AL_ALT: Numérico, 3F.aprova: fichero secuencialR.aprovaAP_NOM: Alfabético,30AP_DIR: Alfanumérico, 30AP_NOT: Numérico, 2AP_CUR: Alfanumérico,4F_SUSP: fichero secuencialR_F SUSPSU_NOM:Alfabético,30SU_DIR: Alfanumérico, 30SU_NOT: Num, 2SU_CUR: alfanumérico,4Abrir de entrada: F.alumAbrir de salida: F.alum, F.supLeer F.alumMientras no F.F F.alum hacerSi AL_NOT <5 entoncesProcedimiento CAMPOSGrabar R.SUPSinoProcedimiento CAMPOS IIGrabar R.APROFinsiFinmientrasFin 50
  51. 51. PROCEDIMIENTO CAMPOSInicioSU_NOM AL_NOMSU_DIR AL_DIRSU_NOT SU_NOTSU_CUR SU_CURFinPOCEDIMIENTO CAMPOS IIInicio:AP_NOM AP_NOMAP_DIR AP_DIRAP_NOT AP_NOMAP_CUR AP_CURFinUtilizando el fichero anterior, realizar un ordinograma para calcular e imprimir el nombre y la edad del primeralumno que, siendo de 2º BUP, con una nota no inferior a 7 y teniendo una estatura superior a 180 cm,sea elmás joven.ALGORITMO:INICIOVariables:F.alum fichero secuencialRalumAL_NOM: alfabético,30AL_DIR: alfanumérico, 30AL_EDAD: numérico, 2AL_NOT: numérico,2AL_CUR: alfanumérico,4 51
  52. 52. AL_ALT: numérico,3C_DOS: numérico,2C_COU: numérico, 4T_NOTA: numérico, 4T_EDAD: numérico,2MED_NOT: numérico,2MED_EDAD: numérico,2AUX_NOMMIN_EDADAbrir de entrada F.alumMin edad=90Leer F.alumMientras no F.F F.alum hacerSi AL_CUR= 2º BUP EntoncesSi AL_ALT>180 EntoncesSi AL_NOT>=7 EntoncesSi AL_EDAD <MIN_EDAD EntoncesMIN_EDAD AL_EDADAUX_NOM AL_NOMFinsiFinsiFinsiFinsiFinmientrasFINCrear un fichero secuencial (FAGENDA), introduciendo el contenido de los campos de los registros desde elteclado. Su descripción es la siguiente: 52
  53. 53. AG_NOM AG_DIR AG_TELA(30) X(30) X(7)El proceso finalizará cuando se teclee un * en el campo nombre.Variables utilizadas:En este ejercicio no se necesitan variables ya que no hay que contar, acumular o guardar ningún campo delregistro.Proceso:Del enunciado se deduce que será un proceso repetitivo cuya finalización (condición de salida) vendrádeterminada por la introducción de un * en lugar de un nombre.NOTA: Siempre que se efectúe una comparación con un literal alfabético o alfanumérico, éste debe ir entrecomillas.En un centro de enseñanza se tiene un fichero secuencial de alumnos, FALUM, cuyos registros se componende los siguientes campos:AL_NOM AL_DIR AL_EDAD AL_NOT AL_CUR AL_ALTA(30) X(30) 9(2) 9(2) X(4) 9(3)Siendo el campo AL_ALT la estatura en centímetros del alumno.TEMA 99. FICHEROS RELATIVOS9.1 Organización9.2 Tipos de Acceso9.3 Tablas de Gestión9.4 Operaciones9.5 Transformación de Claves9.7 Método Hashing (o dispersión)9.1. ORGANIZACIONSon ficheros a los que se puede acceder directamente a cada uno de sus registros, para ello se organiza la zonade fichero en dos partes: • Parte primaria o principal: Donde se graban todos los registros norepetidos bien sean creación o actualización. 53
  54. 54. − Parte de sinónimos: Se graban los repetidos.En todos los sistemas, la zona primaria se graba de la misma forma y en la de sinónimos cada zona es distintaen cada sistema.Un fichero relativo se puede considerar como un conjunto de "casillas" del mismo tipo y tamaño, numeradasconsecutivamente de 1 a N.Son ficheros caracterizados porque:a) El almacenamiento de los registros sobre el soporte seleccionado (memoria auxiliar) se realiza através de un identificativo o clave que indica por una parte la posición del registro dentro del fichero ypor otra la posición de memoria donde está ubicado.b) La dirección de almacenamiento del registro dentro del soporte utilizado se obtiene siempre delidentificativo o clave del propio registro, sabiendo que:1. Si la clave no es numérica, es decir, alfabética o alfanumérica, se aplican algoritmos o fórmulas detransformación (matemáticas generalmente) para obtener valores enteros positivos que facilitan su posteriormanejo y tratamiento.2. Si la clave es numérica se aplica un algoritmo de transformación para obtener un rango de valorescomprendido entre el intervalo de valores de las direcciones de memoria disponibles, estableciendo así unarelación directa entre dirección lógica y dirección física.El algoritmo de transformación que es aplicado a la clave debe cumplir tres condiciones:a) Aprovechar al máximo el espacio disponible en memoria.b) Establecer una correspondencia directa entre dirección lógica (clave) y dirección física (memoria).c) Producir el menor número de registros que con diferentes claves generan idénticas direcciones dealmacenamiento tras aplicar el algoritmo de transformación.Los algoritmos de transformación utilizados en la conversión de claves reciben la denominación de Hashing.Existen dos variantes de la organización relativa denominados directa y aleatoria o indirecta.La diferencia entre estos, es que para grabar un fichero, cada registro tiene una clave en el propio registro deforma implícita que indica dónde hay que grabar ese registro, las claves son directas cuando no necesitantransformación para utilizarse e indirectas cuando hay que transformarlas.ORGANIZACION DIRECTAEste tipo de organización, se da en aquellos casos en los que las claves sean numéricas, estableciéndose unacorrespondencia directa entre dirección lógica y dirección física. Al ser la clave de tipo numérico, no surgenproblemas, pues los registros se ubican en direcciones de memoria de tipo numérico entero, lo que facilitaestablecer una correspondencia directa entre la clave y la dirección de memoria, de todo ello, podemosdeducir que la secuencia lógica de almacenamiento de los registros en el fichero coincide con la secuenciafísica de almacenamiento de los registros sobre el soporte utilizado.El valor de la clave siempre está en relación con la capacidad máxima de soporte físico utilizado para el 54
  55. 55. almacenamiento, por lo que nunca podemos almacenar un registro cuya clave esté por encima de los límitesmáximos del fichero.Utilizando este tipo de organización, cada dirección sólo puede ser ocupada por un registro. El hecho deexistir más de un registro con la misma clave es causa de error ya que ello supondría la posibilidad dealmacenar en el fichero un registro repetido, lo cual no es posible en este tipo de organización. Este hechorecibe el nombre de sinónimo o colisión.Las ventajas más destacables en este tipo de organización son:a) Permite acceder a los datos de dos formas diferentes.1. Directamente, mediante el identificativo o clave del fichero.2. Secuencialmente, partiendo siempre del primer registro almacenado en el fichero.b) Permite realizar operaciones de escritura/lectura simultáneamente.c) Son muy rápidos en el tratamiento de registros individuales.Los inconvenientes más destacables en este tipo de organización son:a) Una consulta total del fichero, puede suponer un gran inconveniente, pues al realizar un acceso secuencialsobre los datos del fichero, estamos obligados a analizar posición por posición desde la primera hasta la últimapudiendo ocurrir que algunas posiciones estén vacías, lo cual implica una considerable pérdida de tiempo, porlo que es necesario el empleo de técnicas avanzadas de programación para realizar lecturas secuenciales.b) Deja gran cantidad de huecos (posiciones libres en memoria) dentro del fichero. Estos huecos surgendebido a los identificativos de los registros que se desean almacenar después de haber sido introducidos en elfichero indican posiciones de almacenamiento probablemente no contiguas, lo que implica undesaprovechamiento del soporte de almacenamiento o memoria auxiliar, respecto al número real de registrosalmacenados.c) Se deben dar soluciones al problema de los sinónimos o colisiones.ORGANIZACION ALEATORIA O INDIRECTAEsta variante de la organización relativa se dan en aquellos casos en los que la clave debe sufrir un proceso deconversión que permita obtener un valor numérico entero facilitando así la correspondencia directa que sedebe establecer entre la clave y la dirección de memoria. Este caso, la secuencia lógica de almacenamiento nocoincide con la secuencia física.El valor de la clave siempre debe estar en relación con la capacidad máxima del soporte físico utilizado parael almacenamiento de la información, por este motivo nunca podemos almacenar registros cuya dirección dealmacenamiento esté por encima de los límites máximos del fichero y, si así ocurriese, resultaría que elalgoritmo de almacenamiento no sería correcto.En este tipo de organización, cada dirección puede ser ocupada por más de un registro, pues este hecho no escausa de error, ya que ello se debe a que el algoritmo de transformación que hemos aplicado al identificativo oclave (en este caso alfabética o alfanumérica) ha generado con distinto identificativos la misma posición dealmacenamiento en memoria, lo cual sí es posible en esta variante de organización relativa. Este hecho recibeel nombre de sinónimo o colisión. 55
  56. 56. Las ventajas más destacables en este tipo de colisión son:a) Permite un acceso inmediato a los registros haciendo únicamente referencia a su clave.b) No requieren de procesos u operaciones de ordenación.c) Este tipo de organización permite realizar operaciones de escritura/lectura a la vez.d) Son muy rápidos en el tratamiento individual de los registros.e) Permite acceder secuencialmente a los datos siempre que se desee.Los inconvenientes más destacables en este tipo de organización son:a) Las consultas completas del fichero pueden resultar excesivamente lentas.b) De la misma forma que ocurría con la organización directa, este tipo de organización deja gran cantidad dehueco o espacios libres dentro del fichero.c) Tanto el algoritmo para la transformación o conversión de las claves como el algoritmo necesario para elalmacenamiento y tratamiento de sinónimos corren a cuenta del programador, siendo responsabilidad de esteaplicar un método que deje el menor número de huecos libres y genere el menor número de sinónimos.9.2 TIPOS DE ACCESOAl igual que en los ficheros de organización secuencial indexada, en un fichero con organización directapueden utilizarse fundamentalmente dos tipos de acceso: acceso secuencial y acceso directo. Algunoslenguajes admiten también el acceso dinámico.ACCESO SECUENCIALConsiste en acceder, tengan o no contenido, a todas las posiciones del fichero desde la primera hasta la última.Algunos lenguajes (COBOL por ejemplo), poseen rutinas para detectar si una "casilla" tiene contenido o es un"hueco" y saltarla en este caso. En otros lenguajes (como el BASIC), esta situación se debe controlar medianteprograma.ACCESO DIRECTOPermite acceder a un determinado registro con sólo indicar su clave.A todo fichero directo hay que asignarle una variable de memoria, externa por tanto al fichero, que guardará laposición del registro al que se desea acceder.De igual forma que a los ficheros secuenciales indexados, después de cada una de las operaciones realizadassobre un fichero relativo, hay que preguntar si se ha podido ejecutar la instrucción o no, para tomar lasmedidas oportunas en cada caso.ACCESO DINÁMICOConsiste en acceder directamente a una determinada posición y a partir de ella recorrer secuencialmente ungrupo de registros. 56
  57. 57. En general el modo de acceso más utilizado para ficheros con este tipo de organización es el acceso directo.Las operaciones que se pueden realizar con cualquier tipo de acceso son las mismas que para ficheros conorganización secuencial indexada, la diferencia fundamental estriba en la forma en la que el sistema accede aun determinado registro:− Si en la creación del fichero no se utilizó algoritmo detransformación de claves, la clave de cada registro indicarádirectamente la posición relativa del mismo.− Si en la creación del fichero se utilizó un algoritmo, entonces a la clave del registro tratado se le aplicará elmismo algoritmo que en la creación, para obtener la posición relativa de dicho registro.9.3 TABLAS DE GESTIÓN EN PARA ARCHIVOSRELATIVOS EN CEste programa pasa un fichero secuencial a uno DIRECTO, Los sinónimos de encuentran entre elregistro 250 y 299.#include <stdio.h>#include <stdlib.h>#include <conio.h>#include <iostream.h>#include <ctype.h>void main(void){int i,clave,aux;char tecla;struct secuencial{char nombre [50];char apellido [50];int cod;} 57
  58. 58. struct directo{char nombre[50];char apellido[50];int cod;char ocupado;}struct secuencial secu;struct directo direc;FILE *fs ,*fd;clrscr();/* Abrimos los ficheros */if ((fs=fopen(a:clase, rb))==NULL){puts(Error de apertura (secuencial));exit(1);}if ((fs=fopen(a:clase, rb))==NULL){puts(Error de apertura (secuencial));exit(1);}/* introducimos los registros del secuencial en su posición del *//* directo*/fread(&secu,sizeof(struct secuencial),1,fs);i=0; 58
  59. 59. /* la condición de salida es el fin del fichero secuencial*/while (feof(fs)==0){/* nos situamos donde le corresponde el registro según *//* su código */clave=(secu.cod%250)+1;fseek(fd,clave*sizeof(struct directo),SEEK_SET);fread(&direc,sizeof(struct directo),1,fd);if(direc.ocupado==`s){/*nos vamos a la zona de sinonomos y... *//*recorremos para encontrar un sitio libre */fseek(fd,250*seizeof(struct directo),SEEK_SET);aux =−1;do{aux++;fread (&direc,sizeof(struct directo),1,fd);}while ((Feof(fd)==0&&(direc.ocupado==`s));/* comprobamos que el fichero no esté deteriorado*/if(feof(fd)){puts(t FICHERO DETERIORADO DEBEREORGANIZARSE ZONA DE SINONIMOSLLENA); 59
  60. 60. Exit(1);}/*retrocedemos un lugar para volver a la primera posición */fseek(fd,(250+aux)*sizeof(struct directo), SEEK_CUR);/*copiamos las estructuras y cambiamos el campo ocupado */strcpy(direc.nombre, secu.nombre);strcpy(direc.apellido,secu.apellido);direc.cod=secu.cod;direc.ocupado=`s;/*grabamos el registro en el fichero indirecto */fwrite(&direc,sizeof(struct directo),1,fd);}/* fin del if (direc.ocupado==`s)elseif(direc.ocupado==`n){strcpy(direc.nombre, secu.nombre);strcpy(direc.apellido, secu.apellido);direc.cod=secu.cod;direc.ocupado=`s;fseek(fd,clave*sizeof8struct directo),SEEK_SET);fwrite(&direc,sizeof(struct directo),1,fd);}elseputs (error de campo(direc.ocupado));}fread(&secu,sizeof(struct secuencial),1,fs); 60
  61. 61. }do{clrscr();puts(INTRODUZCA EL CODIGO DEL REGISTRO AVISUALIZAR);/*el código debe estar entre 0 y 299 */do{cin>>i;if((i<0)&&(i>299))puts(EL NÚMERO DEBE SER SUPERIOR A 0E INFERIRO A 300);}while ((i<0)&&)(i>299));/*situamos el puntero en la posición del código */clave=(i%250)+1;fseek(fd,clave*sizeof(struct directo),SEEK_SET);fread(&direc,sizeof(struct directo),1,fd);/*comprobamos que el registro este exista */if(direc.ocupado==`n){puts(NO EXISTE ESTE REGISTRO);getch();}else 61
  62. 62. {if (direc.cod==i){printf(NOMBRE −> %sn, direc.nombre);printf(APELLIDO −> %sn, direc.apellido);printf(NUMERO −> %dn, direc.numero);printf(OCUPADO −> %cn, direc.ocupado);}else /* hay que buscarlo en la zona de sinónimos */{fseek (fd,250*sizeof(struct directo),SEEK_SET);aux=−1;do{aux++;fread(&direc,sizeof(struct directo),1,fd);}while ((feof(fd)==0)&&(direc.cod!=i));if (feof(fd)){puts (t FICHERO DETERIORADODEBE REORGANIZARSE ZOPNADE SINONIMOS);exit(1);}/*retrocedemos un lugar para volver a la posición del registro*/ 62
  63. 63. fseek(fd,(aux+250)*sizeof(struct directo),SEEK_CUR);fread(&direc,sizeof(struct directo),1,fd);printf(NOMBRE −> %sn, direc.nombre);printf(APELLIDO −> %sn, direc.apellido);printf(NUMERO −> %dn, direc.numero);printf(OCUPADO −> %cn, direc.ocupado);} /* fin else if (direc.cod==1) */}/*preguntamos si queremos visualizar otro registro */puts(DESEA VER ALGUN REGISTRO (S/N));tecla=getch();}while (tolower(tecla)!=`n);}9.4 OPERACIONESSeguidamente estudiaremos las diferentes operaciones que podemos realizar sobre ficheros con independenciadel tipo de organización o acceso que hayamos seleccionado.CREACIÓNPara poder realizar cualquier operación sobre un fichero es necesario, que haya sido creado, previamente,almacenando sobre el soporte seleccionado la información requerida para su posterior tratamiento. Estorequiere que inicialmente se establezca la forma en la que la información almacenada en el fichero seráprocesada en un futuro, así como el tipo de organización y acceso que emplearemos para el manejo de dichosdatos.APERTURAPara poder trabajar con un fichero, este debe estar abierto, permitiendo así el acceso a los datos, dando laposibilidad de realizar sobre ellos las operaciones de lectura y escritura necesarias. Como norma general, unfichero nunca deberá permanecer abierto más tiempo del estrictamente necesario entendiendo como tal elperiodo de tiempo empleado para la realización de cualquier operación de lectura o escritura sobre él.CIERREUna vez finalizado las operaciones efectuadas sobre el fichero, éste debe permanecer cerrado para limitar elacceso a los datos y evitar así un posible deterioro o pérdida de información.ACTUALIZACIÓN 63

×