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-FILEy 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-WRITELeer 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-IFEliminar 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
