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.dat
amb 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-field2
sigui 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