COBOL - czasowniki obsługi plików

Czasowniki obsługi plików służą do wykonywania różnych operacji na plikach. Poniżej znajdują się czasowniki obsługi plików -

  • Open
  • Read
  • Write
  • Rewrite
  • Delete
  • Start
  • Close

Open Verb

Otwórz to pierwsza operacja na plikach, którą należy wykonać. Jeśli otwarcie powiedzie się, na pliku możliwe są tylko dalsze operacje. Dopiero po otwarciu pliku zmienne w strukturze pliku są dostępne do przetwarzania.FILE STATUS zmienna jest aktualizowana po każdej operacji na pliku.

Składnia

OPEN "mode" file-name.

Tutaj nazwa-pliku to literał ciągu, którego użyjesz do nazwania pliku. Plik można otworzyć w następujących trybach -

Sr.No. Tryb i opis
1

Input

Tryb wejściowy jest używany dla istniejących plików. W tym trybie możemy tylko czytać plik, żadne inne operacje na pliku nie są dozwolone.

2

Output

Tryb wyjściowy służy do wstawiania rekordów do plików. Jeślisequential filejest używany i plik przechowuje niektóre rekordy, wtedy istniejące rekordy zostaną najpierw usunięte, a następnie nowe rekordy zostaną wstawione do pliku. Tak się nie stanie w przypadku plikuindexed file lub a relative file.

3

Extend

Tryb rozszerzania służy do dołączania rekordów w pliku sequential file. W tym trybie rekordy są wstawiane na końcu. Jeśli tryb dostępu do plików toRandom lub Dynamic, nie można użyć trybu rozszerzania.

4

I-O

Tryb wejścia-wyjścia służy do odczytywania i przepisywania rekordów pliku.

Przeczytaj czasownik

Czasownik odczytu służy do odczytywania rekordów pliku. Funkcja read polega na pobieraniu rekordów z pliku. Przy każdym czasowniku odczytu do struktury pliku można wczytać tylko jeden rekord. Aby wykonać operację odczytu, otwórz plik w trybie INPUT lub IO. Przy każdej instrukcji odczytu wskaźnik pliku jest zwiększany, a tym samym odczytywane są kolejne rekordy.

Składnia

Poniżej znajduje się składnia do odczytywania rekordów, gdy tryb dostępu do pliku jest sekwencyjny -

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.

Poniżej przedstawiono użyte parametry -

  • NEXT RECORD jest opcjonalny i jest określany, gdy indeksowany plik sekwencyjny jest odczytywany sekwencyjnie.

  • Klauzula INTO jest opcjonalna. struktura-pliku-ws jest zdefiniowana w sekcji WorkingStorage w celu pobrania wartości z instrukcji READ.

  • Warunek AT END zmienia się na True, gdy osiągnięty zostanie koniec pliku.

Example- Poniższy przykład odczytuje istniejący plik przy użyciu organizacji sekwencji wierszy. Ten program można skompilować i uruchomić przy użyciuLive Demo opcja, w której wyświetli wszystkie rekordy obecne w pliku.

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.

Załóżmy, że dane pliku wejściowego są dostępne w input.txt plik zawiera następujące elementy -

20003 Mohtashim M.
20004 Nishant Malik
20005 Amitabh Bachhan

Kiedy kompilujesz i wykonujesz powyższy program, daje on następujący wynik -

20003 Mohtashim M.            
20004 Nishant Malik           
20005 Amitabh Bachhan

Składnia

Poniżej przedstawiono składnię zapisu rekordu, gdy tryb dostępu do pliku jest losowy -

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- Poniższy przykład odczytuje istniejący plik przy użyciu organizacji indeksowanej. Ten program można skompilować i uruchomić przy użyciuJCLna komputerach mainframe, gdzie wyświetli wszystkie rekordy obecne w pliku. Na serwerze mainframes nie używamy plików tekstowych; zamiast tego używamy plików PS.

Załóżmy, że plik obecny na komputerach mainframe ma taką samą zawartość jak plik input.txt w powyższym przykładzie.

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 aby wykonać powyższy program w języku COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//IN1 DD DSN = STUDENT-FILE-NAME,DISP=SHR

Kiedy kompilujesz i wykonujesz powyższy program, daje on następujący wynik -

20005 Amitabh Bachhan

Write Verb

Czasownik zapisu służy do wstawiania rekordów do pliku. Po zapisaniu rekord nie jest już dostępny w buforze rekordów. Przed wstawieniem rekordów do pliku przenieś wartości do bufora rekordów, a następnie wykonaj polecenie zapisu.

Instrukcja Write może być używana z FROMmożliwość bezpośredniego zapisu rekordów z roboczych zmiennych pamięci. From to klauzula opcjonalna. Jeśli tryb dostępu jest sekwencyjny, to aby zapisać rekord, plik musi zostać otwarty w trybie wyjściowym lub rozszerzonym. Jeśli tryb dostępu jest losowy lub dynamiczny, to aby zapisać rekord, plik musi zostać otwarty w trybie wyjścia lub w trybie IO.

Składnia

Poniżej znajduje się składnia odczytu rekordu, gdy organizacja plików jest sekwencyjna -

WRITE record-buffer [FROM ws-file-structure]
END-WRITE.

Poniżej znajduje się składnia odczytu rekordu, gdy organizacja plików jest indeksowana lub względna -

WRITE record-buffer [FROM ws-file-structure]
   INVALID KEY DISPLAY 'Invalid Key'
   NOT INVALID KEY DISPLAY 'Record Inserted'
END-WRITE.

Example - Poniższy przykład pokazuje, jak wstawić nowy rekord do nowego pliku, gdy organizacja jest sekwencyjna.

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 aby wykonać powyższy program w języku COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//OUT1 DD DSN = OUTPUT-FILE-NAME,DISP = (NEW,CATALOG,DELETE)

Kiedy kompilujesz i uruchamiasz powyższy program, doda on nowy rekord do pliku wyjściowego.

1000 Tim         10

Przepisać czasownik

Czasownik przepisania służy do aktualizacji rekordów. Plik należy otworzyć w trybie IO w celu wykonania operacji przepisywania. Może być używany tylko po pomyślnej operacji odczytu. Czasownik przepisania zastępuje ostatni odczytany rekord.

Składnia

Poniżej znajduje się składnia odczytu rekordu, gdy organizacja plików jest sekwencyjna -

REWRITE record-buffer [FROM ws-file-structure]
END-REWRITE.

Poniżej znajduje się składnia odczytu rekordu, gdy organizacja plików jest indeksowana lub względna -

REWRITE record-buffer [FROM ws-file-structure]
   INVALID KEY DISPLAY 'Invalid Key'
   NOT INVALID KEY DISPLAY 'Record Updated'
END-REWRITE.

Example - Poniższy przykład pokazuje, jak zaktualizować istniejący rekord, który wstawiliśmy w poprzednim kroku zapisu -

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 aby wykonać powyższy program w języku COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//IN1 DD DSN = OUTPUT-FILE-NAME,DISP = SHR

Kiedy skompilujesz i uruchomisz powyższy program, zaktualizuje on rekord -

1000 Tim Dumais  10

Usuń czasownik

Czasownik usuwania można wykonać tylko na plikach indeksowanych i względnych. Plik musi być otwarty w trybie IO. W sekwencyjnej organizacji plików nie można usuwać rekordów. Rekord ostatnio odczytany przez instrukcję Read jest usuwany w przypadku trybu dostępu sekwencyjnego. W trybie dostępu swobodnego określ klucz nagrywania, a następnie wykonaj operację usuwania.

Składnia

Poniżej znajduje się składnia usuwania rekordu -

DELETE file-name RECORD
   INVALID KEY DISPLAY 'Invalid Key'
   NOT INVALID KEY DISPLAY 'Record Deleted'
END-DELETE.

Example - aby usunąć istniejący rekord -

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 aby wykonać powyższy program w języku COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//OUT1 DD DSN = OUTPUT-FILE-NAME,DISP = SHR

Kiedy kompilujesz i wykonujesz powyższy program, daje on następujący wynik -

Record Deleted

Start Verb

Czasownik początkowy można wykonać tylko na plikach indeksowanych i względnych. Służy do umieszczania wskaźnika pliku w określonym rekordzie. Tryb dostępu musi być sekwencyjny lub dynamiczny. Plik musi być otwarty w trybie IO lub Input.

Składnia

Poniżej znajduje się składnia umieszczania wskaźnika w określonym rekordzie -

START file-name KEY IS [=, >, <, NOT, <= or >=] rec-key
   INVALID KEY DISPLAY 'Invalid Key'
   NOT INVALID KEY DISPLAY 'File Pointer Updated'
END-START.

Close Verb

Czasownik zamykania służy do zamykania pliku. Po wykonaniu operacji Zamknij zmienne w strukturze pliku nie będą dostępne do przetwarzania. Utracono połączenie między programem a plikiem.

Składnia

Poniżej znajduje się składnia zamykania pliku -

CLOSE file-name.