Учебники

COBOL — Глаголы обработки файлов

Глаголы обработки файлов используются для выполнения различных операций над файлами. Ниже приведены глаголы обработки файлов:

  • открыто
  • Читать
  • Написать
  • перезапись
  • удалять
  • Начните
  • близко

Открытый глагол

Открытие — это первая операция с файлом, которая должна быть выполнена. Если открытие успешно, то только дальнейшие операции возможны с файлом. Только после открытия файла переменные в файловой структуре доступны для обработки. Переменная FILE STATUS обновляется после каждой файловой операции.

Синтаксис

OPEN "mode" file-name.

Здесь file-name — строковый литерал, который вы будете использовать для именования вашего файла. Файл может быть открыт в следующих режимах —

Sr.No. Режим и описание
1

вход

Режим ввода используется для существующих файлов. В этом режиме мы можем только читать файл, другие операции над файлом запрещены.

2

Выход

Режим вывода используется для вставки записей в файлы. Если используется последовательный файл и в нем содержатся некоторые записи, то существующие записи будут сначала удалены, а затем новые записи будут вставлены в файл. Это не произойдет в случае индексированного файла или относительного файла .

3

простираться

Режим расширения используется для добавления записей в последовательный файл . В этом режиме записи вставляются в конце. Если режим доступа к файлу — Случайный или Динамический , то режим расширения не может быть использован.

4

IO

Режим ввода-вывода используется для чтения и перезаписи записей файла.

вход

Режим ввода используется для существующих файлов. В этом режиме мы можем только читать файл, другие операции над файлом запрещены.

Выход

Режим вывода используется для вставки записей в файлы. Если используется последовательный файл и в нем содержатся некоторые записи, то существующие записи будут сначала удалены, а затем новые записи будут вставлены в файл. Это не произойдет в случае индексированного файла или относительного файла .

простираться

Режим расширения используется для добавления записей в последовательный файл . В этом режиме записи вставляются в конце. Если режим доступа к файлу — Случайный или Динамический , то режим расширения не может быть использован.

IO

Режим ввода-вывода используется для чтения и перезаписи записей файла.

Читать глагол

Глагол чтения используется для чтения файловых записей. Функция чтения заключается в извлечении записей из файла. При каждом глаголе чтения в структуру файла может быть прочитана только одна запись. Чтобы выполнить операцию чтения, откройте файл в режиме 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-структура определена в разделе WorkingStorage, чтобы получить значения из оператора READ.

  • AT END условие становится Истиной, когда достигнут конец файла.

СЛЕДУЮЩАЯ ЗАПИСЬ является необязательной и указывается, когда индексированный последовательный файл читается последовательно.

Предложение INTO является необязательным. Структура ws-file-структура определена в разделе WorkingStorage, чтобы получить значения из оператора READ.

AT END условие становится Истиной, когда достигнут конец файла.

Пример. В следующем примере выполняется чтение существующего файла с использованием последовательной организации строк. Эта программа может быть скомпилирована и выполнена с использованием опции 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.

Пример. В следующем примере выполняется чтение существующего файла с использованием проиндексированной организации. Эта программа может быть скомпилирована и выполнена с использованием 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 

Написать глагол

Глагол записи используется для вставки записей в файл. Как только запись записана, она больше не доступна в буфере записи. Перед вставкой записей в файл переместите значения в буфер записей и затем выполните команду записи.

Оператор write может использоваться с опцией 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.

Пример. В следующем примере показано, как вставить новую запись в новый файл, если организация является последовательной.

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.

Пример. В следующем примере показано, как обновить существующую запись, вставленную на предыдущем шаге «Запись».

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.

Пример — удалить существующую запись —

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.

Закрыть глагол

Глагол закрытия используется для закрытия файла. После выполнения операции закрытия переменные в файловой структуре не будут доступны для обработки. Связь между программой и файлом потеряна.

Синтаксис

Ниже приведен синтаксис для закрытия файла —