En este tema, aprenderemos cómo manejar archivos secuenciales en COBOL. Los archivos secuenciales son aquellos en los que los registros se almacenan y se acceden en un orden específico, uno tras otro. Este tipo de archivos es común en muchas aplicaciones empresariales, como la gestión de inventarios y la contabilidad.

Objetivos

  • Comprender la estructura y el uso de archivos secuenciales en COBOL.
  • Aprender a leer y escribir archivos secuenciales.
  • Implementar programas COBOL que procesen archivos secuenciales.

Conceptos Clave

  1. Definición de Archivos Secuenciales

Un archivo secuencial es un tipo de archivo en el que los registros se almacenan en un orden específico y se acceden de manera secuencial. Esto significa que para acceder a un registro específico, es necesario leer todos los registros anteriores.

  1. Declaración de Archivos en COBOL

Para trabajar con archivos en COBOL, primero debemos declarar el archivo en la sección FILE-CONTROL y definir su estructura en la sección FILE SECTION.

  1. Operaciones Básicas

Las operaciones básicas con archivos secuenciales incluyen:

  • Apertura del archivo (OPEN)
  • Lectura del archivo (READ)
  • Escritura en el archivo (WRITE)
  • Cierre del archivo (CLOSE)

Estructura de un Programa COBOL para Archivos Secuenciales

  1. Declaración del Archivo en la Sección FILE-CONTROL

IDENTIFICATION DIVISION.
PROGRAM-ID. SequentialFileExample.

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.

  1. Definición de la Estructura del Archivo en la Sección FILE SECTION

DATA DIVISION.
FILE SECTION.
FD  input-file.
01  input-record.
    05  input-id        PIC 9(5).
    05  input-name      PIC X(20).

FD  output-file.
01  output-record.
    05  output-id       PIC 9(5).
    05  output-name     PIC X(20).

  1. Declaración de Variables de Trabajo en la Sección WORKING-STORAGE

WORKING-STORAGE SECTION.
01  ws-eof            PIC X VALUE 'N'.

  1. Procedimientos para Leer y Escribir Archivos

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

    PERFORM UNTIL ws-eof = 'Y'
        READ input-file INTO input-record
            AT END
                MOVE 'Y' TO ws-eof
            NOT AT END
                MOVE input-record TO output-record
                WRITE output-record
        END-READ
    END-PERFORM

    CLOSE input-file
    CLOSE output-file

    STOP RUN.

Ejemplo Práctico

Ejemplo Completo: Copiar un Archivo Secuencial

Este programa leerá registros de un archivo secuencial de entrada y los copiará a un archivo secuencial de salida.

IDENTIFICATION DIVISION.
PROGRAM-ID. SequentialFileCopy.

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-id        PIC 9(5).
    05  input-name      PIC X(20).

FD  output-file.
01  output-record.
    05  output-id       PIC 9(5).
    05  output-name     PIC X(20).

WORKING-STORAGE SECTION.
01  ws-eof            PIC X VALUE 'N'.

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

    PERFORM UNTIL ws-eof = 'Y'
        READ input-file INTO input-record
            AT END
                MOVE 'Y' TO ws-eof
            NOT AT END
                MOVE input-record TO output-record
                WRITE output-record
        END-READ
    END-PERFORM

    CLOSE input-file
    CLOSE output-file

    STOP RUN.

Ejercicio Práctico

Ejercicio 1: Filtrar Registros

Modifica el programa anterior para que solo copie los registros cuyo input-id sea mayor que 10000.

Solución

IDENTIFICATION DIVISION.
PROGRAM-ID. SequentialFileFilter.

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-id        PIC 9(5).
    05  input-name      PIC X(20).

FD  output-file.
01  output-record.
    05  output-id       PIC 9(5).
    05  output-name     PIC X(20).

WORKING-STORAGE SECTION.
01  ws-eof            PIC X VALUE 'N'.

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

    PERFORM UNTIL ws-eof = 'Y'
        READ input-file INTO input-record
            AT END
                MOVE 'Y' TO ws-eof
            NOT AT END
                IF input-id > 10000
                    MOVE input-record TO output-record
                    WRITE output-record
                END-IF
        END-READ
    END-PERFORM

    CLOSE input-file
    CLOSE output-file

    STOP RUN.

Conclusión

En esta sección, hemos aprendido cómo manejar archivos secuenciales en COBOL. Hemos cubierto la declaración de archivos, la lectura y escritura de registros, y hemos implementado un ejemplo práctico. Además, hemos proporcionado un ejercicio para reforzar los conceptos aprendidos. En el próximo módulo, exploraremos el procesamiento de archivos indexados, que nos permitirá acceder a registros de manera más eficiente.

© Copyright 2024. Todos los derechos reservados