COBOL - глаголы обработки файлов
Глаголы обработки файлов используются для выполнения различных операций с файлами. Ниже приведены глаголы обработки файлов -
- Open
- Read
- Write
- Rewrite
- Delete
- Start
- Close
Открытый глагол
Открыть - это первая операция с файлом, которую необходимо выполнить. В случае успешного открытия с файлом возможны только дальнейшие операции. Только после открытия файла переменные в файловой структуре доступны для обработки.FILE STATUS переменная обновляется после каждой файловой операции.
Синтаксис
OPEN "mode" file-name.
Здесь имя-файла - это строковый литерал, который вы будете использовать для имени файла. Файл можно открыть в следующих режимах -
Sr. No. | Режим и описание |
---|---|
1 |
Input Режим ввода используется для существующих файлов. В этом режиме мы можем только читать файл, другие операции с файлом запрещены. |
2 |
Output Режим вывода используется для вставки записей в файлы. Еслиsequential fileиспользуется и файл содержит некоторые записи, то сначала будут удалены существующие записи, а затем в файл будут вставлены новые записи. Этого не произойдет в случаеindexed file или relative file. |
3 |
Extend Режим расширения используется для добавления записей в sequential file. В этом режиме записи вставляются в конце. Если режим доступа к файлуRandom или Dynamic, то режим расширения использовать нельзя. |
4 |
I-O Режим ввода-вывода используется для чтения и перезаписи записей файла. |
Читать глагол
Глагол чтения используется для чтения файловых записей. Функция чтения - получить записи из файла. Для каждой команды чтения в файловую структуру может быть прочитана только одна запись. Чтобы выполнить операцию чтения, откройте файл в режиме INPUT или IO. В каждом операторе чтения указатель файла увеличивается, и, следовательно, считываются последующие записи.
Синтаксис
Ниже приводится синтаксис для чтения записей, когда режим доступа к файлам является последовательным:
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.
Ниже приведены используемые параметры -
СЛЕДУЮЩАЯ ЗАПИСЬ является необязательной и указывается, когда индексированный последовательный файл читается последовательно.
Предложение INTO не является обязательным. ws-file-structure определяется в разделе WorkingStorage для получения значений из оператора READ.
Условие AT END становится истинным, когда достигается конец файла.
Example- В следующем примере выполняется чтение существующего файла с использованием последовательной организации строк. Эту программу можно скомпилировать и запустить с помощьюLive Demo вариант, в котором будут отображаться все записи, присутствующие в файле.
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.
Предположим, что данные входного файла доступны в input.txt файл содержит следующее -
20003 Mohtashim M.
20004 Nishant Malik
20005 Amitabh Bachhan
Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:
20003 Mohtashim M.
20004 Nishant Malik
20005 Amitabh Bachhan
Синтаксис
Ниже приведен синтаксис для записи записи, когда режим доступа к файлу является случайным:
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- В следующем примере выполняется чтение существующего файла с использованием индексированной организации. Эту программу можно скомпилировать и запустить с помощьюJCLна мэйнфреймах, где будут отображаться все записи, присутствующие в файле. На сервере мэйнфреймов мы не используем текстовые файлы; вместо этого мы используем файлы PS.
Предположим, что файл, представленный на мэйнфреймах, имеет то же содержимое, что и файл input.txt в приведенном выше примере.
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 для выполнения вышеуказанной программы COBOL -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//IN1 DD DSN = STUDENT-FILE-NAME,DISP=SHR
Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:
20005 Amitabh Bachhan
Написать глагол
Глагол записи используется для вставки записей в файл. После того, как запись записана, она больше не доступна в буфере записи. Перед вставкой записей в файл переместите значения в буфер записи и затем выполните команду записи.
Оператор записи может использоваться с FROMвозможность напрямую записывать записи из переменных рабочего хранилища. From - необязательный пункт. Если режим доступа последовательный, то для записи записи файл должен открываться в режиме вывода или расширении. Если режим доступа случайный или динамический, то для записи записи файл должен открываться в режиме вывода или режиме ввода-вывода.
Синтаксис
Ниже приведен синтаксис для чтения записи, когда файловая организация является последовательной:
WRITE record-buffer [FROM ws-file-structure]
END-WRITE.
Ниже приводится синтаксис для чтения записи, когда файловая организация является индексированной или относительной:
WRITE record-buffer [FROM ws-file-structure]
INVALID KEY DISPLAY 'Invalid Key'
NOT INVALID KEY DISPLAY 'Record Inserted'
END-WRITE.
Example - В следующем примере показано, как вставить новую запись в новый файл, когда организация является последовательной.
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 для выполнения вышеуказанной программы COBOL -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//OUT1 DD DSN = OUTPUT-FILE-NAME,DISP = (NEW,CATALOG,DELETE)
Когда вы скомпилируете и выполните указанную выше программу, она добавит новую запись в выходной файл.
1000 Tim 10
Переписать глагол
Глагол перезаписи используется для обновления записей. Для операций перезаписи файл должен быть открыт в режиме ввода-вывода. Его можно использовать только после успешной операции чтения. Команда перезаписи перезаписывает последнюю прочитанную запись.
Синтаксис
Ниже приведен синтаксис для чтения записи, когда файловая организация является последовательной:
REWRITE record-buffer [FROM ws-file-structure]
END-REWRITE.
Ниже приводится синтаксис для чтения записи, когда файловая организация является индексированной или относительной:
REWRITE record-buffer [FROM ws-file-structure]
INVALID KEY DISPLAY 'Invalid Key'
NOT INVALID KEY DISPLAY 'Record Updated'
END-REWRITE.
Example - В следующем примере показано, как обновить существующую запись, которую мы вставили на предыдущем шаге записи -
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 для выполнения вышеуказанной программы COBOL -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//IN1 DD DSN = OUTPUT-FILE-NAME,DISP = SHR
Когда вы скомпилируете и выполните указанную выше программу, она обновит запись -
1000 Tim Dumais 10
Удалить глагол
Команда удаления может выполняться только для индексированных и относительных файлов. Файл должен быть открыт в режиме ввода-вывода. При последовательной организации файлов записи не могут быть удалены. Запись, последняя прочитанная оператором Read, удаляется в случае режима последовательного доступа. В режиме произвольного доступа укажите ключ записи, а затем выполните операцию удаления.
Синтаксис
Ниже приведен синтаксис для удаления записи -
DELETE file-name RECORD
INVALID KEY DISPLAY 'Invalid Key'
NOT INVALID KEY DISPLAY 'Record Deleted'
END-DELETE.
Example - удалить существующую запись -
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 для выполнения вышеуказанной программы COBOL -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//OUT1 DD DSN = OUTPUT-FILE-NAME,DISP = SHR
Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:
Record Deleted
Начать глагол
Команда запуска может выполняться только для индексированных и относительных файлов. Он используется для размещения указателя файла на определенной записи. Режим доступа должен быть последовательным или динамическим. Файл должен быть открыт в режиме ввода-вывода или ввода.
Синтаксис
Ниже приведен синтаксис для размещения указателя на определенной записи:
START file-name KEY IS [=, >, <, NOT, <= or >=] rec-key
INVALID KEY DISPLAY 'Invalid Key'
NOT INVALID KEY DISPLAY 'File Pointer Updated'
END-START.
Закрыть глагол
Глагол закрытия используется для закрытия файла. После выполнения операции закрытия переменные в файловой структуре не будут доступны для обработки. Связь между программой и файлом потеряна.
Синтаксис
Ниже приведен синтаксис для закрытия файла -
CLOSE file-name.