SI STEMAS DE GESTI N GENERALIDADES SOBRE FICHEROS FICHEROS EN COBOL 2 CONCEPTOS PREVI OS CAMPO Es un conjunto de caracteres capaz de suministrar una determinada informacin referida a un concepto. REGISTRO Es un conjunto de campos referentes a una entidad particular. En definitiva, un registro lgico es una estructura de datos formada por uno o mas campos, que pueden ser de diferentes tipos y que a su vez, pueden estar compuesto por subcampos. FICHERO Es un conjunto de registros homogneos, almacenados en soporte externo, que presentan entre s una relacin lgica y que pueden ser consultados individualmente de forma iterativa y sistemtica. 2 FICHEROS EN COBOL 3 CONCEPTOS PREVI OS REGISTRO BUFFER Es un espacio de memoria interna que reserva el sistema para el intercambio de registros entre el fichero y el programa. CLAVE PRINCIPAL Es un campo o campos que identifican de manera nica un registro. No puede haber dos registros que contengan el mismo valor en el campo clave. REGISTRO FSICO Corresponde a la cantidad de informacin que se transfiere en cada operacin de lectura o escritura sobre un fichero. FACTOR DE BLOQUEO Es el nmero de registro lgicos que contiene cada registro fsico. FICHEROS EN COBOL 4 CONCEPTOS PREVI OS . REGISTRO1 REGISTRO2 REGISTRO3 CAMPOS REGISTROS FACTOR DE BLOQUE = 3 3 FICHEROS EN COBOL 5 CARACTER STI CAS Residencia en soportes de informacin externos. Gran capacidad de almacenamiento, tericamente ilimitada. La limitacin vendr dada por la capacidad del soporte de almacenamiento. Independencia de la informacin que almacenan con los programas que gestionarn esta informacin. Permanencia de la informacin almacenada. Portabilidad de los datos entre diferentes computadoras. FICHEROS EN COBOL 6 CLASI FI CACI N SEGN SU USO Archivos Permanentes Archivos de constantes. Archivos maestros. Archivos histricos. Archivos de Movimientos Altas. Bajas. Modificacin. Archivos de Trabajo. 4 FICHEROS EN COBOL 7 OPERACI ONES SOBRE FI CHEROS Creacin Actualizacin Clasificacin. Mezcla Particin Reorganizacin Listar o Consultar FICHEROS EN COBOL 8 ORGANI ZACI N SECUENCI AL Se almacenan los registros fsicamente en posiciones contiguas en el soporte auxiliar. El modo de acceso a este tipo de fichero es secuencial No permite otro tipo de acceso. Es de gran utilidad en ficheros con un elevado nmero de registros, que no requieren actualizarse con excesiva frecuencia. Presenta dos grandes problemas: Siempre que se actualice el fichero, se debe crear uno nuevo, ya que no es posible efectuar altas intermedias o bajas de registros sobre el propio fichero. Para acceder a un registro concreto, es necesario haber ledo previamente todos los registros anteriores. 5 FICHEROS EN COBOL 9 ORGANI ZACI N I NDEXADA Requiere estar almacenado en un soporte de acceso directo. Exige que todos los registros que formen el fichero contenga un campo que permite identificar cada registro de forma nica, no pudiendo existir dos registros que contengan el mismo valor en dicho campo. Este campo se denominar clave del fichero. Los registros se almacenarn en orden ascendente por el campo clave. La gestin interna de los ficheros secuenciales indexados depende del sistema en el que se desarrollen. FICHEROS EN COBOL 10 ORGANI ZACI N I NDEXADA rea primaria. Contiene fsicamente los datos de los registros. Los registros se graban, al crearse el fichero, en orden ascendente del campo clave. Tiene organizacin secuencial y est dividida dentro del soporte en varios grupos de igual tamao. rea de ndices. Es un archivo de organizacin secuencial, cuyos registros estarn formados por dos campos. El primero contiene la clave ms alta de los registros que componen el grupo, es decir, la clave de su ltimo registro. El segundo campo contiene la direccin absoluta del primer registro de ese grupo. rea de excedentes. Se denomina rea de overflow. Contiene los registros que se darn de alta en las actualizaciones 6 FICHEROS EN COBOL 11 ORGANI ZACI N I NDEXADA REG-4 B8 REG-3 B3 REG-2 A2 REG-1 A1 PISTA 01 CAMPO CLAVE REG-8 D5 REG-7 D2 REG-6 C9 REG-5 C5 PISTA 02 CAMPO CLAVE REG-12 F8 REG-11 F5 REG-10 E8 REG-9 E3 PISTA 03 CAMPO CLAVE REG-16 G9 REG-15 G8 REG-14 G7 REG-13 G1 PISTA 04 CAMPO CLAVE FICHEROS EN COBOL 12 ORGANI ZACI N I NDEXADA 04 G9 03 F8 02 D5 01 B8 REA DE NDICES CAMPO CLAVE REA DE EXCEDENTES 7 LENGUAJ E ORI ENTADO A SI STEMAS DE GESTI N FICHEROS SECUENCIALES FICHEROS EN COBOL 14 DEFI NI CI N Un fichero con organizacin secuencial, se caracteriza fundamentalmente por almacenar los registros fsicamente contiguos en el soporte auxiliar. Slo se puede acceder a sus registros de forma secuencial. . REGISTRO5 REGISTRO4 REGISTRO3 REGISTRO2 REGISTRO1 8 FICHEROS EN COBOL 15 DECLARACI N Y DESCRI PCI N Nombre del fichero interno: Es el nombre simblico dado al archivo. Dicho nombre se utilizar en el programa. Debe ser nico en el programa. Nombre del fichero externo: Es el nombre real que tiene el fichero en el Sistema Operativo. Dispositi vo: Dispositivo fsico en el cual ser ledo y/o escrito. Tipo de fichero: Organizacin del mismo Modo de acceso: Tipo de acceso al fichero. Factor de Blocaje: N de registros lgicos por cada registro fsico. Longitud del registro: N de caracteres del registro lgico del fichero. Nombre del registro: Es el nombre simblico dado al registro del fichero. Dicho nombre se utilizar en el programa. Descripcin del registro. Cmo est estructurada la informacin. FICHEROS EN COBOL 16 DECLARACI N EN COBOL ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT [OPTIONAL] nombre-de-fichero-interno ASSIGN TO dispositivo [nombre-de-fichero-externo] [[ORGANIZATION IS]][LINE] SEQUENTIAL] [ACCESS MODE IS SEQUENTIAL]. 9 FICHEROS EN COBOL 17 DECLARACI N EN COBOL ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT articulos ASSIGN TO DISK articulos.dat ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL. Descripcin A 35 L-CODIGO 16 Fecha de Recepcin (ddmmaa) N 0 6 FECHA-REC 10-15 Unidades en stock N 0 6 UNIDADES 4-9 Cdigo de Artculo A 3 CDIGO 1-3 DESCRIPCIN TIPO P.DEC BYTES NOMBRE SIMBLICO POSICION ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT articulos ASSIGN TO DISK articulos.dat. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT articulos ASSIGN TO DISK FICHEROS EN COBOL 18 DESCRI PCI N EN COBOL DATA DIVISION FILE SECTION FD nombre-de-fichero-interno [LABEL RECORD] [BLOCK CONTAINS] [RECORD CONTAINS] [DATA RECORD IS] Deben existir tantas FD como ficheros utilicemos. Como los ficheros y su declaracin estn ligadas a normas del S.O., es en esta seccin donde puede haber ms diferencias de un compilador a otro. El nombre de fichero que sigue a la clusula FDdebe ser el mismo que el especificado en la clusula SELECT. 10 FICHEROS EN COBOL 19 DESCRI PCI N EN COBOL Clusula LABEL. Esta clusula indica si los registros llevan o no etiquetas. Esta clusula no es obligatoria segn las normas ANS-85. y se utiliza OMITTEDpara los ficheros de impresoras y STANDARD para los ficheros contenidos en dispositivos de acceso directo (disco, disco flexible etc.). Clusula BLOCK CONTAINS. Los ficheros almacenados en disco se agrupan en un bloque para hacer ms eficiente la utilizacin del espacio y aumentar la velocidad de procesamiento. La clusula BLOCK CONTAINS especifica el nmero de registros lgicos en un registro fsico o bloque, o el nmero de caracteres contenidos en un registro. BLOCK CONTAINS [entero-1 TO] entero-2 {CHARACTERS/RECORDS} FICHEROS EN COBOL 20 DESCRI PCI N EN COBOL Clusula RECORDS CONTAINS. Especifica el tamao de los registros lgicos. RECORDS CONTAINS [entero-1 TO] entero-2 CHARACTERS Clusula DATA RECORD. Esta clusula es usada solo para documentacin. Los nombre de los registros que aparezcan en esta clusula deben ser los mismos que aparezcan en el nivel 01. DATA RECORD IS nombre de dato-1 11 FICHEROS EN COBOL 21 DESCRI PCI N EN COBOL Nombre del fichero interno: ARTICULOS *Nombre del fichero externo: ARTICULOS.DAT *Dispositivo: DISCO *Tipo de fichero: SECUENCIAL *Modo de acceso: SECUENCIAL Factor de Blocaje: 5 Longitud del registro: 50 Nombre del registro: REG-ARTICULOS Descripcin del registro: Descripcin A 35 L-CODIGO 16-51 Fecha de Recepcin (ddmmaa) N 0 6 FECHA-REC 10-15 Unidades en stock N 0 6 UNIDADES 4-9 Cdigo de Artculo A 3 CDIGO 1-3 DESCRIPCION TIPO P.DEC BYTES NOMBRE SIMBLICO POSICION FICHEROS EN COBOL 22 DESCRI PCI N EN COBOL DATA DIVISION. FILE SECTION. FD ARTICULO LABEL RECORD IS STANDARD BLOCK CONTAINS 5 RECORDS RECORD CONTAINS 50 CHARACTERS DATA RECORD IS REG-ARTICULO. 01 REG-ARTICULO. 02 CODIGO PIC 999. 02 UNIDADES PIC 9(6). 02 FECHA-REC PIC 9(6). 02 L-CODIGO PIC X(35). 12 FICHEROS EN COBOL 23 DESCRI PCI N EN COBOL FD FICHERO_TIEMPO_SEMANAL BLOCK CONTAINS 30 RECORDS RECORD CONTAINS 150 TO 200 CHARACTERS LABEL RECORDS ARE STANDARD DATA RECORDS ARE REGISTRO_TIEMPO_PERDIDO REGISTRO_TIEMPO_COMPENSADO. 01 REGISTRO_TIEMPO_PERDIDO. {descripcin de un registro lgico de 150 caracteres} 01 REGISTRO_TIEMPO_COMPENSADO. {descripcin de un registro lgico de 200 caracteres} FICHEROS EN COBOL 24 OPERACI ONES Apertura de fichero Abrir un fichero quiere decir dejarlo dispuesto para ser utilizado Todos los archivos empleados en un programa deben ser abiertos, previamente a su uso Modos de apertura de un fichero. Slo lectura: Coloca la cabeza lectora sobre el primer registro quedando el archivo preparado para ser ledo. Slo escritura: Coloca la cabeza de escritura a continuacin del ltimo registro escrito, quedando preparado para su grabacin. Si el fichero no exista lo crea y si exista borra su contenido. Para leer y escribir OPEN INPUT/OUTPUT/EXTEND/I-O nombre de fichero 13 FICHEROS EN COBOL 25 OPERACI ONES registro4 registro 3 registro 2 registro 1 CABEZA DE LECTURA registro4 registro 3 registro 2 registro 1 CABEZA DE LECTURA-ESCRITURA CABEZA DE ESCRITURA FICHEROS EN COBOL 26 OPERACI ONES Cierre de un fichero Libera el fichero. Coloca la marca especial fin de archivo que ser detectada al leer. El fichero queda a disposicin de cualquier programa que lo solicite. Cada fichero abierto por medio de OPEN, debe ser cerrado con CLOSE. Se pueden cerrar varios ficheros a la vez. CLOSE nombre de fichero. 14 FICHEROS EN COBOL 27 OPERACI ONES Lectura de un registro Coloca el contenido del registro apuntado por la cabeza lectora sobre la variable buffer del fichero, avanzando la cabeza lectora al siguiente registro. READ fichero [INTO identificador] [AT END sentencia] [END-READ] registro 3 . registro4 registro 3 registro 2 registro 1 FICHEROS EN COBOL 28 OPERACI ONES Escritura de un registro WRITE registro [FROM identif-1/literal] [END-WRITE] WRITE registro [FROM identif-1/literal] [BEFORE/AFTER ADVANCING TO LINE iden-3/ent-2 [ON NEXT nombre nemnico/PAGE [END-WRITE] datos . registro 3 registro 2 registro 1 15 FICHEROS EN COBOL 29 OPERACI ONES Reescritura de un registro Permite rescribir sobre el ltimo registro ledo. REWRITE registro [FROMIident/literal [END -REWRITE] identificador registro 3 registro 3 registro 2 registro 1 FICHEROS EN COBOL 30 NORMAS GENERALES DE USO Antes de realizar cualquier operacin con ficheros, stos se deben abrir. Al finalizar el proceso se deben cerrar. Todas las lecturas debern llevar condicin AT END. Los registros de un fichero sern tratados en este orden: Lectura de primer registro. Proceso repetitivo hasta el final del fichero, que comienza con proceso de registro y lectura del siguiente registro. 16 FICHEROS EN COBOL 31 LECTURA DE TODOS LOS REGI STROS Procesar registro puede ser algo sencillo que no conlleve realizar ninguna accin repetiti va o alternati va. O puede ser tan complicada que deba ser representada grficamente en el rbol programtico. Lo que debe quedar claro es que despus de procesar el registro ledo se debe realizar la lectura del registro siguiente Es importante destacar que es en la propia lectura de un registro cuando se detecta el FINAL del fichero. COBOL no tiene funcin standard para detectar el fin de fichero. Recuerda el formato del verbo READ. PROCESAR FICHERO PROCESAR REGISTRO P-PROCESAR FICHERO F-PROCESAR FICHERO ABRIR FICH LEER REG CERRAR FIC PROCESAR REG LEER REG FIN FICH FICHEROS EN COBOL 32 CREACI N FI CHERO CREAR FICHERO ESCRIBIR REGISTRO P-CREAR FICHERO F-CREAR FICHERO ABRIR FICH (ESCRIBIR) ACEPTAR EL PRIMER CAMPO CERRAR FIC ACEPTAR LOS DEMS CAMPOS ESCRIBIR REGISTRO ACEPTAR EL PRIMER CAMPO CAMPO1 =* 17 FICHEROS EN COBOL 33 RUPTURAS DE CONTROL Los registros de los ficheros secuenciales estn GRABADOS EN POSICIONES CONTIGUAS. No tiene en cuenta para su disposicin dentro del soporte el contenido de ninguno de sus campos. El fichero debe estar ORDENADO por uno o varios campos antes de procesar sus registros. Esta clasificacin es INDISPENSABLE cuando existen varios registros perteneciente a una misma entidad y SE DESEA LLEVAR A CABO el proceso de los mismos uno a continuacin de otro. Llamaremos CAMPO DE CONTROL, al campo por el cual debe ordenarse el fichero, y cuyo contenido es el mismo para un conjunto de registros (dichos registros pertenecern a la misma entidad). Al conjunto de registros cuyo contenido es el mismo en el campo de control se le denominar BLOQUE DE CONTROL. Cuando al recorrer un fichero, se lee un registro cuyo contenido del campo de control difiere del que tena el registro anterior, se dice que se ha producido una RUPTURA DE CONTROL. FICHEROS EN COBOL 34 RUPTURAS DE CONTROL En todos aquellos procesos que impliquen rupturas de control se debe tener en cuenta: Para saber si el campo de control del registro recin ledo tiene el mismo contenido que el registro anterior, ser necesario haber guardado en una variable auxiliar el contenido del campo de control del primer registro del bloque de control. Se debe reinicializar el valor de la variable auxiliar con el contenido del campo de control del nuevo registro para poder utilizarla como referencia en el bloque siguiente. En este punto se deben reinicializar las variables (si es que existen) para cada bloque (acumuladores....). La repeticin del conjunto de operaciones relativas a los registros pertenecientes al mismo bloque se realiza mediante la estructura Mientras, cuya condicin de salida ser, que el campo de control del registro ledo difiera del contenido de la variable auxiliar. Se deduce, por tanto, que en procesos de este tipo habr al menos tantas estructuras repetitivas como rupturas de control existan. 18 FICHEROS EN COBOL 35 RUPTURAS DE CONTROL Cierto almacn dispone de un fichero Nombre del fichero interno: FVENTAS Nombre del fichero externo: VENTAS.DAT Dispositivo: DISCO Tipo de fichero: SECUENCIAL Modo de acceso: SECUENCIAL Nombre del registro: REG-FVENTAS Descripcin del registro: Importe de la venta N 0 6 VT_IMP 10-15 Nmero de da N 0 2 VT_DIA 8-9 Nmero del mes N 0 2 VT-MES 6-7 Cdigo de vendedor A 5 VT_EMP 1-5 DESCRIPCIN TIPO P.DEC BYTES NOMBRE SIMBLICO POSICIN Deseamos obtener el total por vendedor, el total vendido por la empresa y el nmero de vendedores de la empresa. El fichero se supone ordenado por el campo VT_EMP. Cada empleado tendr tantos registros consecutivos como ventas haya realizado. FICHEROS EN COBOL 36 RUPTURAS DE CONTROL PROGRAMA TRATAR FICHERO RUPTURA P-PROGRAMA F-PROGRAMA P-TRATAR-FICHERO F-TRATAR-FICHERO FIN FICHERO FIN FICHERO O CAMBIO VENDEDOR T-VEND=0 AUX-VEND=VT-VEND Visualizar T-VEND T-EMPR =T-EMPR +T-VEND C-EMPLE =CEMPLE+1 T-VEND=T-VEND+VT-IMP leer registro de FVENTAS Abrir FVENTAS (lectura) T-EMPR =0 C-EMPLE =0 leer registro de FVENTAS Visualizar T-EMPR Visualizar C-EMPL Cerrar FVENTAS Campos de CONTROL: VT_EMP. Variables Auxiliares: T_VEND: Acumulador de Ventas por Vendedor. T_EMPR: Acumulador de Ventas de la Empresa. C_EMPR: Contador de empleados de la Empresa. AUX_VEN: Variable auxiliar para guardar el cdigo de vendedor. 19 FICHEROS EN COBOL 37 FUSI N DE FI CHEROS Si se dispone de varios ficheros secuenciales con la misma estructura y ordenados todos ellos por el mismo campo, la fusin de dichos ficheros consistir en obtener un nuevo fichero de salida, que ser la unin de todos ellos. Dicho fichero estar tambin ordenado por el mismo campo que los ficheros de partida. FUSIN FAGENDA94 FAGENDA95 FAGENDA96 FICHEROS EN COBOL 38 FUSI N DE FI CHEROS Ficheros de Entrada: Nombre del fichero interno: FAGENDA94 Nombre del fichero externo: AGENDA94.DAT Dispositivo: DISCO Tipo de fichero: SECUENCIAL Modo de acceso: SECUENCIAL Nombre del registro: REG-FAGEN94 Descripcin del registro: Direccin A 30 DI_CLIEN94 36-65 Nombre A 30 NO_CLIEN94 6-35 Cdigo de Cliente A 5 CO_CLIEN94 1-5 DESCRIPCION TIPO P.DEC BYTES NOMBRE SIMBLICO POSICION 20 FICHEROS EN COBOL 39 FUSI N DE FI CHEROS Ficheros de Entrada: Nombre del fichero interno: FAGENDA95 Nombre del fichero externo: AGENDA95.DAT Dispositivo: DISCO Tipo de fichero: SECUENCIAL Modo de acceso: SECUENCIAL Nombre del registro: REG-FAGEN95 Descripcin del registro: Direccin A 30 DI_CLIEN95 36-65 Nombre A 30 NO_CLIEN95 6-35 Cdigo de Cliente A 5 CO_CLIEN95 1-5 DESCRIPCION TIPO P.DEC BYTES NOMBRE SIMBLICO POSICION FICHEROS EN COBOL 40 FUSI N DE FI CHEROS Ficheros de Salida: Nombre del fichero interno: FAGENDA96 Nombre del fichero externo: AGENDA96.DAT Dispositivo: DISCO Tipo de fichero: SECUENCIAL Modo de acceso: SECUENCIAL Nombre del registro: REG-FAGEN96 Descripcin del registro: Direccin A 30 DI_CLIEN94 36-65 Nombre A 30 NO_CLIEN96 6-35 Cdigo de Cliente A 5 CO_CLIEN96 1-5 DESCRIPCION TIPO P.DEC BYTES NOMBRE SIMBLICO POSICION Para poder llevar a cabo la fusin de ambos ficheros ser obligatorio que ambos ficheros estn ordenados por un mismo campo, en este caso los ficheros de partida estarn ordenados por el CDIGO DE CLIENTE. 21 FICHEROS EN COBOL 41 FUSI N DE FI CHEROS PROGRAMA FUSIN P-PROGRAMA 1 2 F-PROGRAMA MENOR MAYOR IGUAL NO-MENOR R1 C1 C2 (1) (2) (3) (4) (7) FICHEROS EN COBOL 42 FUSI N DE FI CHEROS CO_CLIEN94 >CO_CLIEN95 C2 CO_CLIEN94 <CO_CLIEN95 C1 Fin de Fagenda95 R3 Fin de Fagenda94 R2 Fin de Fagenda94 o bien fin de Fagenda95 R1 1 TERMINAR94 2 TERMINAR95 R2 R3 (5) (6) 22 FICHEROS EN COBOL 43 FUSI N DE FI CHEROS CERRAR FICHEROS (7) MOVER LOS CAMPOS DE FAGENDA95 A FAGENDA96 GRABAR EN FAGENDA96 LEER REG-FAGENDA95 (6) MOVER LOS CAMPOS DE FAGENDA94 A FAGENDA96 GRABAR EN FAGENDA96 LEER REG-FAGENDA94 (5) MOVER LOS CAMPOS DE FAGENDA95 A FAGENDA96 GRABAR EN FAGENDA96 LEER REG-FAGENDA94 LEER REG-FAGENDA95 (4) MOVER LOS CAMPOS DE FAGENDA95 A FAGENDA96 GRABAR EN FAGENDA96 LEER REG-FAGENDA95 (3) MOVER LOS CAMPOS DE FAGENDA94 A FAGENDA96 GRABAR EN FAGENDA96 LEER REG-FAGENDA94 (2) ABRIR FAGENDA94 (L) ABRIR FAGENDA95(L) ABRIR FAGENDA96(E) LEER REG-FAGENDA94 LEER REG-FAGENDA95 (1) FICHEROS EN COBOL 44 FUSI N DE FI CHEROS PROGRAMA FUSIN P-PROGRAMA F-PROGRAMA MENOR MAYOR IGUAL NO-MENOR R1 C1 C2 (1) (2) CO_CLIEN94 >CO_CLIEN95 C2 CO_CLIEN94 <CO_CLIEN95 C1 CO_CLIEN94 = HIGH-VALUE y CO_CLIEN95 = HIGH-VALUE R1 Mtodo De HIGH-VALUE READ REG-FAGENDA94 AT END MOVE HIGH-VALUE TO CO_CLIEN94 23 FICHEROS EN COBOL 45 FUSI N DE FI CHEROS CERRAR FICHEROS (5) MOVER LOS CAMPOS DE FAGENDA95 A FAGENDA96 GRABAR EN FAGENDA96 LEER REG-FAGENDA94 LEER REG-FAGENDA95 (4) MOVER LOS CAMPOS DE FAGENDA95 A FAGENDA96 GRABAR EN FAGENDA96 LEER REG-FAGENDA95 (3) MOVER LOS CAMPOS DE FAGENDA94 A FAGENDA96 GRABAR EN FAGENDA96 LEER REG-FAGENDA94 (2) ABRIR FAGENDA94 (L) ABRIR FAGENDA95(L) ABRIR FAGENDA96(E) LEER REG-FAGENDA94 LEER REG-FAGENDA95 (1) FICHEROS EN COBOL 46 ACTUALI ZACI N DE FI CHEROS En Gestin es muy frecuente tener un fichero maestro, es decir, aqul que guarda la informacin fundamental y de alguna forma es permanente. Para poder tener dicho fichero actualizado, es necesario realizar con periodicidad algunas de las siguientes operaciones: ALTAS: Insertar registros nuevos en el fichero. BAJAS: Eliminar registros del fichero. MODIFICACIONES: Modificar el contenido de uno o ms campos de algunos registros del fichero. El proceso de actualizacin consistir en ENFRENTAR los ficheros maestro y movimientos, con cierta periodicidad, y obtener como resultado un NUEVO MAESTRO actualizado. Para que esto sea posible ambos ficheros (maestro y movimientos) deben estar ordenados por el mismo campo. 24 FICHEROS EN COBOL 47 ACTUALI ZACI N DE FI CHEROS Si el fichero Maestro tiene la siguiente estructura: CAMPO1-CAMPO2-CAMPO3- CAMPO4 El fichero de movimientos contendr la estructura siguiente: TIPO-MVTO-CAMPO1-CAMPO2- CAMPO3-CAMPO4 Donde: TIPO-MVTO contendr una constante para indicar si el registro se debe dar de alta, modificar o eliminar. Ambos ficheros debern estar ordenados por un mismo campo, por ejemplo, CAMPO1. MAESTRO MVTOS NUEVO MAESTRO ERRORES ACTUALIZACIN LENGUAJ E ORI ENTADO A SI STEMAS DE GESTI N FICHEROS INDEXADOS 25 FICHEROS EN COBOL 49 DECLARACI N EN COBOL ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT [OPTIONAL] nombre-de-fichero-interno ASSIGN TO dispositivo [nombre-de-fichero-externo] ORGANIZATION IS INDEXED ACCESS MODE IS SEQUENTIAL/RANDOM/DYNAMIC. RECORD KEY IS nombre-dato-1 [ALTERNATE RECORD KEY IS nombre-dato-2] [WITH DUPLICATES] FICHEROS EN COBOL 50 DECLARACI N EN COBOL La instruccin ORGANIZATION especifica que ste es un archivo con ndice. La clusula ACCESS MODE especifica la forma de tener acceso a los registros en el archivo. IS SEQUENTIAL, especifica que se tiene acceso a los registros en orden ascendente de la clave del registro. La omisin de la clusula ACCESS indica que el archivo tendr acceso secuencial. IS RANDOM, especifica que el orden en el que se tiene acceso a los registros puede ser controlado por el programador (acceso al azar). IS DYNAMIC permite al programador cambiar de acceso secuencial al azar. 26 FICHEROS EN COBOL 51 DECLARACI N EN COBOL La clusula RECORD KEY indica que el fichero tendr como clave el campo de su estructura referenciado por el nombre de datos especificado a continuacin. Dicho campo debe ser alfanumrico y debe ser un campo en el registro del archivo. La opcin ALTERNATE RECORD KEY especifica una clave secundaria que es una clave de registro alterna para el archivo. Cuando se emplean claves secundarias, podemos tener acceso a los registros con base en la clave primaria especificada en RECORD KEY o en base en a la especificada en ALTERNATE KEY. El fichero, siempre se ordena respecto a la clave primaria. Si se especifica la clusula DUPLICATES, se indica que el valor de la clave alternativa puede estar duplicado. FICHEROS EN COBOL 52 DECLARACI N EN COBOL Nombre del fichero interno: ARTCULOS Nombre del fichero externo: ARTICULOS.DAT Dispositivo: DISCO Tipo de fichero: INDEXADO Modo de acceso: SECUENCIAL Nombre del registro: REG-ARTICULOS Clave primaria del fichero: CDIGO. Nombre A 35 NOMBRE 16 Fecha de Recepcin (ddmmaa) N 0 6 FECHA-REC 10-15 Unidades en stock N 0 6 UNIDADES 4-9 Cdigo de Artculo A 3 CDIGO 1-3 DESCRIPCIN TIPO P.DE C BYTES NOMBRE SIMBLICO POSICIN 27 FICHEROS EN COBOL 53 DECLARACI N EN COBOL ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT articulos ASSIGN TO DISK articulos.dat ORGANIZATION IS INDEXED ACCESS MODE IS SEQUENTIAL RECORD KEY IS CDIGO. FICHEROS EN COBOL 54 DESCRI PCI N EN COBOL Se describen en la DATA DIVISION, en la seccin FILE SECTION a travs de la clusula FD(File Descripcion), Igual que los archivos secuenciales. Uno de los campos de la estructura del fichero debe ser el declarado en la clusula RECORD KEY. 28 FICHEROS EN COBOL 55 OPERACI ONES Apertura de fichero con ndice OPEN INPUT/OUTPUT/I-O nombre de fichero Cierre de un fichero con ndice CLOSE nombre de fichero FICHEROS EN COBOL 56 OPERACI ONES X X X X X X X X READ WRITE REWRITE START DELETE DYNAMIC X X X X X X READ WRITE REWRITE START DELETE RANDOM X X X X X X X READ WRITE REWRITE START DELETE SEQUENTIAL I/O OUTPUT INPUT INSTRUCCIN OPERACIONES DEPENDIENTE DEL MODO DE APERTURA Y MODO DE ACCESO 29 FICHEROS EN COBOL 57 OPERACI ONES Lectura de registros Si el modo de acceso es SEQUENTIAL. Si el modo de acceso es RANDOM. READ fichero [INTO identificador] [AT END sentencia] [END-READ] READ fichero [INTO identificador] KEY IS nombre-de-dato [INVALID KEY sentencia] [END-READ] FICHEROS EN COBOL 58 OPERACI ONES Lectura de registros Si el modo de acceso es DYNAMIC. READ fichero NEXT RECORD [INTO identificador] [AT END sentencia] [END-READ] READ fichero [INTO identificador] KEY IS nombre-de-dato [INVALID KEY sentencia] [END-READ] 30 FICHEROS EN COBOL 59 OPERACI ONES Escritura de Registros La condicin INVALID KEY es verdadera si: El fichero est abierto en modo OUTPUT y el valor de la clave primaria no es mayor que el valor de la clave primaria para del registro anterior.. El fichero est abierto en modo I/O, y el valor de la clave primaria es igual al valor de la clave primaria de un registro que ya existe en el fichero. Se intenta escribir ms registros que los que se pueden acomodar en el almacenamiento disponible en disco. WRITE nombre-de-registro [FROM identificador] [INVALID KEY sentencia] [END-WRITE] FICHEROS EN COBOL 60 OPERACI ONES Reescritura de Registros Esta operacin consiste en reemplazar el contenido de un registro existente en el fichero. En el momento de la ejecucin de esta operacin el fichero debe estar abierto en modo I/O. El registro que se reemplazar es aquel cuya clave concuerda con el valor de la clave primaria. REWRITE nombre-de-registro [FROM identificador] [INVALID KEY sentencia] [END-REWRITE] 31 FICHEROS EN COBOL 61 OPERACI ONES La condicin INVALIDKEY se cumple: Cuando el valor de la clave en el registro que se va a reemplazar no concuerda con el valor de la clave del ltimo registro ledo. Cuando el valor de la clave no es igual a la clave de ningn registro existente en el fichero. REWRITE nombre-de-registro [FROM identificador] [INVALID KEY sentencia] [END-REWRITE] FICHEROS EN COBOL 62 OPERACI ONES Borrado de Registros Esta operacin elimina lgicamente un registro de un archivo secuencial con ndice. DELETE nombre-de-fichero [FROM identificador] [INVALID KEY sentencia] [END-DELETE] 32 FICHEROS EN COBOL 63 OPERACI ONES En el momento de la ejecucin de esta operacin el fichero debe estar abierto en modo I/O, ya que debe ir precedida por una instruccin READsatisfactoria. Si el archivo es declarado con acceso RANDOMo DYNAMIC, la condicin INVALIDKEY, se cumple: Cuando el archivo no contiene un registro cuyo valor de la clave primaria concuerde con el valor de la clave del registro que se desea borrar. DELETE nombre-de-fichero [FROM identificador] [INVALID KEY sentencia] [END-DELETE] FICHEROS EN COBOL 64 OPERACI ONES Recuperacin secuencial de registros Permite recuperar secuencialmente los registros desde una posicin diferente al principio del fichero. IS EQUAL TO IS GREATER THAN START nombre-de-fichero KEY IS NOT LESS THAN nombre-de-dato IS GREATER THAN OR EQUAL TO [INVALID KEY sentencia] [END-START] 33 FICHEROS EN COBOL 65 OPERACI ONES El archivo debe tener acceso en modo SEQUENTIAL o DYNAMIC. El archivo debe estar abierto en modo INPUT o I/O. El verbo START se posiciona en el primer registros cuya clave satisface la condicin KEY especificada. El nombre-de-dato especificado puede ser una clave (especificada como RECORD KEY o ALTERNATE RECORD KEY) o la parte inicial de la clave. La condicin INVALID KEY es verdadera si la condicin especificada no es satisfecha por ningn registro. FICHEROS EN COBOL 66 CREACI N FI CHERO I NDEXADO A la hora de crear un fichero secuencial indexado, es conveniente grabar sus registros mediante acceso secuencial, en orden creciente de claves. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT fuente ASSIGN TO DISK fuente.dat SELECT articulos ASSIGN TO DISK articulos.dat ORGANIZATION IS INDEXED ACCESS MODE IS SEQUENTIAL RECORD KEY IS CDIGO. 34 FICHEROS EN COBOL 67 CREACI N FI CHERO I NDEXADO DATA DIVISION: FILE SECTION. FD FUENTE DATA RECORD IS REG-FUENTE. 01 REG-FUENTE. 02 COD-FUENTE PIC 999. 02 MAS-DATOS-FUENTE PIC X(47). FD ARTICULOS DATA RECORD IS REG-ARTICULO. 01 REG-ARTICULO. 02 CDIGO PIC XXX. 02 MAS-DATOS PIC X(47). FICHEROS EN COBOL 68 CREACI N FI CHERO I NDEXADO CREAR FICHERO ESCRIBIR REGISTRO P-CREAR FICHERO F-CREAR FICHERO ABRIR FUENTE (LEER) ABRIR ARTICULOS (ESCRIBIR LEER FUENTE CERRAR FICHEROS MOVER REG-FUENTE A REG- ARTICULOS ESCRIBIR EN ARTICULOS SI NO HAY ERROR LEER FUENTE FIN FICHERO FUENTE 35 FICHEROS EN COBOL 69 CREACI N FI CHERO I NDEXADO MOVE COD-FUENTE TO CDIGO. MOVE MAS-DATOS-FUENTE TO MAS-DATOS. WRITE REG-ARTICULOS INVALID KEY PERFORM ERROR. READ FUENTE AT END MOVE si TO FIN-FICHERO. CDIGO est declarado como RECORD KEY en la instruccin SELECT del fichero ARTICULOS. La condicin INVALIDKEY es verdadera si la clave del registro sobre el que se va a escribir es menor que la clave del registro anterior. FICHEROS EN COBOL 70 MANTENI MI ENTO FI CHERO I NDEXADO Actualizar un fichero consiste en aadir al mismo los registros que sean alta, eliminar los que sean baja y modificar ciertos campos de algunos registros. Cuando el fichero maestro tiene organizacin secuencial indexada, las actualizaciones se pueden realizar sobre el mismo fichero, ya que: Se le pueden aadir registros que irn al rea de excedentes. Se pueden modificar campos (nunca la clave) de sus registros volviendo a grabar el registro sobre si mismo. Se pueden dar de baja registros. 36 FICHEROS EN COBOL 71 ACTUALI ZACI N I NDEXADO DESDE UN FI CHERO DE MOVI MI ENTOS Consiste en ir almacenando, en un fichero secuencial de movimientos, durante un periodo de tiempo, todas las altas, bajas y modificaciones que se produzcan sobre los registros de un fichero secuencial indexado para su posterior actualizacin. Este proceso se denomina por lotes. ACTUALIZACIN MAESTRO MOVIMIENTOS FICHEROS EN COBOL 72 ACTUALI ZACI N I NDEXADO DESDE UN FI CHERO DE MOVI MI ENTOS Si el fichero de movimientos est ordenado de forma ascendente por el campo clave, y el nmero de registros para actualizar del maestro es grande en comparacin con el nmero de registros del fichero, puede ser conveniente tratar al fichero secuencial indexado como un secuencial. Si el fichero de movimientos no est ordenado, o el nmero de registros para actualizar del maestro es pequeo en comparacin con el nmero de registros del fichero, entonces la actualizacin se realiza leyendo secuencialmente el fichero de movimientos, accediendo al fichero indexado por el campo clave, y realizando la operacin de actualizacin correspondiente.