COBOL - Verbi per la gestione dei file
I verbi di gestione dei file vengono utilizzati per eseguire varie operazioni sui file. Di seguito sono riportati i verbi per la gestione dei file:
- Open
- Read
- Write
- Rewrite
- Delete
- Start
- Close
Open Verb
Apri è la prima operazione sul file che deve essere eseguita. Se Open ha esito positivo, sono possibili solo ulteriori operazioni su un file. Solo dopo aver aperto un file, le variabili nella struttura del file sono disponibili per l'elaborazione.FILE STATUS variabile viene aggiornata dopo ogni operazione sul file.
Sintassi
OPEN "mode" file-name.
Qui, nome-file è una stringa letterale, che utilizzerai per denominare il tuo file. Un file può essere aperto nelle seguenti modalità:
Sr.No. | Modalità e descrizione |
---|---|
1 | Input La modalità di input viene utilizzata per i file esistenti. In questa modalità, possiamo solo leggere il file, non sono consentite altre operazioni sul file. |
2 | Output La modalità di output viene utilizzata per inserire record nei file. Se unasequential fileviene utilizzato e il file contiene alcuni record, quindi i record esistenti verranno prima eliminati e quindi verranno inseriti nuovi record nel file. Non succederà così in caso di un fileindexed file o a relative file. |
3 | Extend La modalità di estensione viene utilizzata per aggiungere record in un file sequential file. In questa modalità, i record vengono inseriti alla fine. Se la modalità di accesso ai file èRandom o Dynamic, quindi la modalità di estensione non può essere utilizzata. |
4 | I-O La modalità Input-Output viene utilizzata per leggere e riscrivere i record di un file. |
Leggi verbo
Il verbo di lettura viene utilizzato per leggere i record del file. La funzione di lettura è recuperare i record da un file. Ad ogni verbo di lettura, solo un record può essere letto nella struttura del file. Per eseguire un'operazione di lettura, aprire il file in modalità INPUT o IO. Ad ogni istruzione di lettura, il puntatore del file viene incrementato e quindi vengono letti i record successivi.
Sintassi
Di seguito è riportata la sintassi per leggere i record quando la modalità di accesso ai file è sequenziale:
READ file-name NEXT RECORD INTO ws-file-structure
AT END DISPLAY 'End of File'
NOT AT END DISPLAY 'Record Details:' ws-file-structure
END-READ.
Di seguito sono riportati i parametri utilizzati:
NEXT RECORD è facoltativo e viene specificato quando un file sequenziale indicizzato viene letto in sequenza.
La clausola INTO è facoltativa. ws-file-structure è definito nella sezione WorkingStorage per ottenere i valori dall'istruzione READ.
La condizione AT END diventa True quando viene raggiunta la fine del file.
Example- L'esempio seguente legge un file esistente utilizzando l'organizzazione sequenziale di righe. Questo programma può essere compilato ed eseguito utilizzandoLive Demo opzione dove verranno visualizzati tutti i record presenti nel file.
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT STUDENT ASSIGN TO 'input.txt'
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD STUDENT.
01 STUDENT-FILE.
05 STUDENT-ID PIC 9(5).
05 NAME PIC A(25).
WORKING-STORAGE SECTION.
01 WS-STUDENT.
05 WS-STUDENT-ID PIC 9(5).
05 WS-NAME PIC A(25).
01 WS-EOF PIC A(1).
PROCEDURE DIVISION.
OPEN INPUT STUDENT.
PERFORM UNTIL WS-EOF='Y'
READ STUDENT INTO WS-STUDENT
AT END MOVE 'Y' TO WS-EOF
NOT AT END DISPLAY WS-STUDENT
END-READ
END-PERFORM.
CLOSE STUDENT.
STOP RUN.
Supponiamo che i dati del file di input disponibili nel file input.txt file contiene quanto segue:
20003 Mohtashim M.
20004 Nishant Malik
20005 Amitabh Bachhan
Quando compili ed esegui il programma sopra, produce il seguente risultato:
20003 Mohtashim M.
20004 Nishant Malik
20005 Amitabh Bachhan
Sintassi
La seguente è la sintassi per scrivere un record quando la modalità di accesso ai file è casuale:
READ file-name RECORD INTO ws-file-structure
KEY IS rec-key
INVALID KEY DISPLAY 'Invalid Key'
NOT INVALID KEY DISPLAY 'Record Details: ' ws-file-structure
END-READ.
Example- L'esempio seguente legge un file esistente utilizzando l'organizzazione indicizzata. Questo programma può essere compilato ed eseguito utilizzandoJCLsu Mainframe dove verranno visualizzati tutti i record presenti nel file. Sul server Mainframes, non utilizziamo file di testo; invece usiamo file PS.
Supponiamo che il file presente sui Mainframe abbia lo stesso contenuto del file input.txt nell'esempio precedente.
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT STUDENT ASSIGN TO IN1
ORGANIZATION IS INDEXED
ACCESS IS RANDOM
RECORD KEY IS STUDENT-ID
FILE STATUS IS FS.
DATA DIVISION.
FILE SECTION.
FD STUDENT.
01 STUDENT-FILE.
05 STUDENT-ID PIC 9(5).
05 NAME PIC A(25).
WORKING-STORAGE SECTION.
01 WS-STUDENT.
05 WS-STUDENT-ID PIC 9(5).
05 WS-NAME PIC A(25).
PROCEDURE DIVISION.
OPEN INPUT STUDENT.
MOVE 20005 TO STUDENT-ID.
READ STUDENT RECORD INTO WS-STUDENT-FILE
KEY IS STUDENT-ID
INVALID KEY DISPLAY 'Invalid Key'
NOT INVALID KEY DISPLAY WS-STUDENT-FILE
END-READ.
CLOSE STUDENT.
STOP RUN.
JCL per eseguire il programma COBOL di cui sopra -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//IN1 DD DSN = STUDENT-FILE-NAME,DISP=SHR
Quando compili ed esegui il programma sopra, produce il seguente risultato:
20005 Amitabh Bachhan
Scrivi verbo
Il verbo di scrittura viene utilizzato per inserire record in un file. Una volta che il record è stato scritto, non è più disponibile nel buffer del record. Prima di inserire i record nel file, spostare i valori nel buffer dei record e quindi eseguire il verbo di scrittura.
L'istruzione Write può essere utilizzata con FROMopzione per scrivere direttamente i record dalle variabili di archiviazione di lavoro. From è una clausola opzionale. Se la modalità di accesso è sequenziale, per scrivere un record, il file deve essere aperto in modalità di output o in modalità di estensione. Se la modalità di accesso è casuale o dinamica, per scrivere un record, il file deve essere aperto in modalità di output o in modalità IO.
Sintassi
Di seguito è riportata la sintassi per leggere un record quando l'organizzazione del file è sequenziale:
WRITE record-buffer [FROM ws-file-structure]
END-WRITE.
La seguente è la sintassi per leggere un record quando l'organizzazione del file è indicizzata o relativa -
WRITE record-buffer [FROM ws-file-structure]
INVALID KEY DISPLAY 'Invalid Key'
NOT INVALID KEY DISPLAY 'Record Inserted'
END-WRITE.
Example - L'esempio seguente mostra come inserire un nuovo record in un nuovo file quando l'organizzazione è sequenziale.
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT STUDENT ASSIGN TO OUT1
ORGANIZATION IS SEQUENTIAL
ACCESS IS SEQUENTIAL
FILE STATUS IS FS.
DATA DIVISION.
FILE SECTION.
FD STUDENT
01 STUDENT-FILE.
05 STUDENT-ID PIC 9(5).
05 NAME PIC A(25).
05 CLASS PIC X(3).
WORKING-STORAGE SECTION.
01 WS-STUDENT.
05 WS-STUDENT-ID PIC 9(5).
05 WS-NAME PIC A(25).
05 WS-CLASS PIC X(3).
PROCEDURE DIVISION.
OPEN EXTEND STUDENT.
MOVE 1000 TO STUDENT-ID.
MOVE 'Tim' TO NAME.
MOVE '10' TO CLASS.
WRITE STUDENT-FILE
END-WRITE.
CLOSE STUDENT.
STOP RUN.
JCL per eseguire il programma COBOL di cui sopra -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//OUT1 DD DSN = OUTPUT-FILE-NAME,DISP = (NEW,CATALOG,DELETE)
Quando compili ed esegui il programma sopra, aggiungerà un nuovo record al file di output.
1000 Tim 10
Riscrivi verbo
Il verbo Riscrivi viene utilizzato per aggiornare i record. Il file dovrebbe essere aperto in modalità IO per le operazioni di riscrittura. Può essere utilizzato solo dopo un'operazione di lettura riuscita. Il verbo Riscrivi sovrascrive l'ultimo record letto.
Sintassi
Di seguito è riportata la sintassi per leggere un record quando l'organizzazione del file è sequenziale:
REWRITE record-buffer [FROM ws-file-structure]
END-REWRITE.
La seguente è la sintassi per leggere un record quando l'organizzazione del file è indicizzata o relativa -
REWRITE record-buffer [FROM ws-file-structure]
INVALID KEY DISPLAY 'Invalid Key'
NOT INVALID KEY DISPLAY 'Record Updated'
END-REWRITE.
Example - Il seguente esempio mostra come aggiornare un record esistente che abbiamo inserito nella precedente fase di scrittura -
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT STUDENT ASSIGN TO IN1
ORGANIZATION IS INDEXED
ACCESS IS RANDOM
RECORD KEY IS STUDENT-ID
FILE STATUS IS FS.
DATA DIVISION.
FILE SECTION.
FD STUDENT
01 STUDENT-FILE.
05 STUDENT-ID PIC 9(4).
05 NAME PIC A(12).
05 CLASS PIC X(3).
WORKING-STORAGE SECTION.
01 WS-STUDENT.
05 WS-STUDENT-ID PIC 9(5).
05 WS-NAME PIC A(25).
05 WS-CLASS PIC X(3).
PROCEDURE DIVISION.
OPEN I-O STUDENT.
MOVE '1000' TO STUDENT-ID.
READ STUDENT
KEY IS STUDENT-ID
INVALID KEY DISPLAY ‘KEY IS NOT EXISTING’
END-READ.
MOVE 'Tim Dumais' TO NAME.
REWRITE STUDENT-FILE
END-REWRITE.
CLOSE STUDENT.
STOP RUN.
JCL per eseguire il programma COBOL di cui sopra -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//IN1 DD DSN = OUTPUT-FILE-NAME,DISP = SHR
Quando compili ed esegui il programma sopra, aggiornerà il record -
1000 Tim Dumais 10
Elimina verbo
Il verbo di eliminazione può essere eseguito solo su file indicizzati e relativi. Il file deve essere aperto in modalità IO. Nell'organizzazione di file sequenziali, i record non possono essere eliminati. L'ultimo record letto dall'istruzione Read viene eliminato in caso di modalità di accesso sequenziale. In modalità di accesso casuale, specificare la chiave di registrazione e quindi eseguire l'operazione Elimina.
Sintassi
Di seguito è riportata la sintassi per eliminare un record:
DELETE file-name RECORD
INVALID KEY DISPLAY 'Invalid Key'
NOT INVALID KEY DISPLAY 'Record Deleted'
END-DELETE.
Example - per eliminare un record esistente -
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT STUDENT ASSIGN TO OUT1
ORGANIZATION IS INDEXED
ACCESS IS RANDOM
RECORD KEY IS STUDENT-ID
FILE STATUS IS FS.
DATA DIVISION.
FILE SECTION.
FD STUDENT
01 STUDENT-FILE.
05 STUDENT-ID PIC 9(4).
05 NAME PIC A(12).
05 CLASS PIC X(3).
WORKING-STORAGE SECTION.
01 WS-STUDENT.
05 WS-STUDENT-ID PIC 9(5).
05 WS-NAME PIC A(25).
05 WS-CLASS PIC X(3).
PROCEDURE DIVISION.
OPEN I-O STUDENT.
MOVE '1000' TO STUDENT-ID.
DELETE STUDENT RECORD
INVALID KEY DISPLAY 'Invalid Key'
NOT INVALID KEY DISPLAY 'Record Deleted'
END-DELETE.
CLOSE STUDENT.
STOP RUN.
JCL per eseguire il programma COBOL di cui sopra -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//OUT1 DD DSN = OUTPUT-FILE-NAME,DISP = SHR
Quando compili ed esegui il programma sopra, produce il seguente risultato:
Record Deleted
Avvia Verbo
Il verbo di avvio può essere eseguito solo su file indicizzati e relativi. Viene utilizzato per posizionare il puntatore del file su un record specifico. La modalità di accesso deve essere sequenziale o dinamica. Il file deve essere aperto in modalità I / O o Input.
Sintassi
Di seguito è riportata la sintassi per posizionare il puntatore su un record specifico:
START file-name KEY IS [=, >, <, NOT, <= or >=] rec-key
INVALID KEY DISPLAY 'Invalid Key'
NOT INVALID KEY DISPLAY 'File Pointer Updated'
END-START.
Chiudi Verbo
Il verbo Chiudi viene utilizzato per chiudere un file. Dopo aver eseguito l'operazione di chiusura, le variabili nella struttura del file non saranno disponibili per l'elaborazione. Il collegamento tra programma e file viene perso.
Sintassi
Di seguito è riportata la sintassi per chiudere un file:
CLOSE file-name.