En aquest tema, aprendrem com gestionar i processar arxius seqüencials en COBOL. Els arxius seqüencials són una de les formes més comunes d'emmagatzematge de dades en COBOL, i comprendre com treballar amb ells és essencial per a qualsevol programador COBOL.

Objectius

  • Entendre què és un arxiu seqüencial.
  • Aprendre a definir i utilitzar arxius seqüencials en un programa COBOL.
  • Realitzar operacions bàsiques com llegir, escriure i tancar arxius seqüencials.

Què és un Arxiu Seqüencial?

Un arxiu seqüencial és un tipus d'arxiu on les dades s'emmagatzemen i es llegeixen en un ordre específic, de principi a fi. Això significa que per accedir a una dada específica, cal llegir totes les dades anteriors.

Definició d'Arxius Seqüencials en COBOL

Secció FILE-CONTROL

La secció FILE-CONTROL es troba dins de la INPUT-OUTPUT SECTION de la ENVIRONMENT DIVISION. Aquí és on es defineixen els arxius que el programa utilitzarà.

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
    SELECT input-file ASSIGN TO 'input.dat'
        ORGANIZATION IS SEQUENTIAL.
    SELECT output-file ASSIGN TO 'output.dat'
        ORGANIZATION IS SEQUENTIAL.

Secció FILE SECTION

La secció FILE SECTION es troba dins de la DATA DIVISION. Aquí es defineixen les estructures de registre per als arxius.

DATA DIVISION.
FILE SECTION.
FD  input-file.
01  input-record.
    05  input-field1  PIC X(10).
    05  input-field2  PIC 9(5).

FD  output-file.
01  output-record.
    05  output-field1  PIC X(10).
    05  output-field2  PIC 9(5).

Operacions Bàsiques amb Arxius Seqüencials

Obrir Arxius

Abans de poder llegir o escriure en un arxiu, cal obrir-lo. Això es fa amb la sentència OPEN.

PROCEDURE DIVISION.
    OPEN INPUT input-file.
    OPEN OUTPUT output-file.

Llegir Arxius

Per llegir un registre d'un arxiu seqüencial, s'utilitza la sentència READ.

    READ input-file INTO input-record
        AT END
            MOVE 'YES' TO end-of-file
    END-READ.

Escriure en Arxius

Per escriure un registre en un arxiu seqüencial, s'utilitza la sentència WRITE.

    MOVE input-field1 TO output-field1.
    MOVE input-field2 TO output-field2.
    WRITE output-record.

Tancar Arxius

Després de completar les operacions amb els arxius, cal tancar-los amb la sentència CLOSE.

    CLOSE input-file.
    CLOSE output-file.

Exemple Complet

A continuació, es mostra un exemple complet d'un programa COBOL que llegeix registres d'un arxiu seqüencial i els escriu en un altre arxiu seqüencial.

IDENTIFICATION DIVISION.
PROGRAM-ID. SequentialFileProcessing.

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
    SELECT input-file ASSIGN TO 'input.dat'
        ORGANIZATION IS SEQUENTIAL.
    SELECT output-file ASSIGN TO 'output.dat'
        ORGANIZATION IS SEQUENTIAL.

DATA DIVISION.
FILE SECTION.
FD  input-file.
01  input-record.
    05  input-field1  PIC X(10).
    05  input-field2  PIC 9(5).

FD  output-file.
01  output-record.
    05  output-field1  PIC X(10).
    05  output-field2  PIC 9(5).

WORKING-STORAGE SECTION.
01  end-of-file  PIC X VALUE 'NO'.

PROCEDURE DIVISION.
    OPEN INPUT input-file.
    OPEN OUTPUT output-file.

    PERFORM UNTIL end-of-file = 'YES'
        READ input-file INTO input-record
            AT END
                MOVE 'YES' TO end-of-file
        END-READ

        IF end-of-file NOT = 'YES'
            MOVE input-field1 TO output-field1
            MOVE input-field2 TO output-field2
            WRITE output-record
        END-IF
    END-PERFORM.

    CLOSE input-file.
    CLOSE output-file.

    STOP RUN.

Exercicis Pràctics

Exercici 1: Lectura i Escriptura Bàsica

  1. Crea un arxiu de text anomenat input.dat amb el següent contingut:

    John      12345
    Jane      67890
    
  2. Escriu un programa COBOL que llegeixi els registres d'aquest arxiu i els escrigui en un altre arxiu anomenat output.dat.

Solució

IDENTIFICATION DIVISION.
PROGRAM-ID. SequentialFileProcessingExercise.

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
    SELECT input-file ASSIGN TO 'input.dat'
        ORGANIZATION IS SEQUENTIAL.
    SELECT output-file ASSIGN TO 'output.dat'
        ORGANIZATION IS SEQUENTIAL.

DATA DIVISION.
FILE SECTION.
FD  input-file.
01  input-record.
    05  input-field1  PIC X(10).
    05  input-field2  PIC 9(5).

FD  output-file.
01  output-record.
    05  output-field1  PIC X(10).
    05  output-field2  PIC 9(5).

WORKING-STORAGE SECTION.
01  end-of-file  PIC X VALUE 'NO'.

PROCEDURE DIVISION.
    OPEN INPUT input-file.
    OPEN OUTPUT output-file.

    PERFORM UNTIL end-of-file = 'YES'
        READ input-file INTO input-record
            AT END
                MOVE 'YES' TO end-of-file
        END-READ

        IF end-of-file NOT = 'YES'
            MOVE input-field1 TO output-field1
            MOVE input-field2 TO output-field2
            WRITE output-record
        END-IF
    END-PERFORM.

    CLOSE input-file.
    CLOSE output-file.

    STOP RUN.

Exercici 2: Filtratge de Registres

  1. Modifica el programa anterior per només escriure els registres on input-field2 sigui major que 50000.

Solució

IDENTIFICATION DIVISION.
PROGRAM-ID. SequentialFileProcessingExercise.

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
    SELECT input-file ASSIGN TO 'input.dat'
        ORGANIZATION IS SEQUENTIAL.
    SELECT output-file ASSIGN TO 'output.dat'
        ORGANIZATION IS SEQUENTIAL.

DATA DIVISION.
FILE SECTION.
FD  input-file.
01  input-record.
    05  input-field1  PIC X(10).
    05  input-field2  PIC 9(5).

FD  output-file.
01  output-record.
    05  output-field1  PIC X(10).
    05  output-field2  PIC 9(5).

WORKING-STORAGE SECTION.
01  end-of-file  PIC X VALUE 'NO'.

PROCEDURE DIVISION.
    OPEN INPUT input-file.
    OPEN OUTPUT output-file.

    PERFORM UNTIL end-of-file = 'YES'
        READ input-file INTO input-record
            AT END
                MOVE 'YES' TO end-of-file
        END-READ

        IF end-of-file NOT = 'YES'
            IF input-field2 > 50000
                MOVE input-field1 TO output-field1
                MOVE input-field2 TO output-field2
                WRITE output-record
            END-IF
        END-IF
    END-PERFORM.

    CLOSE input-file.
    CLOSE output-file.

    STOP RUN.

Conclusió

En aquest tema, hem après com definir, obrir, llegir, escriure i tancar arxius seqüencials en COBOL. També hem vist exemples pràctics i exercicis per reforçar els conceptes apresos. El processament d'arxius seqüencials és una habilitat fonamental per a qualsevol programador COBOL, i dominar-la és essencial per treballar amb dades emmagatzemades en aquest format.

© Copyright 2024. Tots els drets reservats