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.