Lezioni del modulo (2/2)
Operazioni di Input/Output
Una volta associato e dichiarato un file nella DATA DIVISION, possiamo manipolarlo all'interno della PROCEDURE DIVISION. In COBOL, la gestione del ciclo di vita dei file segue un flusso standard e imperativo: apertura, operazione (lettura o scrittura) e chiusura.
1. Apertura dei File: Istruzione OPEN
Prima di poter leggere o scrivere in un file, questo deve essere aperto indicando la modalità di accesso appropriata:
OPEN INPUT SALES-FILE.
Le modalità principali sono:
INPUT: Il file viene aperto in sola lettura. Il file deve esistere sul disco, altrimenti il programma andrà in errore.OUTPUT: Il file viene aperto in scrittura. Se il file esiste già, il suo contenuto precedente viene cancellato (sovrascrittura). Se non esiste, viene creato.EXTEND: Il file viene aperto per l'aggiunta di dati (append). I nuovi record verranno scritti a partire dalla fine del file esistente.I-O: Il file viene aperto sia in lettura che in scrittura (usato principalmente per file ad accesso relativo o indicizzato, non sequenziale lineare).
2. Lettura dei Dati: Istruzione READ
Per leggere un record da un file sequenziale, usiamo l'istruzione READ. Poiché non sappiamo a priori quanti record contiene il file, si deve sempre gestire la condizione di fine file (EOF - End Of File) usando la clausola AT END:
READ SALES-FILE
AT END MOVE "Y" TO WS-EOF
END-READ.
READ SALES-FILE: Nota che l'istruzione fa riferimento al nome logico del file (definito nellaSELECTeFD), non al record.AT END: Specifica le istruzioni da eseguire quando si tenta di leggere oltre l'ultimo record disponibile. Comunemente si imposta una variabile flag (comeWS-EOF) su"Y".END-READ: Termina in modo esplicito l'istruzione di lettura.
3. Scrittura dei Dati: Istruzione WRITE
Per inserire dati in un file, usiamo l'istruzione WRITE.
[!WARNING] In COBOL si legge un file (
READ SALES-FILE), ma si scrive un record (WRITE SALES-RECORD). ScrivereWRITE SALES-FILEè un errore sintattico comune che impedisce la compilazione.
MOVE 1001 TO EMP-ID.
MOVE "MARIO ROSSI" TO EMP-NAME.
WRITE SALES-RECORD.
Prima di eseguire la WRITE, i campi subordinati della struttura di gruppo del record FD (in questo caso SALES-RECORD) devono essere opportunamente valorizzati in memoria.
4. Chiusura dei File: Istruzione CLOSE
Al termine delle elaborazioni, ogni file aperto deve essere obbligatoriamente chiuso per liberare le risorse di sistema e assicurarsi che tutti i dati vengano effettivamente scritti sul disco:
CLOSE SALES-FILE.
Nota che l'istruzione CLOSE prende come argomento il nome logico del file (e non il record).
Prova tu
Completa la PROCEDURE DIVISION aprendo il file SALES-FILE in modalità INPUT, leggendo il primo record e impostando la variabile di controllo WS-EOF su 'Y' al raggiungimento della fine del file. Infine, ricordati di chiudere il file prima di terminare.
Mostra suggerimento
Scrivi in ordine: OPEN INPUT SALES-FILE. poi READ SALES-FILE AT END MOVE 'Y' TO WS-EOF END-READ. poi CLOSE SALES-FILE. e infine STOP RUN.
Soluzione disponibile dopo 3 tentativi
Completa la PROCEDURE DIVISION aprendo il file SALES-FILE in modalità OUTPUT. Sposta il valore 1001 nel campo SALES-ID e 250.50 nel campo SALES-AMOUNT, quindi scrivi il record SALES-RECORD sul file. Infine, chiudi il file prima di arrestare il programma.
Mostra suggerimento
Apri il 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.
Soluzione disponibile dopo 3 tentativi