Lecciones del módulo (2/2)
Operazioni di Input/Output
Una vez asociado y declarado un archivo en la DATA DIVISION, podemos manipularlo dentro de la PROCEDURE DIVISION. En COBOL, la gestión del ciclo de vida de los archivos sigue un flujo estándar e imperativo: apertura, operación (lectura o escritura) y cierre.
1. Apertura de archivos: instrucción OPEN
Antes de poder leer o escribir en un archivo, este debe abrirse indicando el modo de acceso adecuado:
OPEN INPUT SALES-FILE.
Los modos principales son:
INPUT: El archivo se abre en modo de solo lectura. El archivo debe existir en el disco, de lo contrario el programa fallará.OUTPUT: El archivo se abre en modo de escritura. Si el archivo ya existe, su contenido anterior se borra (sobrescritura). Si no existe, se crea.EXTEND: El archivo se abre para añadir datos (append). Los nuevos registros se escribirán a partir del final del archivo existente.I-O: El archivo se abre tanto en lectura como en escritura (utilizado principalmente para archivos de acceso relativo o indexado, no secuencial lineal).
2. Lectura de datos: instrucción READ
Para leer un registro de un archivo secuencial, usamos la instrucción READ. Como no sabemos de antemano cuántos registros contiene el archivo, siempre se debe gestionar la condición de fin de archivo (EOF - End Of File) usando la cláusula AT END:
READ SALES-FILE
AT END MOVE "Y" TO WS-EOF
END-READ.
READ SALES-FILE: Nota que la instrucción hace referencia al nombre lógico del archivo (definido enSELECTyFD), no al registro.AT END: Especifica las instrucciones a ejecutar cuando se intenta leer más allá del último registro disponible. Comúnmente se establece una variable flag (comoWS-EOF) en"Y".END-READ: Termina de forma explícita la instrucción de lectura.
3. Escritura de datos: instrucción WRITE
Para insertar datos en un archivo, usamos la instrucción WRITE.
[!WARNING] En COBOL se lee un archivo (
READ SALES-FILE), pero se escribe un registro (WRITE SALES-RECORD). EscribirWRITE SALES-FILEes un error sintáctico común que impide la compilación.
MOVE 1001 TO EMP-ID.
MOVE "MARIO ROSSI" TO EMP-NAME.
WRITE SALES-RECORD.
Antes de ejecutar la instrucción WRITE, los campos subordinados de la estructura de grupo del registro FD (en este caso SALES-RECORD) deben tener asignados los valores correspondientes en memoria.
4. Cierre de archivos: instrucción CLOSE
Al finalizar los procesos, cada archivo abierto debe cerrarse obligatoriamente para liberar los recursos del sistema y asegurar que todos los datos se escriban realmente en el disco:
CLOSE SALES-FILE.
Nota que la instrucción CLOSE toma como argumento el nombre lógico del archivo (y no el registro).
Pruébalo tú mismo
Completa la PROCEDURE DIVISION abriendo el archivo SALES-FILE en modo INPUT, leyendo el primer registro y estableciendo la variable de control WS-EOF en 'Y' al alcanzar el fin del archivo. Finalmente, recuerda cerrar el archivo antes de terminar.
Mostrar pista
Escribe en orden: OPEN INPUT SALES-FILE. luego READ SALES-FILE AT END MOVE 'Y' TO WS-EOF END-READ. luego CLOSE SALES-FILE. y finalmente STOP RUN.
Solución disponible después de 3 intentos
Completa la PROCEDURE DIVISION abriendo el archivo SALES-FILE en modo OUTPUT. Mueve el valor 1001 al campo SALES-ID y 250.50 al campo SALES-AMOUNT, luego escribe el registro SALES-RECORD en el archivo. Finalmente, cierra el archivo antes de detener el programa.
Mostrar pista
Apri el file con OPEN OUTPUT SALES-FILE., usa MOVE per valorizzare SALES-ID e SALES-AMOUNT, esegui WRITE SALES-RECORD. (scrivendo il record, non il file!), chiudi con CLOSE SALES-FILE. e termina con STOP RUN.
Solución disponible después de 3 intentos