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

  1. Archivo Relativo: Un archivo en el que los registros se identifican por un número de registro relativo (RRN - Relative Record Number).
  2. Acceso Directo: Permite acceder a un registro específico directamente sin tener que leer todos los registros anteriores.
  3. 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

  1. FILE-CONTROL: Define el archivo relativo REL-FILE y especifica su organización como relativa.
  2. FILE SECTION: Describe la estructura del registro en el archivo relativo.
  3. WORKING-STORAGE SECTION: Define las variables de trabajo, incluyendo el estado del archivo y los campos de datos.
  4. 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:

MOVE 1 TO WS-REL-KEY
READ REL-FILE INVALID KEY
    DISPLAY "Record not found"
END-READ

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:

MOVE 1 TO WS-REL-KEY
DELETE REL-FILE INVALID KEY
    DISPLAY "Error deleting record"
END-DELETE

Ejercicio Práctico

Ejercicio

  1. 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

  1. Escribir Registros: Se escriben tres registros en el archivo relativo.
  2. Leer y Mostrar: Se lee y muestra el segundo registro.
  3. Actualizar Registro: Se actualiza el tercer registro.
  4. 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.

© Copyright 2024. Todos los derechos reservados