En este tema, aprenderemos sobre el procesamiento de archivos relativos en COBOL. Los archivos relativos son una estructura de almacenamiento de datos que permite el acceso directo a registros mediante un número de registro relativo. Este tipo de archivo es útil cuando se necesita acceso rápido y directo a registros específicos.
Conceptos Clave
- Archivo Relativo: Un archivo en el que los registros se identifican por un número de registro relativo (RRN - Relative Record Number).
- Acceso Directo: Permite acceder a un registro específico directamente sin tener que leer todos los registros anteriores.
- Acceso Secuencial: Permite leer los registros en el orden en que están almacenados.
Estructura de un Archivo Relativo
Un archivo relativo se define en la sección FILE-CONTROL y se describe en la sección DATA DIVISION. Aquí hay un ejemplo básico de cómo se define un archivo relativo en COBOL:
IDENTIFICATION DIVISION. PROGRAM-ID. RelativeFileExample. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT REL-FILE ASSIGN TO "relative.dat" ORGANIZATION IS RELATIVE ACCESS MODE IS RANDOM RECORD KEY IS REL-KEY FILE STATUS IS FILE-STATUS. DATA DIVISION. FILE SECTION. FD REL-FILE. 01 REL-RECORD. 05 REL-KEY PIC 9(4). 05 REL-DATA PIC X(20). WORKING-STORAGE SECTION. 01 FILE-STATUS PIC XX. 01 WS-REL-KEY PIC 9(4). 01 WS-REL-DATA PIC X(20). PROCEDURE DIVISION. OPEN OUTPUT REL-FILE MOVE 1 TO WS-REL-KEY MOVE "First Record" TO WS-REL-DATA WRITE REL-RECORD INVALID KEY DISPLAY "Error writing record" END-WRITE CLOSE REL-FILE STOP RUN.
Explicación del Código
- FILE-CONTROL: Define el archivo relativo
REL-FILE
y especifica su organización como relativa. - FILE SECTION: Describe la estructura del registro en el archivo relativo.
- WORKING-STORAGE SECTION: Define las variables de trabajo, incluyendo el estado del archivo y los campos de datos.
- PROCEDURE DIVISION: Contiene la lógica del programa para abrir el archivo, escribir un registro y cerrar el archivo.
Operaciones Básicas
Escribir en un Archivo Relativo
Para escribir en un archivo relativo, se utiliza la sentencia WRITE
junto con la clave relativa:
MOVE 1 TO WS-REL-KEY MOVE "First Record" TO WS-REL-DATA WRITE REL-RECORD INVALID KEY DISPLAY "Error writing record" END-WRITE
Leer de un Archivo Relativo
Para leer un registro específico, se utiliza la sentencia READ
con la clave relativa:
Actualizar un Registro
Para actualizar un registro, primero se lee el registro, se modifica y luego se reescribe:
MOVE 1 TO WS-REL-KEY READ REL-FILE INVALID KEY DISPLAY "Record not found" END-READ IF FILE-STATUS = "00" MOVE "Updated Record" TO REL-DATA REWRITE REL-RECORD INVALID KEY DISPLAY "Error updating record" END-REWRITE END-IF
Eliminar un Registro
Para eliminar un registro, se utiliza la sentencia DELETE
:
Ejercicio Práctico
Ejercicio
- Crea un programa COBOL que:
- Defina un archivo relativo.
- Escriba tres registros en el archivo.
- Lea y muestre el segundo registro.
- Actualice el tercer registro.
- Elimine el primer registro.
Solución
IDENTIFICATION DIVISION. PROGRAM-ID. RelativeFileExercise. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT REL-FILE ASSIGN TO "relative.dat" ORGANIZATION IS RELATIVE ACCESS MODE IS RANDOM RECORD KEY IS REL-KEY FILE STATUS IS FILE-STATUS. DATA DIVISION. FILE SECTION. FD REL-FILE. 01 REL-RECORD. 05 REL-KEY PIC 9(4). 05 REL-DATA PIC X(20). WORKING-STORAGE SECTION. 01 FILE-STATUS PIC XX. 01 WS-REL-KEY PIC 9(4). 01 WS-REL-DATA PIC X(20). PROCEDURE DIVISION. OPEN OUTPUT REL-FILE MOVE 1 TO WS-REL-KEY MOVE "First Record" TO WS-REL-DATA WRITE REL-RECORD INVALID KEY DISPLAY "Error writing record" END-WRITE MOVE 2 TO WS-REL-KEY MOVE "Second Record" TO WS-REL-DATA WRITE REL-RECORD INVALID KEY DISPLAY "Error writing record" END-WRITE MOVE 3 TO WS-REL-KEY MOVE "Third Record" TO WS-REL-DATA WRITE REL-RECORD INVALID KEY DISPLAY "Error writing record" END-WRITE CLOSE REL-FILE OPEN I-O REL-FILE MOVE 2 TO WS-REL-KEY READ REL-FILE INVALID KEY DISPLAY "Record not found" END-READ IF FILE-STATUS = "00" DISPLAY "Second Record: " REL-DATA END-IF MOVE 3 TO WS-REL-KEY READ REL-FILE INVALID KEY DISPLAY "Record not found" END-READ IF FILE-STATUS = "00" MOVE "Updated Third Record" TO REL-DATA REWRITE REL-RECORD INVALID KEY DISPLAY "Error updating record" END-REWRITE END-IF MOVE 1 TO WS-REL-KEY DELETE REL-FILE INVALID KEY DISPLAY "Error deleting record" END-DELETE CLOSE REL-FILE STOP RUN.
Explicación de la Solución
- Escribir Registros: Se escriben tres registros en el archivo relativo.
- Leer y Mostrar: Se lee y muestra el segundo registro.
- Actualizar Registro: Se actualiza el tercer registro.
- Eliminar Registro: Se elimina el primer registro.
Conclusión
En este tema, hemos aprendido sobre el procesamiento de archivos relativos en COBOL, incluyendo cómo definir, escribir, leer, actualizar y eliminar registros en un archivo relativo. Estos conceptos son fundamentales para trabajar con datos de manera eficiente en COBOL. En el próximo módulo, exploraremos el manejo avanzado de datos, incluyendo tablas y arreglos.
Curso de Programación COBOL
Módulo 1: Introducción a COBOL
- ¿Qué es COBOL?
- Historia de COBOL
- Configuración del Entorno COBOL
- Estructura Básica de un Programa COBOL
Módulo 2: Sintaxis Básica de COBOL y Tipos de Datos
Módulo 3: Estructuras de Control
Módulo 4: Trabajando con Datos
- Manejo de Archivos en COBOL
- Procesamiento de Archivos Secuenciales
- Procesamiento de Archivos Indexados
- Procesamiento de Archivos Relativos
Módulo 5: Manejo Avanzado de Datos
Módulo 6: Subprogramas y Programación Modular
Módulo 7: Manejo de Errores y Depuración
Módulo 8: COBOL y Bases de Datos
Módulo 9: Temas Avanzados
- COBOL Orientado a Objetos
- COBOL y Servicios Web
- Optimización del Rendimiento
- Mejores Prácticas en Programación COBOL