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.
Llegir Arxius
Per llegir un registre d'un arxiu seqüencial, s'utilitza la sentència READ.
Escriure en Arxius
Per escriure un registre en un arxiu seqüencial, s'utilitza la sentència WRITE.
Tancar Arxius
Després de completar les operacions amb els arxius, cal tancar-los amb la sentència CLOSE.
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
-
Crea un arxiu de text anomenat
input.datamb el següent contingut:John 12345 Jane 67890 -
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
- Modifica el programa anterior per només escriure els registres on
input-field2sigui major que50000.
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.
Curs de Programació COBOL
Mòdul 1: Introducció al COBOL
- Què és el COBOL?
- Història del COBOL
- Configuració de l'Entorn COBOL
- Estructura Bàsica d'un Programa COBOL
Mòdul 2: Sintaxi Bàsica del COBOL i Tipus de Dades
Mòdul 3: Estructures de Control
Mòdul 4: Treballant amb Dades
- Gestió d'Arxius en COBOL
- Processament d'Arxius Seqüencials
- Processament d'Arxius Indexats
- Processament d'Arxius Relatius
Mòdul 5: Gestió Avançada de Dades
Mòdul 6: Subprogrames i Programació Modular
Mòdul 7: Gestió d'Errors i Depuració
Mòdul 8: COBOL i Bases de Dades
Mòdul 9: Temes Avançats
- COBOL Orientat a Objectes
- COBOL i Serveis Web
- Optimització del Rendiment
- Millors Pràctiques en Programació COBOL
