1. TEMA 1
1. INTRODUCCIÓN
Los datos con los que trabajamos normalmente en informática son procesados y manipulados de forma directa
en lo que denominamos normalmente como Memoria Principal. Esto repercute en una doble limitación a la
hora de tratar la información correspondiente :
Por ser limitada la memoria principal, esto implica que la capacidad de almacenamiento queda también
limitada o restringida a la capacidad propia de cada memoria principal que puede ser de diferente tamaño
según el ordenador y sus características. Por ello deberemos de recurrir a otros dispositivos de
almacenamiento de datos o de almacenamiento masivo de información, como la denominada Memoria
Auxiliar.
Todos los datos que quedan almacenados en la memoria principal, podemos decir que tienen un corto o breve
período de vida que variará siempre en función del tiempo que dure o tarde en ejecutarse el programa en
cuestión. Una vez que este programa finaliza su ejecución, sus datos correspondientes se pierden de forma
irremediable y para siempre si antes no se han almacenado en un dispositivo o periférico de tipo externo como
podrí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, y
además nos facilitará el manejo de grandes volúmenes de datos. Los ficheros nos permiten acceder a esa
creciente 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 excepciones
la entrada a la aplicación se hace utilizando archivos y casi en todas las aplicaciones, la salida se guarda en
archivos para almacenamiento a largo plazo y para posteriores accesos por parte del usuario y de otros
programas.
TEMA 2
2. CONCEPTOS Y DEFINICIONES
FICHERO
Un fichero es un conjunto de datos estructurados que pueden estar almacenados en un soporte de datos de
forma que puedan ser tratados o utilizados de forma individual o global. Cada fichero se tiene que identificar
con un nombre. Los elementos que forman un fichero se llaman registros y dichos registros se definen como
la 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. TIPOS DE FICHERO
SEGÚN SU UTILIZACIÓN
Permanentes o fijos:
Constantes:
Contienen información fija y necesaria para el óptimo funcionamiento y rendimiento de la aplicación e
informació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 de
diversas poblaciones y distritos. Contienen tablas y funciones.
Históricos :
Contienen información acumulada a lo largo del tiempo sobre las actualizaciones sufridas en los ficheros
maestros y constantes. Los hacen los usuarios para las estadísticas. Por ejemplo el inventario al final de año de
las existencias de un almacén.
Maestros :
Ficheros maestros llamados también ficheros de situación. Están encargados de mantener de forma constante
y actualizados los campos cuya información es variable. Estos ficheros se modifican constantemente. Por
ejemplo 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 los
resultados obtenidos en operaciones realizadas y que posteriormente será utilizada para actualizar los campos
que 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 utilidad
finaliza al efectuarse la modificación o actualización de dichos datos (Campos) en el fichero maestro. Una vez
realizada dicha operación el fichero de movimientos puede ser destruido o mantenido durante un tiempo
limitado. 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 el
de obtener cierta información que posteriormente será procesada para conseguir unos resultados esperados o
calculados. Su período de vida es aún mas corto que el de los ficheros de movimiento o transición, pues son
destruidos antes de que el programa o la aplicación correspondiente finalice su ejecución y el usuario no
puede verlos.
Por ejemplo un fichero auxiliar que contiene la clasificación de un fichero de inventario para hacer un listado
estadístico anual. Finalizado el proceso de listado, es destruido.
2
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 de
haber 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 podemos
añ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 tener
que acceder de forma secuencial, sino utilizando una clave para ello. En este tipo de ficheros la clave es
fundamental ya que se utilizan para obtener la posición relativa de cada registro dentro del fichero. Estos
ficheros 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 la
actualizació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 existir
dos registros con el mismo campo clave. Será por este campo por el cual se graben en orden ascendente y se
localicen los registros del fichero.
Ficheros indexados:
En este tipo de ficheros se abandonan los conceptos de secuencialidad y clave única. Se alcanza una
flexibilidad utilizando una estructura que utiliza múltiples índices, uno para cada tipo de campo que pueda ser
objeto de búsqueda. A los registros se accede solo a traves de los índices. Como resultado existe una
restricción a la ubicación de los registros. Por ello al menos un índice contiene un puntero a cada registro y
pueden 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 se
organiza 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 de
longitud variable, algunos registros no contendrán todos los campos. Si añadimos un registro al archivo
principal, todos los archivos de índice deben actualizarse.
TEMA 3
3. ESTRUCTURA DE REGISTROS
3
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 del
mismo o diferente tipo. Podríamos considerar al registro como una unidad de tratamiento incluida dentro de
un fichero.
Registro físico:
Un registro físico al que podemos llamar también bloque, es la cantidad de información que el sistema
operativo puede transferir como unidad al realizar una operación de entrada y salida entre la memoria
principal del ordenador y los periféricos o dispositivos de almacenamiento. El tamaño de un bloque o registro
fí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 una
unidad de tratamiento independiente dentro del mismo registro. Cada campo se caracteriza y se diferencia de
los 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 mismas
características que un campo. De esta forma podemos establecer cierta jerarquía entre los datos almacenados
dentro de un fichero y más concretamente dentro de cada registro. Esta jerarquía deberá tenerse en cuenta a la
hora de tratar o procesar la información que tenemos almacenada. Dentro de un subcampo puede haber mas
subcampos.
Campo clave:
Para poder diferenciar a un registro de otro dentro de un fichero, se tiene que recurrir a una información que
sea única. Esta información sólo nos la puede ofrecer el campo clave. Este campo solo se puede crear con
independencia del resto de la información (campos) del registro o por defecto se puede utilizar un campo de
los ya existentes y disponibles en la estructura de dicho registro. El objetivo es poder realizar a traves de él
operaciones de búsqueda y clasificación. La definición de un campo clave en un fichero no es obligatoria, es
decir, se puede carecer de ella o puede estar formada por varias definiciones de campos claves, en cuyo caso
se establecerán diferentes categorías entre ellas, dando lugar a lo que denominaremos como clave principal y
claves secundarias.
Bloqueo de registro o registro bloqueado:
4
5. Un registro puede constar de un número variable de registros lógicos, por tanto, suponiendo que utilizáramos
como soporte de almacenamiento el disco, podríamos transferir varios registros lógicos de la memoria al disco
y del disco a la memoria en una sola operación de entrada y salida. Este fenómeno recibe el nombre de
bloqueo 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 se
le 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 estar
contenidos en un bloque o registro físico.
Ejemplo :
210 97 Tamaño del registro lógico.
16
2 Factor de bloqueo.
Resto : Nº de bytes que sobran.
Tamaño del registro físico.
REGISTRO LÓGICO
NOMBRE APELLIDOS DIRECCIÓN EDAD
Tamaño : 97 bytes
REGISTRO FÍSICO O BLOQUE DE 210 Bytes
REGISTRO LÓGICO 1 REGISTRO LÓGICO 2 ?
Factor de bloqueo=2 Espacio sobrante=16 bytes
Estructura de registros :
FICHERO
1 2 3 4 5 6 7 8 9 10 11 12
REGISTRO 7
COD_ALUMNO NOMBRE APELLIDOS FECHA_NAC
CAMPO FECHA_NAC
DIA MES AÑO
5
6. SUBCAMPO DIA
TEMA 4
• CLASIFICACIÓN DE REGISTROS
• Formas de gestión en varios
sistemas.
• 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 un
nú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 30
campo 1 8 Se definen al principio del programa
campo 2 12
campo 3 10
2. Con igual número de campos pero distinta longitud, cambia la longitud. Tenemos que expresar la longitud
de cada campo.
Ejemplo :
4 campo 6 campo 20 campo
Longitud del campo
Otro ejemplo :
TIPO A : A 4 16 10 =30 TIPO B : B 8 12 10 =30
campo 1=4 campo 1=8
campo 2=16 campo 2= 12
6
7. campo 3=10 campo 3=10
Poniendo al principio del registro el tamaño de los tres campos, será más rápido que el anterior porque mira
los 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 CAMPO
REGISTRO 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 CAMPO
Número de campos Tamaño del campo
2º) Se ponen todos los datos al principio.
Ejemplo :
7,2,4,3
Tamaño de los campos
3º) Definiendo los tipos ( A, B, C ).
Ejemplo :
TIPO A : A 8 9 13 =30 TIPO B : B 6 20 4 =30
campo 1=8 campo 1=6
campo 2=9 campo 2=20
campo 3=13 campo 3=4
Lo 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. Registro 1 A B C D E F G H I J K L M
Registro 2 A B C D E F G H I J K L M
Igual número de campos por registro, y distinta longitud de cada campo del mismo registro e idéntica longitud
del mismo campo en distintos registros.
Registro 1 A B C D E F G
Registro 2 A B C D E F G
Igual número de campos por registro, y distinta longitud de campos en el mismo y diferentes registros.
Registro 1 A B C D .................................. N
Registro 2 A B C D ........................ N
Registro 3 A B C D .................................. N
Diferente número de campos por registro y distinta longitud de campo en el mismo y diferentes registros.
Registro 1 A B C D E
Registro 2 A B C D
Registro 3 A B C D E F G H
4.3 REGISTROS DE LONGITUD VARIABLE :
El tamaño total del registro es variable ( longitud indefinida o variable). En este tipo de registros es necesario
establecer 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 CAMPO
Tamaño total del registro Tamaño del campo
2º) 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 registro
3º) Definiremos tipos.
8
9. Ejemplo :
TIPO A : A 9 12 9 TIPO B : B 6 13 11
campo 1=9 campo 1=6
campo 2=12 campo 2=13
campo 3=9 campo 3=11
El resultado sería :
B CAMPO B CAMPO A CAMPO A CAMPO
Registros de longitud variable :
Son aquellos registros cuya longitud varía de un registro a otro.
Registro 1 A B C D E XXXXX
Registro 2 A B C D
Registro 3 A B C D E F G H XXXXXX
Registro 4 A B C D E F G H XXX
TEMA 5
5. 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 del
ordenador. 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 la
operación de lectura los nombres de las variables que están encargadas de almacenar los datos del registro
leí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. En
este 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. Cuando el fichero se acaba, el sistema detecta que lo que ha leído no es un registro, a esto se le llama marca
de fin de fichero.
Un fichero de entrada es aquel que se utiliza para hacer operaciones de lectura, el flujo de información va
desde 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. La
información comprende al delas variables cuyos nombres coincidan con los campos definidos para un fichero
El 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 el
fichero ya existe.
Bajas :
Consiste en eliminar uno o varios registros del fichero. Esta operación requiere un primer proceso de lectura
para 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. Esta
operación requiere un primer proceso de lectura para la localización del registro que se desea modificar y un
segundo 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 o
parcial de sus campos en pantalla o impresora en forma de listados ordenados siguiendo ciertos criterios de
clasificació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. a) Consulta en un fichero secuencial desordenado :
Búsqueda de un registro :
INICIO
Abrir Fich de lectura
Leer valor
sw=0
Mientras no FF (Fich) y sw=0 hacer
leer R_Fich de Fich
Si campo_n = valor entonces
sw=1
Finsi
Finmientras
Si sw=1 entonces
escribir R_Fich
sino
escribir No encontrado
Finsi
Cerrar Fich
Fin
b) Consulta en un fichero secuencial ordenado :
Búsqueda de un registro :
INICIO
Abrir Fich de lectura
Leer valor
sw = 0
Mientras no FF (Fich) hacer
11
12. Leer R_Fich de Fich
Si campo_n >= valor
sw = 1
Finsi
Finmientras
Si sw = 1 y campo_n = valor entonces
Escribir R_Fich
Sino
Escribir No encontrado
Finsi
Cerrar Fich
Fin
Búsqueda de todos los registros :
INICIO
Abrir Fich de lectura
Leer valor
sw = 0
Encontrado = F
Mientras no FF (Fich) y sw = 0 hacer
Leer R_Fich de Fich
Si campo_n > valor entonces
sw = 1
Sino
Si campo_n = valor entonces
Escribir R _Fich
Escribir Encontrado = V
12
13. Finsi
Finsi
Finmientras
Si Encontrado = F
Escribir No encontrado
Finsi
Cerrar Fich
Fin
Actualizació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 un
fichero de movimientos con la misma ordenación que el fichero origen, además contiene un campo que indica
el tipo de movimientos ( alta, baja, o modificación ). Esto implica que la información que no sea baja o
erronea pasa al fichero destino con los registros ordenados y actualizados. Los errores producidos en la
actualización pueden ser enviados a una impresora o escritos en el soporte de almacenamiento para su
posterior 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 )
INICIO
Variables :
clave_origen
clave_destino
registro_origen
registro_destino
registro_mov
registro_error
13
14. resto_destino
resto_mov
Abrir Fich_origen de lectura
Abrir Fich_mov de lectura
Abrir Fich_destino de escritura
Abrir Fich_errores de escritura
Fin_origen = 0
Fin_mov = 0
Procedimiento Leer_origen
Procedimiento Leer_mov
Mientras Fin_origen = 0 y Fin_mov = 0 hacer
Si clave_origen < clave_mov entonces
Procedimiento Copia
Procedimiento Leer_origen
Sino
Si clave_origen > clave_mov entonces
Procedimiento Alta
Procedimiento Leer_mov
Sino
Procedimiento Baja_modif
Procedimiento Leer_origen
Procedimiento Leer_mov
Finsi
Finsi
Finmientras
Mientras Fin_origen = 0 hacer
14
15. Procedimiento Copia
Procedimiento Leer_origen
Finmientras
Mientras Fin_mov = 0 hacer
Procedimiento Alta
Procedimiento Leer_mov
Finmientras
Cerrar Fich_origen, Fich_mov, Fich_destino, Fich_error
Fin
Procedimiento Alta :
INICIO
Según sea tipo_mov
`A´ :
clave_destino = clave_mov
resto_destino = resto_mov
Escribir registro_destino en Fich_destino
Otros :
registro_error = registro_mov
Escribir registro_error en Fich_error
Finsegún_sea
FinSegunSea
FIN
Procedimiento Leer_origen :
INICIO
Si FF ( Fich_origen ) entonces
Fin_origen = 0
15
16. Sino
Leer registro_origen de Fich_origen
Finsi
Fin
Procedimiento Leer_mov :
INICIO
Si FF ( Fich_mov ) entonces
Fin_mov = 0
Sino
Leer registro_mov de Fich_mov
Finsi
Fin
Procedimiento Baja_Modif :
INICIO
Según_sea Tipo−mov
`B´ :
** No se copia
`M´ :
** Se modifican los campos deseados
Escribir registro_destino en Fich_destino
Otros :
registro_error = registro_mov
Escribir registro_error en Fich_error
registro_destino = registro_orgen
Escribir registro_destino en Fich_destino
Finsegún_sea
16
17. Finsegunsea
FIN
Procedimiento Copia :
INICIO
registro_destino = registro_origen
Escribir registro_destino en Fich_destino
FIN
• Actualización interactiva :
Consiste en actualizar un fichero introduciendo datos por teclado, produciremos altas. Bajas, y modificaciones
de registros. Utilizaremos un fichero temporal para organizar el fichero cuando tengamos que hacer una baja o
un borrado de registro. Las altas se producen en el lugar correspondiente, tendremos que utilizar un fichero
temporal para reorganizar el fichero si este está ordenado, sino las altas se realizarán añadiendo registros al
fichero. Los errores se presentan en pantalla cuando se producen.
Se utilizará un fichero llamado ( Fichero ) y un fichero temporal llamado ( Temp )
INICIO
Variables :
vclave
vale_clave
verif_clave
clave_registro
resto_registro
Repetir
Escribir 1. Alta
• Baja
3. Modificación
Escribir Seleccionar operación
Leer operación
Según_sea operación
17
18. 1 : Procedimiento Alta
2 : Procedimiento Baja
3 : Procedimiento Modificación
Finsegún_sea
Mientras operación > 0 y operación < 4 hacer
Cerrar Fichero
Fin
Procedimiento Alta :
INICIO
Escribir Introducir clave para alta
Leer vclave
Vale_clave = Verif_clave ( vclave )
Cerrar Fichero
Si vale_clave = V entonces
Escribir Clave existente. No hay alta
Sino
Abrir Fichero para añadir
clave_registro = vclave
Leer resto_registro
Escribir registro en Fichero
Finsi
Fin
Procedimiento Baja :
INICIO
Escribir Introducir clave para baja
Leer vclave
18
19. vale_clave = verif_clave ( vclave )
Cerrar fichero
Si vale_clave = F entonces
Escribir No existe clave para baja
Sino
Escribir registro
Abrir Fichero para leer
Abrir Temp para escribir
Mientras no FF ( Fichero ) hacer
Leer registro de Fichero
Si clave_registro <> vclave entonces
Escribir en Temp
Finsi
Finmientras
Borrar_Fichero ( Fichero )
Renombrar_Fichero ( Temp, Fichero )
Finsi
Fin
Procedimiento Modificación :
INICIO
Escribir Introducir clave para modificar registro
Leer vclave
vale_clave = veirf_clave ( vclave )
Si vale_clave = F entonces
Escribir No existe clave para modificar
sino
19
20. Escribir registro
** Leer valores de campos del registro que se va a modificar.
Escribir registro de Fichero
Finsi
Fin
Procedimiento Verificar_clave ( clave)
INICIO
Abrir Fichero para lectura y escritura
sw = 0
Mientras no FF ( Fichero ) y sw = 0 hacer
Leer registro de Fichero
Si clave_registro = clave
sw = 1
Finsi
Finmientras
Si sw = 1 entonces
retorno V
Sino
retorno F
Finsi
Fin
FICHEROS 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, y
modificaciones producidas sobre el fichero secuencial indexado. El fichero maestro contendrá todos los
mismos campos, y además un campo tipo de movimiento. Uno de los campos será un campo identificador o
clave por el que se buscará el registro.
Ejemplo :
20
22. ER_NOM : Alfabético, 30
ER_PRE : Numérico,6
ER_EXIS : Numérico, 4
ER_TIPO : Alfabético, 1
ER_MEN : Alfabético, 30
Abrir de entrada y salida FARTI
Abrir de entrada FMOVI
Abrir de entrada FERROR
Leer FMOVI
Mientras no FF FMOVI hacer
Si MV_TIPO = A entonces
Procedimiento ALTA
Sino
Si MV_TIPO = B entonces
Procedimiento BAJA
Sino
Si MV_TIPO = M entonces
Procedimiento MODIFICACIONES
Sino
ER_MEN ! Error de tipo en FMOVI Procedimiento ERROR
Finsi
Finsi
Finsi
Finmientras
Cerrar Ficheros FARTI, FMOVI, FERROR
Fin
22
23. Procedimiento Alta :
INICIO
AR _COD ! MV_COD
AR _NOM ! MV_NOM
AR_PRE ! MV_PRE
AR_EXIS !MV_EXIS
Grabar Directa FARTI
Si error en grabación entonces
ER_MEN ! Registro ya existente
Procedimiento ERROR
Finsi
Fin
Procedimiento Baja :
INICIO
AR_COD ! MV_COD
Borrar Directa RARTI
Si error en borrado entonces
ER_MEN ! Registro no existente
Procedimiento ERROR
Finsi
Fin
Procedimiento Error :
INICIO
ER_COD ! MV_COD
ER_NOM ! MV_NOM
ER_PRE ! MV_PRE
23
24. ER_EXIS ! MV_EXIS
ER_TIPO ! MV_TIPO
Grabar RERROR
Fin
Procedimiento Modificaciones :
INICIO
AR_COD ! MV_COD
Leer Directa FARTI
Si error de lectura entonces
ER_MEN ! No existe registro
Procedimiento ERROR
Sino
Si MV_NOM <> Espacios entonces
AR_NOM ! MV_NOM
Finsi
Si MV_PRE <> 0 entonces
AR_PRE ! MV_PRE
Finsi
Si MV_EXIS <> 0 entonces
AR_EXIS ! MV_EXIS
Finsi
Regrabar Directa RARTI
Finsi
Fin
• Actualización desde el teclado ( Proceso On Line ) :
Las altas ,bajas y modificaciones se realizan según van produciendose. Estos procesos se denominan
Procesos On Line . El ordenador hace las preguntas y el operador o usuario envía respuestas a traves de
24
25. teclado.
Ejemplo :
PRINCIPAL
MENÚ
1−ALTAS
2−BAJAS
3−MODIFICACIONES
4−SALIR
ELIGE :
SI 1 ! Procedimiento ALTAS
SI 2 ! Procedimiento BAJAS
SI 3 ! Procedimiento MODIFICACIONES
SI 4 ! FIN
Algoritmo Actualización Indexada
INICIO
Fichero Indexado
OPCIÓN ( Para los procedimientos )
Clave
Abrir Fichero de entrada y salida
OPCIÓN ! S
Mientras OPCIÓN <> S hacer
Escribe MENÚ DE ACTUALIZACIÓN
Escribe
Escribe 1− ALTAS
Escribe 2− BAJAS
Escribe 3− MODIFICACIONES
25
26. Escribe 4− FIN
Escribe ELIGE OPCIÓN
Acepta OPCIÓN
Si OPCIÓN = 1 entonces
Procedimiento ALTA
Sino
Si OPCIÓN = 2 entonces
Procedimiento BAJA
Sino
Si OPCIÓN = 3 entonces
Procedimiento MODIFICACIONES
Finsi
Finsi
Finsi
Finmientras
Fin
Procedimiento Altas
INICIO
Escribe Dime la clave
Acepta CLAVE ( La clave evita tener que leer todos los campos )
Leer Directa FICHERO
Si existe ( Si existe registro con esa clave ) entonces
Escribe Registro ya existente
Sino
Escribe Dime datos
Acepta datos
26
27. REGISTRO ! datos
Grabar Directa registro
Finsi
Fin
Procedimiento Bajas :
INICIO
Escribe Dime la clave
Acepta CLAVE
Leer Directa FICHERO
Si no existe entonces
Escribe No existe
Sino
COMPROBACIÓN : Escribir todos los datos
Sino
dato ! REGISTRO
Escribe datos
Escribe Borrar SI o NO
Acepta S
Si S = si entonces
Borrar Directa REGISTRO
Finsi
Finsi
Fin
Procedimiento Modificaciones :
INICIO
Acepta CLAVE
27
28. Leer Directa FICHERO
Si no existe entonces
Escribe No existe, error
Sino
Escribe Dime datos
Acepta datos
REGISTRO ! datos
Regrabar Directa registro
Finsi
Fin
FICHEROS RELATIVOS :
Tanto la actualizaciones Batch como On Line en un fichero directo se realizan igual que con los ficheros
secuenciales 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 la
secuencia lógica de almacenamiento de los registros coinciden con la secuencia física de almacenamiento de
los registros sobre el soporte utilizado.
El valor de la clave está en relación de la capacidad del soporte de almacenamiento. No se puede almacenar
un registro cuya clave esté por encima de los límites del fichero. El hecho de existir mas de un registro con la
misma clave será un error, a lo que denominaremos sinónimo o colisión.
Organización Aleatoria o Indirecta
En este caso la clave debe sufrir un proceso de conversión a un valor numérico entero. Por ello la secuencia
lógica no coincide con la física.
Nunca podremos almacenar registros cuyas direcciones de almacenamiento están por encima de los límites
físicos del fichero.
En este tipo de organización cada dirección puede tener mas de un registro asociado. Este hecho recibe el
nombre de sinónimo o colisión.
TEMA 6
6.FICHEROS EN EL SISTEMA
28
29. OPERATIVO
6.1 Sistema Ms−Dos
6.2 Sistema Unix
6.3 Sistema OS/2
6.4 Sistema MVS
Los registros son la unidad lógica de acceso a los archivos, mientras que los bloques son la unidad de entrada
y salida para el almacenamiento secundario. Para realizar entradas y salidas los registros deben organizarse en
bloques.
Los bloques pueden ser de longitud fija o variable. En la mayoría de los sistemas los bloques son de longitud
fija, esto simplifica la entrada y salida, la asignación de memoria intermedia ( Buffers ) en memoria principal
y 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úmero
de operaciones de entrada y salida. Por otro lado si se accede aleatoriamente a los registros y no existe
cercanía en las referencias el uso de bloques mayores redunda en una transferencia innecesaria de registros no
usados. Pero si combinamos las operaciones secuenciales con la cercanía de referencias el tiempo de
transferencia se reduce usando bloques mayores. La única barrera es que los bloques grandes necesitan buffers
de 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 cada
bloque 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án
dos 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 los
bloques debido a ello no se podrá aprovechar el resto del bloque si el siguiente registro es mayor que el
espacio 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 a
archivos. En primer lugar tenemos que asignar el espacio de memoria secundaria a los archivos y en segundo
lugar 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. • 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 para
muchas aplicaciones es muy difícil estimar el tamaño posible del archivo. En estos casos la inclinación de
usuarios y programadores sería sobrestimar el tamaño del archivo. Pero esto es un derroche desde el punto de
vista de la asignación de memoria secundaria. Por tanto las ventajas usando asignación dinámica se hacen
notar 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 de
bloque 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ón
c) 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 el
espacio será difícil de reutilizar.
Bloques :
Las secciones fijas y pequeñas dan mayor flexibilidad. Podemos necesitar tablas grandes. La contigüedad se
abandona 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 asigna
previamente a los archivos un grupo contiguo de bloques, lo cual limita la necesidad de una tabla de
asignación de archivos, Solo necesita un puntero al primer bloque y el número de bloques asignados. En el
segundo caso todas las secciones necesarias son asignadas de una vez. Esto significa que la tabla de
asignació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. Existen
unas estrategias alternativas.
Primer hueco ( first fit ) :
Tomaremos el primer grupo de bloques contiguo sin usar, de tamaño suficiente
Mejor hueco ( best fit ) :
30
31. Elegiremos el grupo más pequeño sin usar que tenga tamaño suficiente
Hueco más cercano ( nearest fit ) :
Tomaremos el grupo sin usar de tamaño suficiente más cercano al asignado previamente al archivo, para
aumentar 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ón
previa que emplea secciones de tamaño variable. La tabla de asignación de archivos necesita una entrada por
cada archivo que nos muestre el bloque de comienzo y l longitud del archivo. Este tipo de asignación es la
más conveniente para un archivo secuencial ya que se pueden traer múltiples bloques de una sola vez, para
mejorar el rendimiento en los tratamientos secuenciales.
Surgen también problemas, como fragmentación externa. Deberemos declarar el tamaño del archivo en el
momento de la creación.
Asignación encadenada :
La asignación se hace con bloques individuales. Cada bloque contiene un puntero al bloque siguiente de la
cadena. La tabla de asignación de archivos de nuevo una sola entrada por cada archivo que muestre el bloque
de comienzo y la longitud del archivo. Aunque la asignación previa puede ser posible, lo más común es
utilizar bloques a medida que se necesitan. La elección del bloque es simple, ya que cualquier bloque puede
añ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 bloque
debemos recorrer la cadena hasta el bloque deseado. Una consecuencia, es que no tendrá cabida el principio
de cercanía. Por ello necesitaremos accesos a parte diferentes el disco cuando queramos traer varios bloques
de 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 índice
posee una entrada para cada sección asignada al archivo. Los índices no están almacenados físicamente como
parte de la tabla de asignación de archivos. El índice del archivo se guarda en un bloque aparte y la entrada del
archivo 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 variable
mejora la cercanía. Los archivos pueden concentrarse en zonas cercanas de cuando en cuando. La
concentración reduce el tamaño del índice para secciones de tamaño variable, pero no en el caso de asignación
por bloques.
La asignación indexada soporta el acceso secuencial y el acceso directo a los archivos, y por ello es la forma
má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. Autoexec.bat :
Es un archivo de proceso por lotes. Contiene los archivos ejecutables de aplicación de los programas o rutinas
que 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_fichero
A continuación insertaremos es texto.
Para terminar pulsaremos F6 o control−Z
COPIAR FICHEROS.
Copy :
Formato : copy origen : fichero1 destino : fichero2
Utilizació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 caracter
Ejemplo :
copy fichero?.dat a :! Copia todos los ficheros con nombre fichero mas un último caracter con extensión .dat
en a :
32
33. Duplicación de un fichero :
Se puede copiar un fichero en el mismo disco con otro nombre.
Ejemplo :
copy fichero1.dat fichero2.dat
El 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 lo
borra 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.ext
También se pueden utilizar comodines para comparar grupos de ficheros.
Ejemplo :
FC c : fichero?.ext c : fichero2?.ext
BORRAR FICHEROS.
Del :
Podemos borrar ficheros innecesarios utilizando este comando.
Borrar un fichero :
Formato : Del unidad : fichero.ext
Utilizando Erase marcamos el archivo como eliminado permitiendo que otro fichero pueda grabarse en el
33
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.ext
RECUPERACIÓN DE FICHEROS BORRADOS.
Undelete :
Mientras no se escriba sobre el fichero borrado podemos recuperar los archivos borrados.
Formato : Undelete unidad : fichero.ext
Si no especificamos ningún archivo, undelete recupera todos los archivos borrados.
Podemos utilizar comodines :
Ejemplo :
undelete *.dat ! Recupera todos los archivos con extensión .dat
Con /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 estructura
lógica interna será específica de la aplicación. Unix basándose en la estructura física de los archivos distingue
tres 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 de
utilidad del sistema. Los archivos ordinarios se corresponden con los que la mayoría de los sistemas llaman
34
35. simplemente archivos.
Directorio :
Contiene una lista de nombres de archivo y punteros a nodos−i ( nodos de información ) asociados. Los
archivos 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 de
acceso para lectura.
Especiales :
Se usan para poder acceder a dispositivos periféricos, terminales, impresoras. Cada dispositivo de entrada y
salida 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 sistema
operativo. Se pueden asociar varios nombres de archivo a un mismo nodo−i , pero un nodo−i activo solo
puede 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 esto
surgen 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 un
conjunto de opciones para controlar la manera de acceso a un archivo en particular, la lista muestra los
derechos 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 incluye
el 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. 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 usuarios
Borrado :
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 el
sistema de gestión de archivos debe cumplir una disciplina. Un método consiste en permitir a los usuarios
bloquear el archivo entero cuando lo vaya a actualizar. Otro control es bloquear los registros individuales
durante la actualización. Al diseñar la posibilidad de accesos compartidos, deben abordarse aspectos de
exclusió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ón
previa. 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 almacenado
en el índice de archivo.
El nodo−i incluye 39 bytes de información de direccionamiento, organizada como 13 direcciones o punteros
de 3 bytes. Las 10 primeras apuntan a los 10 primeros bloques de datos del archivo. Si el archivo es mayor
que 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 se
conoce 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ón
doble. Este contiene una lista de direcciones de bloques de indexación simple adicionales, y cada uno de estos
contiene 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 de
indexació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 del
sistema.
En Unix versión V, la longitud de un bloque es de 1Kb que a su vez albergara un total de 256 direcciones de
bloques. 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. • 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 de
archivos 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 de
acceso.
El sistema FAT situa el directorio raíz al principio o final de la partición. La tabla guarda la posición de los
datos en el disco fijo. Al solicitarse un archivo, el sistema operativo lee la tabla y posiciona el archivo en
memoria.
HPFS asigna espacio contiguo a los archivos, esto hace que la
bú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 al
contrario.
Los ficheros pueden tener atributos extendidos. Como por ejemplo el nombre de usuario del creador del
archivo. 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 para
poder leerlos.
En un sistema FAT no importa si se utilizan mayúsculas o minúsculas en los nombres de archivo. El sistema
operativo convierte a mayúsculas automáticamente. HPFS permite nombres de archivo tanto den mayúsculas
como 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. ARCHIVOS ESENCIALES EN OS/2 :
Config.sys :
Este fichero se encarga de controlar el sistema. Principalmente su tarea es gestionar los dispositivos, opciones
y las tareas de búsqueda.
Startup.cmd :
Este archivo es similar al autoexec.bat. Es un archivo de procesos por lotes. Contiene los archivos ejecutables
de aplicación de los programas que queramos ejecutar en el momento de cargar el sistema, el fichero debe de
estar posicionado en el directorio raíz.
Swapper.dat :
Es un archivo de intercambio. OS/2 crea memoria virtual, de manera que todas las aplicaciones software
piensan que tienen toda la memoria necesaria. OS/2 copia datos de la RAM en un archivo de intercambio
llamado swapper.dat. Para utilizar este archivo tiene que estar activado. La activación se hace en el fichero
config.sys. Swapper.dat puede crecer de tamaño de forma dinámica para satisfacer las necesidades de los
procesos 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 de
iconos en la carpeta por una información detallada de cada archivo. Esta operación es similar a la orden Dir
de 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. 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 a
mantener los atributos extendidos del archivo.
OS/2 permite mover ficheros mediante el comando move ( Igual que en MS−DOS ). Pero solo se podrá hacer
desde 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 una
sesión de OS/2 se inicia automáticamente una sesión de DOS para ejecutar el archivo por lotes, esta sesión se
cierra 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 en
una sesión de DOS. Existen archivos .BAT que pueden ejecutarse en OS/2, solo tenemos que cambiar la
extensió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 que
realiza mas con menos esfuerzo. Al introducir un archivo de extensión .CMD el sistema operativo mira si en
la primera línea del archivo aparece ( /* ), si es así el sistema operativo sabe que es un archivo por lotes
REXX, 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. /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 el
MVS/XA dispone de 31 bits de direcciones lógicas y físicas. Por ello en el MVS/XA podemos direccionar
2Gb.
Los programas pueden seguir trabajando con direccionamientos de 24 o 32 bits respectivamente. Con todo
ello aparece la memoria expandida situada en la caja de la CPU, es más lenta que la Memoria Principal pero
más rápida que los discos. Su tamaño varía entre 4Kb y 2Gb
Existen 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. 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 para
proporcionar 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 un
acceso 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 volumen
donde se encuentra el fichero. Una vez localizado se accede a un directorio denominado Tabla de contenidos
del 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 denomina
maestro 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 el
fichero
La VTOC se crea al iniciar el volumen ( disco ). Contiene una entrada para fichero. La asignación contigua es
la utilizada para tratar estos ficheros.
Para evitar la fragmentación podemos utilizar el programa defrag compactando los huecos libres y una
41
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 7
7. CLASIFICACIÓN DE FICHEROS
7.1 Ficheros permanentes
7.2 Ficheros Temporales o de Transacción
7.1 FICHEROS PERMANENTES
Son aquellos en los que sus registros permanecen inalterables (o casi inalterables) a través de los distintos
procesos en los que intervienen. Así pues, un fichero que se procese realizando una sola operación de consulta
se puede considerar como fichero permanente.
Dentro de estos ficheros, podemos hacer una triple subdivisión, atendiendo a la frecuencia de actualización.
FICHEROS CONSTANTES
Los datos de este tipo de ficheros no sufren habitualmente casi ninguna modificación, aunque a veces ocurra
que forzosamente tengan que ser actualizados. En general, los registros que componen estos ficheros constan
de una serie de campos. Unos perennes y otros susceptibles de ser modificados. Toda la información
contenida en estos ficheros, es información de consulta y nunca contienen resultados. Un ejemplo claro de
archivo maestro es un fichero con los datos de los empleados de una empresa, figurando en el fichero campos
como 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 contengan
información inalterable, como tablas matemáticas, tablas periódicas... etc.
FICHEROS DE SITUACIÓN
Son los que tienen registros que se actualizan con más frecuencia. Contienen la situación actual de la
informació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 instante
en 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 forma
instantánea. Estos ficheros reciben datos que le han sido enviados al ordenador a través de líneas de
telecomunicación.
Un ejemplo de este tipo de ficheros es aquél en el que estén contenidas todas las cuentas corrientes de los
clientes de una determinada entidad bancaria, sufriendo continuas modificaciones y siendo preciso que éstas
se computen al instante. Otro ejemplo es un fichero de reservas de una empresa de ferrocarril, existencias de
una almacén... etc.
FICHEROS HISTÓRICOS
Son aquellos cuyos registros contienen información referente a resultados de operaciones. Constituyen el
42
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 pueden
tomarla, 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ón
detallada 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 un
determinado período de tiempo en una empresa de ferrocarril, desvíos de trenes, salidas aplazadas, llegadas
puntuales... etc. con el único fin de elaborar estadísticas.
7.2 FICHEROS TEMPORALES O DE MOVIMIENTO
Son los que contienen los registros resultantes del tratamiento de las transacciones o modificaciones. Van a
servir en la mayoría de los casos para actualizar o consultar ficheros permanentes y para producir junto con
los maestros la información final. La vida de estos ficheros es corta ya que contendrán información el tiempo
que dure el proceso de actualización o consulta; cuando el proceso termina, no tiene ningún sentido
mantenerlos activos. La desaparición puede ocurrir en el mismo momento de terminar la actualización del
fichero 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 fichero
movimientos puede ser el que contenga todas las variaciones sufridas por esos empleados, tales como cambio
de categoría, número de hijos, retención... etc.
TEMA8
8. FICHEROS SECUENCIALES
8.1 Organización
8.2 Tipos de acceso
8.3 Operaciones
8.4 Ejemplos
8.1 ORGANIZACIÓN
La 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 almacenamiento
durante su creación.
Hay tres formas básicas de organizar un fichero:
− Organización Secuencial
Se caracteriza, fundamentalmente, por almacenar los registros físicamente contiguos, en el soporte
auxiliar. Es decir, uno a continuación de otro y en la misma secuencia en que se introducen.
43
44. − Organización Secuencial Indexada
− Organización Directa o Relativa
Estos dos últimos tipos de organización se estudiarán aparte.
8.2 TIPOS DE ACCESO
Modo de acceso es la manera de acceder a los registros de un fichero para extraer (leer) información
que pueda ser procesada posteriormente, o para grabar información nueva en el fichero.
Hay, fundamentalmente, dos formas de acceso:
− Acceso Secuencial
Se accede a los registros según su secuencia física, es decir, uno a continuación de otro, en el orden en
que están escritos.
Dicho de otro modo, para acceder al registro S hay que pasar previamente por los S−1 registros
anteriores.
− Acceso Directo
Permite el acceso a un registro determinado sin tener que pasar previamente por los registros
precedentes.
La utilización de un método u otro, depende de cómo se organizó el fichero al crearse, del soporte
donde 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 pletina
no dispusiera de rebobinad, para poder escuchar una determinada canción sería necesario haber
escuchado previamente las anteriores.
8.3 OPERACIONES
Las operaciones básicas se van a dividir en dos grupos. El primero incluirá aquellas que están
relacionadas con los propios ficheros, y el segundo las relativas a sus registros considerados
individualmente.
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. 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 ha
terminado.
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, al
finalizar el proceso, deben ser cerrados.
Sobre un archivo se pueden realizar otras operaciones como consulta, actualización clasificación,
borrado.
8.4 TRATAMIENTOS
Las 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 del
ordenador. 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ído
son los que se han asignado a los campos del mismo. En este movimiento de información, los datos
transferidos no desaparecen de la memoria auxiliar sino que simplemente se copian en las variables
correspondientes de la memoria central.
EJEMPLO:
Si hemos abierto previamente el fichero Agenda, que tiene la siguiente descripción:
NOM DIR TEL
El 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 la
memoria, sustituyendo sus anteriores valores. Por tanto, en cada instante del proceso sólo se dispone de
la 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; es
decir ya no queden más registros por leer. Esta situación la detecta el sistema cuando, después de una
45
46. operación de lectura, lo que se ha leído no es un registro de datos, sino lo que se conoce con el nombre
de marca de fin de fichero. Por tanto, siempre que se ejecute una operación de lectura sobre un fichero
secuencial, a continuación hay que preguntar si lo que se ha leído es la marca de fin de fichero o, por el
contrario, 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 sobre
los cuales se van a realizar operaciones de lectura; es decir, el flujo de información va desde el fichero a
la memoria central (la información entra en la memoria central). Esta cualidad del fichero debe
indicarse 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 ordenador
al fichero. La información que se traspasa es la contenida en las variables cuyos nombres coinciden con
los campos definidos para un fichero.
EJEMPLO:
Tenemos un registro con la siguiente descripción:
NOM DIR TEL
F.Agenda
Y 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 sobre
los 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 debe
indicarse en la operación de apertura.
8.5 EJEMPLOS
Tenemos el siguiente fichero:
AL_NOM AL_DIR AL_EDAD AL_NOT AL_CUR AL_ALT
A(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 de
los alumnos de COU
Algoritmo:
INICIO
Variables:
F.alum fichero secuencial
R.ALUM
AL_NOM : alfabético, 30
46
47. AL_DIR: alfanumérico,30
AL_EDAD : numérico,2
AL_NOT : numérico, 2
AL_CUR: alfanumérico, 4
AL_ALT: numérico, 3
C_DOS: numérico, 2
C_COU: numérico, 2
T_NOTA: numérico, 4
T_EDAD: numérico, 2
MED_NOT: numérico, 2
MED_EDAD: numérico, 2
Abrir de entrada F.alum
Leer F.alum
Mientras no F.F. hacer
Si AL_CUR =2º BUP Entonces
T_NOTA = T_NOTA + AL_NOT
C_DOS = C_DOS + 1
Sino
Si AL_CUR = COU Entonces
T_EDAD = TEDAD_ + AL_EDAD
C_COU = C_COU + 1
Finsi
Finsi
Leer F.alum
Finmientras
MED_NOT = T_NOTA/C_NOT
MED_EDAD= T.EDAD/C_COU
47
48. Imprime Nota media MED_NOT
Imprime La nota media EDAD_NOT
Imprime La edad media EDAD_MED
Cerrar F.alum
Fin.
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º BUP
Algoritmo:
INICIO
Variables:
F.alum Fichero secuencial
RALUM:
AL_NOM: alfabético, 30
AL_DIR: alfanumérico, 30
AL_EDAD: numérico, 2
AL_NOT: numérico, 2
AL_CUR: alfanumérico, 4
AL_ALT: numérico, 3
AL_MAX: numérico, 3
AL_MIN: numérico, 3
Abrir de entrada F.alum
Leer F.alum
Mientras no F.F F.alum hacer
Si AL_CUR =COU entonces
ALT_MAX AL_ALT
Sino
48
49. Si AL_CUR = 1º BUP entonces
Si AL_ALT<ALT_MIN entonces
ALT_MIN AL_ALT
Finsi
Finsi
Finsi
Leer F.alum
Finmientras
IMPRIME Altura máxima ALT_MAX
IMPRIME Altura mínima ALT_MIN
Cerrar F.alum
Fin.
Utilizando el fichero anterior. Realizar un ordinograma para obtener dos ficheros secuenciales de salida, uno
de alumnos aprobados y otro de alumnos suspensos, que tendrá la siguiente descripción:
AP_NOM AP_DIR AP_NOT AP_CUR
A(30) X(30) 9(2) X(4)
SU_NOM SU_DIR SU−NOT SU_CUR
A(30) X(30) 9(2) X(4)
INICIO
Variables:
F.alum fichero secuencial
R.alum
AL_NOM: Alfabético, 30
AL_DIR: Alfanumérico, 30
AL_EDAD: Numérico, 2
AL_NOT: Numérico, 2
AL_CUR: Alfanumérico,4
49
50. AL_ALT: Numérico, 3
F.aprova: fichero secuencial
R.aprova
AP_NOM: Alfabético,30
AP_DIR: Alfanumérico, 30
AP_NOT: Numérico, 2
AP_CUR: Alfanumérico,4
F_SUSP: fichero secuencial
R_F SUSP
SU_NOM:Alfabético,30
SU_DIR: Alfanumérico, 30
SU_NOT: Num, 2
SU_CUR: alfanumérico,4
Abrir de entrada: F.alum
Abrir de salida: F.alum, F.sup
Leer F.alum
Mientras no F.F F.alum hacer
Si AL_NOT <5 entonces
Procedimiento CAMPOS
Grabar R.SUP
Sino
Procedimiento CAMPOS II
Grabar R.APRO
Finsi
Finmientras
Fin
50
51. PROCEDIMIENTO CAMPOS
Inicio
SU_NOM AL_NOM
SU_DIR AL_DIR
SU_NOT SU_NOT
SU_CUR SU_CUR
Fin
POCEDIMIENTO CAMPOS II
Inicio:
AP_NOM AP_NOM
AP_DIR AP_DIR
AP_NOT AP_NOM
AP_CUR AP_CUR
Fin
Utilizando el fichero anterior, realizar un ordinograma para calcular e imprimir el nombre y la edad del primer
alumno que, siendo de 2º BUP, con una nota no inferior a 7 y teniendo una estatura superior a 180 cm,sea el
más joven.
ALGORITMO:
INICIO
Variables:
F.alum fichero secuencial
Ralum
AL_NOM: alfabético,30
AL_DIR: alfanumérico, 30
AL_EDAD: numérico, 2
AL_NOT: numérico,2
AL_CUR: alfanumérico,4
51
52. AL_ALT: numérico,3
C_DOS: numérico,2
C_COU: numérico, 4
T_NOTA: numérico, 4
T_EDAD: numérico,2
MED_NOT: numérico,2
MED_EDAD: numérico,2
AUX_NOM
MIN_EDAD
Abrir de entrada F.alum
Min edad=90
Leer F.alum
Mientras no F.F F.alum hacer
Si AL_CUR= 2º BUP Entonces
Si AL_ALT>180 Entonces
Si AL_NOT>=7 Entonces
Si AL_EDAD <MIN_EDAD Entonces
MIN_EDAD AL_EDAD
AUX_NOM AL_NOM
Finsi
Finsi
Finsi
Finsi
Finmientras
FIN
Crear un fichero secuencial (FAGENDA), introduciendo el contenido de los campos de los registros desde el
teclado. Su descripción es la siguiente:
52
53. AG_NOM AG_DIR AG_TEL
A(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 del
registro.
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 entre
comillas.
En un centro de enseñanza se tiene un fichero secuencial de alumnos, FALUM, cuyos registros se componen
de los siguientes campos:
AL_NOM AL_DIR AL_EDAD AL_NOT AL_CUR AL_ALT
A(30) X(30) 9(2) 9(2) X(4) 9(3)
Siendo el campo AL_ALT la estatura en centímetros del alumno.
TEMA 9
9. FICHEROS RELATIVOS
9.1 Organización
9.2 Tipos de Acceso
9.3 Tablas de Gestión
9.4 Operaciones
9.5 Transformación de Claves
9.7 Método Hashing (o dispersión)
9.1. ORGANIZACION
Son ficheros a los que se puede acceder directamente a cada uno de sus registros, para ello se organiza la zona
de fichero en dos partes:
• Parte primaria o principal: Donde se graban todos los registros no
repetidos bien sean creación o actualización.
53
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 distinta
en cada sistema.
Un fichero relativo se puede considerar como un conjunto de "casillas" del mismo tipo y tamaño, numeradas
consecutivamente de 1 a N.
Son ficheros caracterizados porque:
a) El almacenamiento de los registros sobre el soporte seleccionado (memoria auxiliar) se realiza a
través de un identificativo o clave que indica por una parte la posición del registro dentro del fichero y
por otra la posición de memoria donde está ubicado.
b) La dirección de almacenamiento del registro dentro del soporte utilizado se obtiene siempre del
identificativo 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 de
transformación (matemáticas generalmente) para obtener valores enteros positivos que facilitan su posterior
manejo y tratamiento.
2. Si la clave es numérica se aplica un algoritmo de transformación para obtener un rango de valores
comprendido entre el intervalo de valores de las direcciones de memoria disponibles, estableciendo así una
relació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 de
almacenamiento 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 de
forma implícita que indica dónde hay que grabar ese registro, las claves son directas cuando no necesitan
transformación para utilizarse e indirectas cuando hay que transformarlas.
ORGANIZACION DIRECTA
Este tipo de organización, se da en aquellos casos en los que las claves sean numéricas, estableciéndose una
correspondencia directa entre dirección lógica y dirección física. Al ser la clave de tipo numérico, no surgen
problemas, pues los registros se ubican en direcciones de memoria de tipo numérico entero, lo que facilita
establecer una correspondencia directa entre la clave y la dirección de memoria, de todo ello, podemos
deducir que la secuencia lógica de almacenamiento de los registros en el fichero coincide con la secuencia
fí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. almacenamiento, por lo que nunca podemos almacenar un registro cuya clave esté por encima de los límites
máximos del fichero.
Utilizando este tipo de organización, cada dirección sólo puede ser ocupada por un registro. El hecho de
existir más de un registro con la misma clave es causa de error ya que ello supondría la posibilidad de
almacenar en el fichero un registro repetido, lo cual no es posible en este tipo de organización. Este hecho
recibe 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 secuencial
sobre los datos del fichero, estamos obligados a analizar posición por posición desde la primera hasta la última
pudiendo ocurrir que algunas posiciones estén vacías, lo cual implica una considerable pérdida de tiempo, por
lo 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 surgen
debido a los identificativos de los registros que se desean almacenar después de haber sido introducidos en el
fichero indican posiciones de almacenamiento probablemente no contiguas, lo que implica un
desaprovechamiento del soporte de almacenamiento o memoria auxiliar, respecto al número real de registros
almacenados.
c) Se deben dar soluciones al problema de los sinónimos o colisiones.
ORGANIZACION ALEATORIA O INDIRECTA
Esta variante de la organización relativa se dan en aquellos casos en los que la clave debe sufrir un proceso de
conversión que permita obtener un valor numérico entero facilitando así la correspondencia directa que se
debe establecer entre la clave y la dirección de memoria. Este caso, la secuencia lógica de almacenamiento no
coincide 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 para
el almacenamiento de la información, por este motivo nunca podemos almacenar registros cuya dirección de
almacenamiento esté por encima de los límites máximos del fichero y, si así ocurriese, resultaría que el
algoritmo 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 es
causa de error, ya que ello se debe a que el algoritmo de transformación que hemos aplicado al identificativo o
clave (en este caso alfabética o alfanumérica) ha generado con distinto identificativos la misma posición de
almacenamiento en memoria, lo cual sí es posible en esta variante de organización relativa. Este hecho recibe
el nombre de sinónimo o colisión.
55
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 de
hueco 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 el
almacenamiento y tratamiento de sinónimos corren a cuenta del programador, siendo responsabilidad de este
aplicar 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 ACCESO
Al igual que en los ficheros de organización secuencial indexada, en un fichero con organización directa
pueden utilizarse fundamentalmente dos tipos de acceso: acceso secuencial y acceso directo. Algunos
lenguajes admiten también el acceso dinámico.
ACCESO SECUENCIAL
Consiste 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 mediante
programa.
ACCESO DIRECTO
Permite 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á la
posició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 realizadas
sobre un fichero relativo, hay que preguntar si se ha podido ejecutar la instrucción o no, para tomar las
medidas oportunas en cada caso.
ACCESO DINÁMICO
Consiste en acceder directamente a una determinada posición y a partir de ella recorrer secuencialmente un
grupo de registros.
56
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 con
organización secuencial indexada, la diferencia fundamental estriba en la forma en la que el sistema accede a
un determinado registro:
− Si en la creación del fichero no se utilizó algoritmo de
transformació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á el
mismo algoritmo que en la creación, para obtener la posición relativa de dicho registro.
9.3 TABLAS DE GESTIÓN EN PARA ARCHIVOS
RELATIVOS EN C
Este programa pasa un fichero secuencial a uno DIRECTO, Los sinónimos de encuentran entre el
registro 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. 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. /* 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 DEBE
REORGANIZARSE ZONA DE SINONIMOS
LLENA);
59
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')
else
if(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);
}
else
puts (error de campo(direc.ocupado));
}
fread(&secu,sizeof(struct secuencial),1,fs);
60
61. }
do
{
clrscr();
puts(INTRODUZCA EL CODIGO DEL REGISTRO A
VISUALIZAR);
/*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 0
E 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. {
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 DETERIORADO
DEBE REORGANIZARSE ZOPNA
DE SINONIMOS);
exit(1);
}
/*retrocedemos un lugar para volver a la posición del registro*/
62
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 OPERACIONES
Seguidamente estudiaremos las diferentes operaciones que podemos realizar sobre ficheros con independencia
del tipo de organización o acceso que hayamos seleccionado.
CREACIÓN
Para 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. Esto
requiere 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 dichos
datos.
APERTURA
Para poder trabajar con un fichero, este debe estar abierto, permitiendo así el acceso a los datos, dando la
posibilidad de realizar sobre ellos las operaciones de lectura y escritura necesarias. Como norma general, un
fichero nunca deberá permanecer abierto más tiempo del estrictamente necesario entendiendo como tal el
periodo de tiempo empleado para la realización de cualquier operación de lectura o escritura sobre él.
CIERRE
Una vez finalizado las operaciones efectuadas sobre el fichero, éste debe permanecer cerrado para limitar el
acceso a los datos y evitar así un posible deterioro o pérdida de información.
ACTUALIZACIÓN
63
64. Esta operación permite tener actualizado el fichero mediante la escritura de nuevos registros y la eliminación
o modificación de los ya existentes. Esta operación puede afectar a partes o la totalidad de los registros.
ORDENACIÓN O CLASIFICACIÓN
Esta operación permite establecer un orden entre los registros almacenados dentro del fichero. La ordenación
puede ser ascendente o descendente.
COPIADO O DUPLICADO
Esta operación parte de un fichero origen y crea un nuevo fichero destino con la misma estructura y contenido
que el primero. Dicha operación deja intacto el fichero original.
CONCATENACIÓN
Se parte de la existencia de dos ficheros con la misma estructura, de manera que la concatenación de
ambos crea un tercer fichero de igual estructura y cuya información es la suma del contenido del
primer fichero más el contenido del segundo. Dicha operación no afecta a los ficheros originales.
FUSIÓN O MEZCLA
Esta operación permite obtener de dos o más ficheros con la misma clasificación y estructura interna de sus
datos, un nuevo fichero que contenga dos registros de todos los anteriores sin alterar la ordenación que éstos
tenían establecida. Dicha operación no afecta a los ficheros que intervienen en el proceso de fusión.
INTERSECCIÓN
Consiste en crear un nuevo fichero partiendo de los registros comunes de dos o más ficheros con la misma
estructura.
PARTICIÓN O ROTURA
Esta operación permite obtener varios ficheros de uno inicial en función de alguno de las características
internas de sus campos.
COMPACTACIÓN O EMPAQUETAMIENTO
Esta operación permite la reorganización de los registros de un fichero eliminando los huecos libres
intermedios existentes entre ellos, normalmente ocasionados por la eliminación de registros.
CONSULTA
A través de las consultas es posible acceder a dos registros del fichero y conocer el contenido de sus campos.
BORRADO DE INSTRUCCIÓN
Es la operación inversa a la creación de un fichero, y en consecuencia una vez efectuada dicha operación se
pierde toda posibilidad de acceder a los datos previamente almacenados.
9.5 TRANSFORMACIÓN DE CLAVES
INTRODUCCIÓN
64
65. El identificativo o clave sirve para diferenciar unos registros de otros dentro de un mismo fichero. Este
identificativo es un campo, subcampo, conjunto de campos o conjunto de subcampos que identifican a cada
registro.
En general, los identificativos sirven para:
a) Introducir registros dentro del fichero recibiendo el nombre de identificativo de orden.
b) Localizar registros dentro de un fichero atendiendo a una determinada cualidad. En este caso le llamaremos
identificativo de búsqueda.
Generalmente, el identificativo forma parte del registro, es decir, constituye información dentro del registro y
actúa a la vez como identificativo de orden y como identificativo de búsqueda.
Los identificativos pueden ser de tres tipos:
− Numéricos.
− Alfabéticos.
− Alfanuméricos.
Los identificativos de tipo numérico se emplean principalmente en ficheros con organización relativa mientras
que los alfabéticos y alfanuméricos se utilizan en los indexados, aunque los tres tipos pueden utilizarse en
cualquiera de las organizaciones.
CONVERSIÓN DE IDENTIFICATIVOS EN FICHEROS RELATIVOS (DIRECTOS).
La utilización de métodos de cálculo de la dirección proporciona ventajas, aunque también presenta
inconvenientes tales como son la producción de sinónimos.
Es el usuario o programador el que elegirá el algoritmo de direccionamiento y además será el que decida el
lugar en el que deben almacenarse los registros.
A continuación se detallan una serie de técnicas de transformación de identificativos en direcciones físicas de
almacenamiento. Para ello utilizaremos identificativos monocampo. El contenido de ellos podrá ser numérico,
alfabético o alfanumérico.
Para que una transformación sea efectiva, es decir, para que un algoritmo de transformación sea válido, tiene
que cumplir una serie de requisitos, tales como tener una tasa de relleno superior al 80−85%. La fórmula de la
tasa de relleno es la siguiente:
Tasa de relleno =Número máximo de registros / 100
CONVERSIÓN DE IDENTIFICATIVOS NUMÉRICOS
Direccionamiento directo
El direccionamiento directo es más utilizado siempre y cuando el número total de registros a almacenar en el
fichero no sea demasiado grande y los identificativos de los registros tampoco sean muy grandes. La principal
característica de este método es la de no tener que realzar ningún cálculo para averiguar la dirección y la tasa
de relleno (ocupación del soporte) será el 100%.
65