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.