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
- 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.
- 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.
- 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
- Declaración del Archivo en la Sección
FILE-CONTROL
FILE-CONTROLIDENTIFICATION 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.
- Definición de la Estructura del Archivo en la Sección
FILE SECTION
FILE SECTIONDATA 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).
- Declaración de Variables de Trabajo en la Sección
WORKING-STORAGE
WORKING-STORAGE
- 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.
Curso de Programación COBOL
Módulo 1: Introducción a COBOL
- ¿Qué es COBOL?
- Historia de COBOL
- Configuración del Entorno COBOL
- Estructura Básica de un Programa COBOL
Módulo 2: Sintaxis Básica de COBOL y Tipos de Datos
Módulo 3: Estructuras de Control
Módulo 4: Trabajando con Datos
- Manejo de Archivos en COBOL
- Procesamiento de Archivos Secuenciales
- Procesamiento de Archivos Indexados
- Procesamiento de Archivos Relativos
Módulo 5: Manejo Avanzado de Datos
Módulo 6: Subprogramas y Programación Modular
Módulo 7: Manejo de Errores y Depuración
Módulo 8: COBOL y Bases de Datos
Módulo 9: Temas Avanzados
- COBOL Orientado a Objetos
- COBOL y Servicios Web
- Optimización del Rendimiento
- Mejores Prácticas en Programación COBOL
