En aquest tema, aprendrem sobre el processament d'arxius relatius en COBOL. Els arxius relatius són una forma d'emmagatzematge de dades on cada registre té una posició relativa dins de l'arxiu. Això permet accedir directament a qualsevol registre si es coneix la seva posició relativa.

Objectius

  • Entendre què són els arxius relatius.
  • Aprendre a definir i utilitzar arxius relatius en COBOL.
  • Realitzar operacions bàsiques com llegir, escriure, actualitzar i esborrar registres en arxius relatius.

Què són els Arxius Relatius?

Els arxius relatius són arxius on cada registre es pot accedir directament mitjançant un número de registre relatiu (RRN - Relative Record Number). Això permet un accés ràpid i eficient als registres, ja que no cal llegir l'arxiu seqüencialment per trobar un registre específic.

Característiques dels Arxius Relatius

  • Accés Directe: Es pot accedir directament a qualsevol registre si es coneix el seu número de registre relatiu.
  • Eficient: L'accés directe fa que les operacions siguin més ràpides en comparació amb els arxius seqüencials.
  • Flexibilitat: Permet operacions com la inserció, actualització i esborrat de registres de manera eficient.

Definició d'Arxius Relatius en COBOL

Per treballar amb arxius relatius en COBOL, cal definir l'arxiu en la secció FILE-CONTROL i la seva estructura en la secció DATA DIVISION.

Exemple de Definició d'un Arxiu Relatiu

IDENTIFICATION DIVISION.
PROGRAM-ID. RelativeFileExample.

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
    SELECT relative-file ASSIGN TO "relative.dat"
    ORGANIZATION IS RELATIVE
    ACCESS MODE IS RANDOM
    RECORD KEY IS relative-key
    FILE STATUS IS file-status.

DATA DIVISION.
FILE SECTION.
FD  relative-file.
01  relative-record.
    05  relative-key    PIC 9(4).
    05  relative-data   PIC X(20).

WORKING-STORAGE SECTION.
01  file-status         PIC XX.
01  ws-relative-key     PIC 9(4).
01  ws-relative-data    PIC X(20).

PROCEDURE DIVISION.
    OPEN OUTPUT relative-file
    MOVE 1 TO ws-relative-key
    MOVE "First Record" TO ws-relative-data
    WRITE relative-record
    MOVE 2 TO ws-relative-key
    MOVE "Second Record" TO ws-relative-data
    WRITE relative-record
    CLOSE relative-file
    STOP RUN.

Explicació del Codi

  • FILE-CONTROL: Defineix l'arxiu relatiu amb ORGANIZATION IS RELATIVE i ACCESS MODE IS RANDOM.
  • FILE SECTION: Defineix l'estructura del registre amb un camp clau (relative-key) i un camp de dades (relative-data).
  • WORKING-STORAGE SECTION: Defineix variables de treball per gestionar els registres.
  • PROCEDURE DIVISION: Obre l'arxiu en mode de sortida (OUTPUT), escriu dos registres i tanca l'arxiu.

Operacions Bàsiques amb Arxius Relatius

Llegir un Registre

Per llegir un registre específic, cal moure el número de registre relatiu a la clau i utilitzar la sentència READ.

    OPEN INPUT relative-file
    MOVE 1 TO ws-relative-key
    READ relative-file
        INVALID KEY DISPLAY "Record not found"
    END-READ
    DISPLAY "Key: " ws-relative-key " Data: " ws-relative-data
    CLOSE relative-file.

Escriure un Registre

Per escriure un nou registre, cal moure el número de registre relatiu a la clau i utilitzar la sentència WRITE.

    OPEN OUTPUT relative-file
    MOVE 3 TO ws-relative-key
    MOVE "Third Record" TO ws-relative-data
    WRITE relative-record
    CLOSE relative-file.

Actualitzar un Registre

Per actualitzar un registre existent, cal llegir el registre, modificar les dades i utilitzar la sentència REWRITE.

    OPEN I-O relative-file
    MOVE 2 TO ws-relative-key
    READ relative-file
        INVALID KEY DISPLAY "Record not found"
    END-READ
    MOVE "Updated Record" TO ws-relative-data
    REWRITE relative-record
    CLOSE relative-file.

Esborrar un Registre

Per esborrar un registre, cal moure el número de registre relatiu a la clau i utilitzar la sentència DELETE.

    OPEN I-O relative-file
    MOVE 2 TO ws-relative-key
    DELETE relative-file
        INVALID KEY DISPLAY "Record not found"
    END-DELETE
    CLOSE relative-file.

Exercicis Pràctics

Exercici 1: Crear i Escriure en un Arxiu Relatiu

  1. Defineix un arxiu relatiu amb una estructura de registre que contingui un camp clau i un camp de dades.
  2. Escriu un programa COBOL que creï l'arxiu i escrigui tres registres en ell.

Exercici 2: Llegir i Actualitzar un Registre

  1. Escriu un programa COBOL que llegeixi un registre específic d'un arxiu relatiu.
  2. Actualitza el camp de dades del registre llegit i guarda els canvis.

Exercici 3: Esborrar un Registre

  1. Escriu un programa COBOL que esborri un registre específic d'un arxiu relatiu.
  2. Verifica que el registre ha estat esborrat intentant llegir-lo després de l'esborrat.

Solucions als Exercicis

Solució a l'Exercici 1

IDENTIFICATION DIVISION.
PROGRAM-ID. CreateRelativeFile.

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
    SELECT relative-file ASSIGN TO "relative.dat"
    ORGANIZATION IS RELATIVE
    ACCESS MODE IS RANDOM
    RECORD KEY IS relative-key
    FILE STATUS IS file-status.

DATA DIVISION.
FILE SECTION.
FD  relative-file.
01  relative-record.
    05  relative-key    PIC 9(4).
    05  relative-data   PIC X(20).

WORKING-STORAGE SECTION.
01  file-status         PIC XX.
01  ws-relative-key     PIC 9(4).
01  ws-relative-data    PIC X(20).

PROCEDURE DIVISION.
    OPEN OUTPUT relative-file
    MOVE 1 TO ws-relative-key
    MOVE "First Record" TO ws-relative-data
    WRITE relative-record
    MOVE 2 TO ws-relative-key
    MOVE "Second Record" TO ws-relative-data
    WRITE relative-record
    MOVE 3 TO ws-relative-key
    MOVE "Third Record" TO ws-relative-data
    WRITE relative-record
    CLOSE relative-file
    STOP RUN.

Solució a l'Exercici 2

IDENTIFICATION DIVISION.
PROGRAM-ID. ReadUpdateRelativeFile.

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
    SELECT relative-file ASSIGN TO "relative.dat"
    ORGANIZATION IS RELATIVE
    ACCESS MODE IS RANDOM
    RECORD KEY IS relative-key
    FILE STATUS IS file-status.

DATA DIVISION.
FILE SECTION.
FD  relative-file.
01  relative-record.
    05  relative-key    PIC 9(4).
    05  relative-data   PIC X(20).

WORKING-STORAGE SECTION.
01  file-status         PIC XX.
01  ws-relative-key     PIC 9(4).
01  ws-relative-data    PIC X(20).

PROCEDURE DIVISION.
    OPEN I-O relative-file
    MOVE 2 TO ws-relative-key
    READ relative-file
        INVALID KEY DISPLAY "Record not found"
    END-READ
    DISPLAY "Before Update - Key: " ws-relative-key " Data: " ws-relative-data
    MOVE "Updated Record" TO ws-relative-data
    REWRITE relative-record
    DISPLAY "After Update - Key: " ws-relative-key " Data: " ws-relative-data
    CLOSE relative-file
    STOP RUN.

Solució a l'Exercici 3

IDENTIFICATION DIVISION.
PROGRAM-ID. DeleteRelativeFileRecord.

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
    SELECT relative-file ASSIGN TO "relative.dat"
    ORGANIZATION IS RELATIVE
    ACCESS MODE IS RANDOM
    RECORD KEY IS relative-key
    FILE STATUS IS file-status.

DATA DIVISION.
FILE SECTION.
FD  relative-file.
01  relative-record.
    05  relative-key    PIC 9(4).
    05  relative-data   PIC X(20).

WORKING-STORAGE SECTION.
01  file-status         PIC XX.
01  ws-relative-key     PIC 9(4).
01  ws-relative-data    PIC X(20).

PROCEDURE DIVISION.
    OPEN I-O relative-file
    MOVE 2 TO ws-relative-key
    DELETE relative-file
        INVALID KEY DISPLAY "Record not found"
    END-DELETE
    MOVE 2 TO ws-relative-key
    READ relative-file
        INVALID KEY DISPLAY "Record successfully deleted"
    END-READ
    CLOSE relative-file
    STOP RUN.

Conclusió

En aquest tema, hem après què són els arxius relatius i com treballar amb ells en COBOL. Hem vist com definir, llegir, escriure, actualitzar i esborrar registres en arxius relatius. Els exercicis pràctics proporcionats ajuden a reforçar els conceptes apresos i a adquirir experiència pràctica en el processament d'arxius relatius.

© Copyright 2024. Tots els drets reservats