Vai al contenuto
eLearner.app
Modulo 5 · Lezione 2 di 210/10 nel corso~15 min
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:

Code
       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:

Code
       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 nella SELECT e FD), 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 (come WS-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). Scrivere WRITE SALES-FILE è un errore sintattico comune che impedisce la compilazione.

Code
       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:

Code
       CLOSE SALES-FILE.

Nota che l'istruzione CLOSE prende come argomento il nome logico del file (e non il record).


Prova tu

Esercizio#cobol.m5.l2.e1
Tentativi: 0Caricamento…

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.

Caricamento editor…
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

Esercizio#cobol.m5.l2.e2
Tentativi: 0Caricamento…

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.

Caricamento editor…
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