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-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.
- Definición de la Estructura del Archivo en la Sección
FILE SECTION
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).
- 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