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.