COBOL - Краткое руководство

Введение в COBOL

COBOL - это язык высокого уровня. Нужно понимать, как работает COBOL. Компьютеры понимают только машинный код, двоичный поток нулей и единиц. Код COBOL должен быть преобразован в машинный код с помощьюcompiler. Запустите исходный код программы через компилятор. Компилятор сначала проверяет наличие синтаксических ошибок, а затем преобразует их в машинный язык. Компилятор создает выходной файл, известный какload module. Этот выходной файл содержит исполняемый код в виде нулей и единиц.

Эволюция COBOL

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

  • В 1959 году COBOL был разработан CODASYL (Конференция по языку систем данных).

  • Следующая версия, COBOL-61, была выпущена в 1961 году с некоторыми изменениями.

  • В 1968 году COBOL был одобрен ANSI в качестве стандартного языка для коммерческого использования (COBOL-68).

  • Он был снова переработан в 1974 и 1985 годах для разработки последующих версий, названных COBOL-74 и COBOL-85 соответственно.

  • В 2002 году был выпущен объектно-ориентированный COBOL, который мог использовать инкапсулированные объекты как обычную часть программирования COBOL.

Важность COBOL

  • COBOL был первым широко используемым языком программирования высокого уровня. Это английский язык, удобный для пользователя. Все инструкции можно закодировать простыми английскими словами.

  • COBOL также используется как язык самодокументирования.

  • COBOL может обрабатывать огромные объемы данных.

  • COBOL совместим со своими предыдущими версиями.

  • COBOL имеет эффективные сообщения об ошибках, поэтому устранение ошибок проще.

Особенности COBOL

Стандартный язык

COBOL - это стандартный язык, который можно компилировать и запускать на таких машинах, как IBM AS / 400, персональных компьютерах и т. Д.

Ориентированный на бизнес

COBOL был разработан для бизнес-приложений, связанных с финансовой областью, областью защиты и т. Д. Он может обрабатывать огромные объемы данных благодаря своим расширенным возможностям обработки файлов.

Надежный язык

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

Структурированный язык

Логические управляющие структуры доступны в COBOL, что упрощает чтение и изменение. COBOL имеет разные подразделения, поэтому его легко отлаживать.

Установка COBOL в Windows / Linux

Для Windows доступно множество бесплатных эмуляторов мэйнфреймов, которые можно использовать для написания и изучения простых программ на COBOL.

Одним из таких эмуляторов является Hercules, который можно легко установить в Windows, выполнив несколько простых шагов, как указано ниже:

  • Загрузите и установите эмулятор Hercules, который доступен на домашнем сайте Hercules: www.hercules-390.eu

  • После того, как вы установили пакет на компьютере с Windows, он создаст папку вроде C:/hercules/mvs/cobol.

  • Запустите командную строку (CMD) и перейдите в каталог C: / hercules / mvs / cobol на CMD.

  • Полное руководство по различным командам для написания и выполнения программ JCL и COBOL можно найти по адресу:

    www.jaymoseley.com/hercules/installmvs/instmvs2.htm

Hercules - это программная реализация с открытым исходным кодом архитектур System / 370 и ESA / 390 для мэйнфреймов в дополнение к новейшей 64-битной z / Architecture. Hercules работает под Linux, Windows, Solaris, FreeBSD и Mac OS X.

Пользователь может подключиться к серверу мэйнфрейма несколькими способами, такими как тонкий клиент, фиктивный терминал, система виртуального клиента (VCS) или система виртуального рабочего стола (VDS). Каждому действующему пользователю предоставляется идентификатор входа в систему для входа в интерфейс Z / OS (TSO / E или ISPF).

Компиляция программ COBOL

Чтобы выполнить программу COBOL в пакетном режиме с использованием JCL, программу необходимо скомпилировать и создать загрузочный модуль со всеми подпрограммами. JCL использует модуль загрузки, а не фактическую программу во время выполнения. Библиотеки загрузки объединяются и передаются в JCL во время выполнения с использованиемJCLLIB или же STEPLIB.

Для компиляции программы на языке COBOL доступно множество утилит компилятора мэйнфрейма. Некоторые корпоративные компании используют такие инструменты управления изменениями, какEndevor, который компилирует и хранит каждую версию программы. Это полезно для отслеживания изменений, внесенных в программу.

//COMPILE   JOB ,CLASS = 6,MSGCLASS = X,NOTIFY = &SYSUID             
//*            
//STEP1     EXEC IGYCRCTL,PARM = RMODE,DYNAM,SSRANGE
//SYSIN     DD DSN = MYDATA.URMI.SOURCES(MYCOBB),DISP = SHR
//SYSLIB    DD DSN = MYDATA.URMI.COPYBOOK(MYCOPY),DISP = SHR
//SYSLMOD   DD DSN = MYDATA.URMI.LOAD(MYCOBB),DISP = SHR
//SYSPRINT  DD SYSOUT=*
//*

IGYCRCTL - это утилита компилятора IBM COBOL. Параметры компилятора передаются с помощью параметра PARM. В приведенном выше примере RMODE инструктирует компилятор использовать режим относительной адресации в программе. Программа COBOL передается с помощью параметра SYSIN. Тетрадь - это библиотека, используемая программой в SYSLIB.

Выполнение программ COBOL

Ниже приведен пример JCL, где программа MYPROG выполняется с использованием входного файла MYDATA.URMI.INPUT и создает два выходных файла, записанных в спул.

//COBBSTEP  JOB CLASS = 6,NOTIFY = &SYSUID
//
//STEP10    EXEC PGM = MYPROG,PARM = ACCT5000
//STEPLIB   DD DSN = MYDATA.URMI.LOADLIB,DISP = SHR
//INPUT1    DD DSN = MYDATA.URMI.INPUT,DISP = SHR
//OUT1      DD SYSOUT=*
//OUT2      DD SYSOUT=*
//SYSIN     DD *
//CUST1     1000
//CUST2     1001
/*

Загрузочный модуль MYPROG находится в MYDATA.URMI.LOADLIB. Важно отметить, что приведенный выше JCL можно использовать только для модуля COBOL, отличного от DB2.

Выполнение программ COBOL-DB2

Для запуска программы COBOL-DB2 в JCL и программе используется специализированная утилита IBM; Регион DB2 и необходимые параметры передаются утилите в качестве входных данных.

Шаги, выполняемые при запуске программы COBOL-DB2, следующие:

  • Когда программа COBOL-DB2 компилируется, вместе с загрузочным модулем создается DBRM (модуль запроса базы данных). DBRM содержит операторы SQL программ COBOL, синтаксис которых проверяется на правильность.

  • DBRM привязан к региону (среде) DB2, в котором будет работать COBOL. Это можно сделать с помощью утилиты IKJEFT01 в JCL.

  • После этапа связывания программа COBOL-DB2 запускается с использованием IKJEFT01 (снова) с библиотекой загрузки и библиотекой DBRM в качестве входных данных для JCL.

//STEP001  EXEC PGM = IKJEFT01
//*
//STEPLIB  DD DSN = MYDATA.URMI.DBRMLIB,DISP = SHR
//*
//input files
//output files
//SYSPRINT DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//SYSDBOUT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//DISPLAY  DD SYSOUT=*
//SYSOUT   DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//SYSTSIN  DD *
   DSN SYSTEM(SSID)
   RUN PROGRAM(MYCOBB) PLAN(PLANNAME) PARM(parameters to cobol program) -
   LIB('MYDATA.URMI.LOADLIB')
   END
/*

В приведенном выше примере MYCOBB - это программа COBOL-DB2, запускаемая с использованием IKJEFT01. Обратите внимание, что имя программы, идентификатор подсистемы DB2 (SSID) и имя плана DB2 передаются в операторе SYSTSIN DD. Библиотека DBRM указана в STEPLIB.

Структура программы COBOL состоит из разделов, как показано на следующем изображении -

Краткое введение в эти подразделения приведено ниже -

  • Sectionsявляются логическим подразделением программной логики. Раздел - это набор абзацев.

  • Paragraphsявляются подразделением секции или подразделения. Это либо определенное пользователем, либо предварительно определенное имя, за которым следует точка, и состоит из нуля или более предложений / записей.

  • Sentencesявляются комбинацией одного или нескольких утверждений. Приговоры появляются только в разделе «Процедура». Предложение должно заканчиваться точкой.

  • Statements значимые операторы COBOL, которые выполняют некоторую обработку.

  • Characters являются самыми низкими в иерархии и не могут быть делимыми.

Вы можете связать вышеупомянутые термины с программой COBOL в следующем примере -

PROCEDURE DIVISION.
A0000-FIRST-PARA SECTION.
FIRST-PARAGRAPH.
ACCEPT WS-ID            - Statement-1  -----|
MOVE '10' TO WS-ID      - Statement-2       |-- Sentence - 1
DISPLAY WS-ID           - Statement-3  -----|
.

Подразделения

Программа COBOL состоит из четырех частей.

Отдел идентификации

Это первый и единственный обязательный раздел каждой программы COBOL. Программист и компилятор используют это разделение для идентификации программы. В этом разделе PROGRAM-ID - единственный обязательный параграф. PROGRAM-ID определяет имя программы, которое может содержать от 1 до 30 символов.

Попробуйте следующий пример, используя Live Demo вариант онлайн.

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
PROCEDURE DIVISION.
DISPLAY 'Welcome to Tutorialspoint'.
STOP RUN.

Ниже приводится JCL для выполнения указанной выше программы COBOL.

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

Welcome to Tutorialspoint

Отдел окружающей среды

Разделение среды используется для указания входных и выходных файлов для программы. Он состоит из двух разделов -

  • Configuration sectionпредоставляет информацию о системе, в которой программа написана и выполняется. Он состоит из двух абзацев -

    • Исходный компьютер - система, используемая для компиляции программы.

    • Объектный компьютер - система, используемая для выполнения программы.

  • Input-Output sectionпредоставляет информацию о файлах, которые будут использоваться в программе. Он состоит из двух абзацев -

    • Файловый контроль - предоставляет информацию о наборах внешних данных, используемых в программе.

    • Контроль ввода-вывода - предоставляет информацию о файлах, используемых в программе.

ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
   SOURCE-COMPUTER. XXX-ZOS.
   OBJECT-COMPUTER. XXX-ZOS.

INPUT-OUTPUT SECTION.
   FILE-CONTROL.
   SELECT FILEN ASSIGN TO DDNAME
   ORGANIZATION IS SEQUENTIAL.

Отдел данных

Разделение данных используется для определения переменных, используемых в программе. Он состоит из четырех разделов -

  • File section используется для определения структуры записи файла.

  • Working-Storage section используется для объявления временных переменных и файловых структур, которые используются в программе.

  • Local-Storage sectionаналогичен разделу «Рабочее хранилище». Единственное отличие состоит в том, что переменные будут выделяться и инициализироваться каждый раз при запуске программы.

  • Linkage section используется для описания имен данных, полученных от внешней программы.

COBOL Program

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

ENVIRONMENT DIVISION.
   INPUT-OUTPUT SECTION.
   FILE-CONTROL.
   SELECT FILEN ASSIGN TO INPUT.
      ORGANIZATION IS SEQUENTIAL.
      ACCESS IS SEQUENTIAL.

DATA DIVISION.
   FILE SECTION.
   FD FILEN
   01 NAME PIC A(25).
   
   WORKING-STORAGE SECTION.
   01 WS-STUDENT PIC A(30).
   01 WS-ID PIC 9(5).

   LOCAL-STORAGE SECTION.
   01 LS-CLASS PIC 9(3).
   
   LINKAGE SECTION.
   01 LS-ID PIC 9(5).
   
PROCEDURE DIVISION.
   DISPLAY 'Executing COBOL program using JCL'.
STOP RUN.

В JCL выполнить указанную выше программу COBOL следующим образом:

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//INPUT DD DSN = ABC.EFG.XYZ,DISP = SHR

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

Executing COBOL program using JCL

Отдел процедур

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

В процедурном разделе должно быть хотя бы одно заявление. Последним оператором, завершающим выполнение в этом разделе, является либоSTOP RUN который используется в вызывающих программах или EXIT PROGRAM который используется в названных программах.

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-NAME PIC A(30).
   01 WS-ID PIC 9(5) VALUE 12345.

PROCEDURE DIVISION.
   A000-FIRST-PARA.
   DISPLAY 'Hello World'.
   MOVE 'TutorialsPoint' TO WS-NAME.
   DISPLAY "My name is : "WS-NAME.
   DISPLAY "My ID is : "WS-ID.
STOP RUN.

JCL для выполнения вышеуказанной программы COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

Hello World
My name is : TutorialsPoint
My ID is : 12345

Набор символов

«Персонажи» - самые низкие в иерархии, и их нельзя разделить дальше. Набор символов COBOL включает 78 символов, которые показаны ниже -

Sr.No. Характер и описание
1

A-Z

Алфавиты (верхний регистр)

2

a-z

Алфавиты (нижний регистр)

3

0-9

Числовой

4

 

Космос

5

+

Знак плюс

6

-

Знак минус или дефис

7

*

Звездочка

8

/

Косая черта

9

$

Знак валюты

10

,

Запятая

11

;

Точка с запятой

12

.

Десятичная точка или точка

13

"

Кавычки

14

(

Левая скобка

15

)

Правая скобка

16

>

Лучше чем

17

<

Меньше, чем

18

:

Двоеточие

19

'

Апостроф

20

=

Знак равенства

Лист кодирования

Исходная программа COBOL должна быть написана в формате, приемлемом для компиляторов. Программы COBOL написаны на таблицах кодирования COBOL. В каждой строке кода кода имеется 80 позиций.

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

Позиции Поле Описание
1-6 Номера столбцов Зарезервировано для номеров строк.
7 Индикатор Он может иметь звездочку (*), обозначающую комментарии, дефис (-), обозначающий продолжение, и косую черту (/), обозначающий подачу формы.
8-11 Площадь А Все разделы, разделы, параграфы и некоторые специальные записи COBOL должны начинаться в области A.
12-72 Площадь B Все операторы COBOL должны начинаться в области B.
73-80 Зона идентификации Программист может использовать его по мере необходимости.

пример

В следующем примере показана таблица кодирования COBOL -

000100 IDENTIFICATION DIVISION.                                         000100
000200 PROGRAM-ID. HELLO.                                               000101
000250* THIS IS A COMMENT LINE                                          000102
000300 PROCEDURE DIVISION.                                              000103
000350 A000-FIRST-PARA.                                                 000104
000400     DISPLAY “Coding Sheet”.                                      000105
000500 STOP RUN.                                                        000106

JCL для выполнения вышеуказанной программы COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

Coding Sheet

Строки символов

Строки символов образуются путем объединения отдельных символов. Строка символов может быть

  • Comment,
  • Буквальный, или
  • COBOL слово.

Все строки символов должны заканчиваться separators. Разделитель используется для разделения символьных строк.

Часто используемые разделители - пробел, запятая, точка, апостроф, левая / правая скобка и кавычки.

Комментарий

Комментарий - это строка символов, не влияющая на выполнение программы. Это может быть любая комбинация символов.

Есть два типа комментариев -

Строка комментария

Строку комментария можно написать в любом столбце. Компилятор не проверяет синтаксис строки комментария и обрабатывает ее для документации.

Запись комментария

Записи комментариев - это те, которые включены в необязательные параграфы Идентификационного отдела. Они написаны в области B, и программисты используют ее для справки.

Текст выделен Bold прокомментированные записи в следующем примере -

000100 IDENTIFICATION DIVISION.                                         000100
000150 PROGRAM-ID. HELLO.                                               000101 
000200 AUTHOR. TUTORIALSPOINT.                                          000102
000250* THIS IS A COMMENT LINE                                          000103
000300 PROCEDURE DIVISION.                                              000104
000350 A000-FIRST-PARA.                                                 000105  
000360/ First Para Begins - Documentation Purpose                       000106
000400     DISPLAY “Comment line”.                                      000107
000500 STOP RUN.                                                        000108

JCL выполнить вышеуказанную программу COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

Comment Line

Буквальный

Литерал - это константа, которая жестко запрограммирована в программе. В следующем примере «Hello World» является буквальным.

PROCEDURE DIVISION.
DISPLAY 'Hello World'.

Как обсуждается ниже, существует два типа литералов:

Буквенно-цифровой литерал

Буквенно-цифровые литералы заключаются в кавычки или апострофы. Длина может быть до 160 символов. Апостроф или цитата могут быть частью литерала, только если они парные. Начало и конец буквального слова должны быть одинаковыми, апостроф или цитата.

Example

В следующем примере показаны допустимые и недопустимые буквенно-цифровые литералы -

Valid:
   ‘This is valid’
   "This is valid"
   ‘This isn’’t invalid’

Invalid:
   ‘This is invalid”
   ‘This isn’t valid’

Числовой литерал

Числовой литерал - это комбинация цифр от 0 до 9, +, - или десятичной точки. Длина может быть до 18 символов. Знак не может быть самым правым символом. Десятичная точка не должна стоять в конце.

Example

В следующем примере показаны допустимые и недопустимые числовые литералы -

Valid:
   100
   +10.9
   -1.9

Invalid:
   1,00
   10.
   10.9-

COBOL Word

COBOL Word - это строка символов, которая может быть зарезервированным словом или заданным пользователем словом. Длина может быть до 30 символов.

Определяемые пользователем

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

Зарезервированные слова

Зарезервированные слова - это заранее определенные слова в COBOL. Различные типы зарезервированных слов, которые мы часто используем, следующие:

  • Keywords например ДОБАВИТЬ, ПРИНЯТЬ, ПЕРЕМЕСТИТЬ и т. д.

  • Special characters такие слова, как +, -, *, <, <= и т. д.

  • Figurative constants являются постоянными значениями, такими как ZERO, SPACES и т.д. Все постоянные значения образных констант указаны в следующей таблице.

Образные константы

Sr.No. Образные константы и описание
1

HIGH-VALUES

Один или несколько символов, занимающих наивысшую позицию в порядке убывания.

2

LOW-VALUES

Один или несколько символов имеют нули в двоичном представлении.

3

ZERO/ZEROES

Один или несколько нулей в зависимости от размера переменной.

4

SPACES

Одно или несколько пробелов.

5

QUOTES

Одиночные или двойные кавычки.

6

ALL literal

Заполняет элемент данных литералом.

Data Division используется для определения переменных, используемых в программе. Чтобы описать данные в COBOL, нужно понимать следующие термины -

  • Имя данных
  • Номер уровня
  • Пункт с изображением
  • Предложение о стоимости
01            TOTAL-STUDENTS            PIC9(5)            VALUE '125'.
|                    |                    |                    |
|                    |                    |                    |
|                    |                    |                    | 
Level Number     Data Name           Picture Clause       Value Clause

Имя данных

Имена данных должны быть определены в Отделе данных перед их использованием в Отделе процедур. У них должно быть определенное пользователем имя; зарезервированные слова не могут быть использованы. Имена данных указывают на ячейки памяти, в которых хранятся фактические данные. Они могут быть элементарного или группового типа.

пример

В следующем примере показаны допустимые и недопустимые имена данных -

Valid:
   WS-NAME
   TOTAL-STUDENTS
   A100
   100B

Invalid:
   MOVE            (Reserved Words)
   COMPUTE         (Reserved Words)
   100             (No Alphabet)
   100+B           (+ is not allowed)

Номер уровня

Номер уровня используется для указания уровня данных в записи. Они используются, чтобы различать элементарные элементы и элементы группы. Элементарные элементы можно сгруппировать вместе для создания групповых элементов.

Sr.No. Номер и описание уровня
1

01

Запись описания записи

2

02 to 49

Групповые и элементарные предметы

3

66

Переименовать пункты статьи

4

77

Предметы, которые нельзя разделить

5

88

Запись названия условия

  • Elementary itemsне могут быть разделены дальше. Номер уровня, имя данных, предложение Picture и предложение Value (необязательно) используются для описания элементарного элемента.

  • Group itemsсостоят из одного или нескольких элементарных элементов. Номер уровня, имя данных и предложение Value (необязательно) используются для описания элемента группы. Номер уровня группы всегда 01.

пример

В следующем примере показаны групповые и элементарные элементы -

DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-NAME    PIC X(25).                               ---> ELEMENTARY ITEM 
01 WS-CLASS   PIC 9(2)  VALUE  '10'.                   ---> ELEMENTARY ITEM

01 WS-ADDRESS.                                         ---> GROUP ITEM   
   05 WS-HOUSE-NUMBER    PIC 9(3).                     ---> ELEMENTARY ITEM
   05 WS-STREET          PIC X(15).                    ---> ELEMENTARY ITEM
   05 WS-CITY            PIC X(15).                    ---> ELEMENTARY ITEM
   05 WS-COUNTRY         PIC X(15)  VALUE 'INDIA'.     ---> ELEMENTARY ITEM

Пункт с изображением

Предложение Picture используется для определения следующих элементов -

  • Data typeможет быть числовым, буквенным или буквенно-цифровым. Числовой тип состоит только из цифр от 0 до 9. Алфавитный тип состоит из букв от A до Z и пробелов. Буквенно-цифровой тип состоит из цифр, букв и специальных символов.

  • Signможно использовать с числовыми данными. Может быть либо +, либо -.

  • Decimal point positionможно использовать с числовыми данными. Предполагаемая позиция - это позиция десятичной точки, которая не включается в данные.

  • Length определяет количество байтов, используемых элементом данных.

Символы, используемые в предложении Picture -

Sr.No. Символ и описание
1

9

Числовой

2

A

По алфавиту

3

X

Буквенно-цифровой

4

V

Неявное десятичное число

5

S

Подписать

6

P

Предполагаемый десятичный

пример

В следующем примере показано использование предложения PIC -

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-NUM1 PIC S9(3)V9(2).
   01 WS-NUM2 PIC PPP999.
   01 WS-NUM3 PIC S9(3)V9(2) VALUE -123.45.
   01 WS-NAME PIC A(6) VALUE 'ABCDEF'.
   01 WS-ID PIC X(5) VALUE 'A121$'.

PROCEDURE DIVISION.
   DISPLAY "WS-NUM1 : "WS-NUM1.
   DISPLAY "WS-NUM2 : "WS-NUM2.
   DISPLAY "WS-NUM3 : "WS-NUM3.
   DISPLAY "WS-NAME : "WS-NAME.
   DISPLAY "WS-ID : "WS-ID.
STOP RUN.

JCL для выполнения вышеуказанной программы COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

WS-NUM1 : +000.00
WS-NUM2 : .000000
WS-NUM3 : -123.45
WS-NAME : ABCDEF
WS-ID : A121$

Предложение о стоимости

Предложение Value - это необязательное предложение, которое используется для инициализации элементов данных. Значения могут быть числовым буквальным, буквенно-цифровым буквальным или образной константой. Его можно использовать как с групповыми, так и с элементарными элементами.

пример

В следующем примере показано использование предложения VALUE -

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-NUM1 PIC 99V9 VALUE IS 3.5.
   01 WS-NAME PIC A(6) VALUE 'ABCD'.
   01 WS-ID PIC 99 VALUE ZERO.

PROCEDURE DIVISION.
   DISPLAY "WS-NUM1 : "WS-NUM1.
   DISPLAY "WS-NAME : "WS-NAME.
   DISPLAY "WS-ID   : "WS-ID.
STOP RUN.

JCL для выполнения вышеуказанной программы COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

WS-NUM1 : 03.5
WS-NAME : ABCD
WS-ID   : 00

COBOL-глаголы используются в разделении процедур для обработки данных. Утверждение всегда начинается с глагола COBOL. Есть несколько глаголов COBOL с разными типами действий.

Глаголы ввода / вывода

Команды ввода / вывода используются для получения данных от пользователя и отображения вывода программ COBOL. Для этого процесса используются следующие два глагола -

Принять глагол

Глагол Accept используется для получения таких данных, как дата, время и день, из операционной системы или напрямую от пользователя. Если программа принимает данные от пользователя, их необходимо передать через JCL. При получении данных из операционной системы включена опция FROM, как показано в следующем примере -

ACCEPT WS-STUDENT-NAME.
ACCEPT WS-DATE FROM SYSTEM-DATE.

Показать глагол

Команда Display используется для отображения вывода программы COBOL.

DISPLAY WS-STUDENT-NAME.
DISPLAY "System date is : " WS-DATE.

COBOL PROGRAM

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-STUDENT-NAME PIC X(25).
   01 WS-DATE PIC X(10).

PROCEDURE DIVISION.
   ACCEPT WS-STUDENT-NAME.
   ACCEPT WS-DATE FROM DATE.
   DISPLAY "Name :  " WS-STUDENT-NAME.
   DISPLAY "Date : " WS-DATE.

STOP RUN.

JCL для выполнения вышеуказанной программы COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//INPUT DD DSN=PROGRAM.DIRECTORY,DISP=SHR
//SYSIN DD *
TutorialsPoint
/*

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

Name : TutorialsPoint
Date : 200623

Инициализировать глагол

Команда инициализации используется для инициализации элемента группы или элементарного элемента. Имена данных с предложением RENAME не могут быть инициализированы. Элементы числовых данных заменяются НУЛЯМИ. Буквенно-цифровые или буквенные элементы данных заменяются ПРОБЕЛОМ. Если мы включим термин REPLACING, то элементы данных могут быть инициализированы заданным замещающим значением, как показано в следующем примере:

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-NAME PIC A(30) VALUE 'ABCDEF'.
   01 WS-ID PIC 9(5).
   01 WS-ADDRESS. 
   05 WS-HOUSE-NUMBER PIC 9(3).
   05 WS-COUNTRY PIC X(15).
   05 WS-PINCODE PIC 9(6) VALUE 123456.

PROCEDURE DIVISION.
   A000-FIRST-PARA.
   INITIALIZE WS-NAME, WS-ADDRESS.
   INITIALIZE WS-ID REPLACING NUMERIC DATA BY 12345.
   DISPLAY "My name is   : "WS-NAME.
   DISPLAY "My ID is     : "WS-ID.
   DISPLAY "Address      : "WS-ADDRESS.
   DISPLAY "House Number : "WS-HOUSE-NUMBER.
   DISPLAY "Country      : "WS-COUNTRY.
   DISPLAY "Pincode      : "WS-PINCODE.

STOP RUN.

JCL для выполнения вышеуказанной программы COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

My name is   :                               
My ID is     : 12345
Address      : 000               000000
House Number : 000
Country      :                
Pincode      : 000000

Переместить глагол

Команда перемещения используется для копирования данных из исходных данных в данные назначения. Его можно использовать как для элементарных, так и для групповых элементов данных. Для элементов данных группы используется MOVE CORRESPONDING / CORR. В варианте «попробуйте» MOVE CORR не работает; но на мэйнфрейм-сервере это будет работать.

Для перемещения данных из строки используется MOVE (x: l), где x - начальная позиция, а l - длина. Данные будут усечены, если предложение PIC элемента данных назначения меньше, чем предложение PIC элемента данных источника. Если предложение PIC элемента данных назначения больше, чем предложение PIC элемента данных источника, то в дополнительные байты будут добавлены НУЛИ или ПРОБЕЛЫ. Следующий пример проясняет это.

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-NUM1 PIC 9(9).
   01 WS-NUM2 PIC 9(9).
   01 WS-NUM3 PIC 9(5).
   01 WS-NUM4 PIC 9(6).
   01 WS-ADDRESS. 
   05 WS-HOUSE-NUMBER PIC 9(3).
   05 WS-COUNTRY PIC X(5).
   05 WS-PINCODE PIC 9(6).
   01 WS-ADDRESS1. 
   05 WS-HOUSE-NUMBER1 PIC 9(3).
   05 WS-COUNTRY1 PIC X(5).
   05 WS-PINCODE1 PIC 9(6).

PROCEDURE DIVISION.
   A000-FIRST-PARA.
   MOVE 123456789 TO WS-NUM1.
   MOVE WS-NUM1 TO WS-NUM2 WS-NUM3.
   MOVE WS-NUM1(3:6) TO WS-NUM4.
   MOVE 123 TO WS-HOUSE-NUMBER.
   MOVE 'INDIA' TO WS-COUNTRY.
   MOVE 112233 TO WS-PINCODE.
   MOVE WS-ADDRESS TO WS-ADDRESS1.

   DISPLAY "WS-NUM1     : " WS-NUM1
   DISPLAY "WS-NUM2     : " WS-NUM2
   DISPLAY "WS-NUM3     : " WS-NUM3
   DISPLAY "WS-NUM4     : " WS-NUM4
   DISPLAY "WS-ADDRESS  : " WS-ADDRESS
   DISPLAY "WS-ADDRESS1 : " WS-ADDRESS1

STOP RUN.

JCL для выполнения указанной выше программы COBOL.

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

WS-NUM1     : 123456789
WS-NUM2     : 123456789
WS-NUM3     : 56789
WS-NUM4     : 345678
WS-ADDRESS  : 123INDIA112233
WS-ADDRESS1 : 123INDIA112233

Правовые ходы

В следующей таблице представлена ​​информация о законных ходах -

По алфавиту Буквенно-цифровой Числовой
По алфавиту Возможно Возможно Невозможно
Буквенно-цифровой Возможно Возможно Возможно
Числовой Невозможно Возможно Возможно

Добавить глагол

Глагол добавления используется для сложения двух или более чисел и сохранения результата в операнде назначения.

Синтаксис

Ниже приведен синтаксис для добавления двух или более чисел -

ADD A B TO C D

ADD A B C TO D GIVING E

ADD CORR WS-GROUP1 TO WS-GROUP2

В синтаксисе-1 добавляются A, B, C, и результат сохраняется в C (C = A + B + C). A, B, D складываются, и результат сохраняется в D (D = A + B + D).

В синтаксисе-2 добавляются A, B, C, D, и результат сохраняется в E (E = A + B + C + D).

В синтаксисе-3 элементы подгруппы в WS-GROUP1 и WS-GROUP2 добавляются, а результат сохраняется в WS-GROUP2.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-NUM1 PIC 9(9) VALUE 10 .
   01 WS-NUM2 PIC 9(9) VALUE 10.
   01 WS-NUM3 PIC 9(9) VALUE 10.
   01 WS-NUM4 PIC 9(9) VALUE 10.
   01 WS-NUMA PIC 9(9) VALUE 10.
   01 WS-NUMB PIC 9(9) VALUE 10.
   01 WS-NUMC PIC 9(9) VALUE 10.
   01 WS-NUMD PIC 9(9) VALUE 10.
   01 WS-NUME PIC 9(9) VALUE 10.

PROCEDURE DIVISION.
   ADD WS-NUM1 WS-NUM2 TO WS-NUM3 WS-NUM4.
   ADD WS-NUMA WS-NUMB WS-NUMC TO WS-NUMD GIVING WS-NUME.
   DISPLAY "WS-NUM1     : " WS-NUM1
   DISPLAY "WS-NUM2     : " WS-NUM2
   DISPLAY "WS-NUM3     : " WS-NUM3
   DISPLAY "WS-NUM4     : " WS-NUM4
   DISPLAY "WS-NUMA     : " WS-NUMA
   DISPLAY "WS-NUMB     : " WS-NUMB
   DISPLAY "WS-NUMC     : " WS-NUMC
   DISPLAY "WS-NUMD     : " WS-NUMD
   DISPLAY "WS-NUME     : " WS-NUME

STOP RUN.

JCL для выполнения вышеуказанной программы COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

WS-NUM1     : 000000010
WS-NUM2     : 000000010
WS-NUM3     : 000000030
WS-NUM4     : 000000030
WS-NUMA     : 000000010
WS-NUMB     : 000000010
WS-NUMC     : 000000010
WS-NUMD     : 000000010
WS-NUME     : 000000040

Вычесть глагол

Глагол вычитания используется для операций вычитания.

Синтаксис

Ниже приведен синтаксис для операций вычитания -

SUBTRACT A B FROM C D

SUBTRACT A B C FROM D GIVING E

SUBTRACT CORR WS-GROUP1 TO WS-GROUP2

В синтаксисе-1 A и B складываются и вычитаются из C. Результат сохраняется в C (C = C- (A + B)). A и B складываются и вычитаются из D. Результат сохраняется в D (D = D- (A + B)).

В синтаксисе-2 A, B, C складываются и вычитаются из D. Результат сохраняется в E (E = D- (A + B + C))

В синтаксисе-3 элементы подгруппы в WS-GROUP1 и WS-GROUP2 вычитаются, и результат сохраняется в WS-GROUP2.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-NUM1 PIC 9(9) VALUE 10 .
   01 WS-NUM2 PIC 9(9) VALUE 10.
   01 WS-NUM3 PIC 9(9) VALUE 100.
   01 WS-NUM4 PIC 9(9) VALUE 100.
   01 WS-NUMA PIC 9(9) VALUE 10.
   01 WS-NUMB PIC 9(9) VALUE 10.
   01 WS-NUMC PIC 9(9) VALUE 10.
   01 WS-NUMD PIC 9(9) VALUE 100.
   01 WS-NUME PIC 9(9) VALUE 10.

PROCEDURE DIVISION.
   SUBTRACT WS-NUM1 WS-NUM2 FROM WS-NUM3 WS-NUM4.
   SUBTRACT WS-NUMA WS-NUMB WS-NUMC FROM WS-NUMD GIVING WS-NUME.

   DISPLAY "WS-NUM1     : " WS-NUM1
   DISPLAY "WS-NUM2     : " WS-NUM2
   DISPLAY "WS-NUM3     : " WS-NUM3
   DISPLAY "WS-NUM4     : " WS-NUM4
   DISPLAY "WS-NUMA     : " WS-NUMA
   DISPLAY "WS-NUMB     : " WS-NUMB
   DISPLAY "WS-NUMC     : " WS-NUMC
   DISPLAY "WS-NUMD     : " WS-NUMD
   DISPLAY "WS-NUME     : " WS-NUME

STOP RUN.

JCL для выполнения вышеуказанной программы COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

WS-NUM1     : 000000010
WS-NUM2     : 000000010
WS-NUM3     : 000000080
WS-NUM4     : 000000080
WS-NUMA     : 000000010
WS-NUMB     : 000000010
WS-NUMC     : 000000010
WS-NUMD     : 000000100
WS-NUME     : 000000070

Умножить глагол

Глагол умножения используется для операций умножения.

Синтаксис

Ниже приведен синтаксис для умножения двух или более чисел -

MULTIPLY A BY B C

MULTIPLY A BY B GIVING E

В синтаксисе-1 A и B умножаются, и результат сохраняется в B (B = A * B). A и C умножаются, и результат сохраняется в C (C = A * C).

В синтаксисе-2 A и B умножаются, и результат сохраняется в E (E = A * B).

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-NUM1 PIC 9(9) VALUE 10 .
   01 WS-NUM2 PIC 9(9) VALUE 10.
   01 WS-NUM3 PIC 9(9) VALUE 10.
   01 WS-NUMA PIC 9(9) VALUE 10.
   01 WS-NUMB PIC 9(9) VALUE 10.
   01 WS-NUMC PIC 9(9) VALUE 10.

PROCEDURE DIVISION.
   MULTIPLY WS-NUM1 BY WS-NUM2 WS-NUM3.
   MULTIPLY WS-NUMA BY WS-NUMB GIVING WS-NUMC.
   
   DISPLAY "WS-NUM1     : " WS-NUM1
   DISPLAY "WS-NUM2     : " WS-NUM2
   DISPLAY "WS-NUM3     : " WS-NUM3
   DISPLAY "WS-NUMA     : " WS-NUMA
   DISPLAY "WS-NUMB     : " WS-NUMB
   DISPLAY "WS-NUMC     : " WS-NUMC
   
STOP RUN.

JCL для выполнения вышеуказанной программы COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

WS-NUM1     : 000000010
WS-NUM2     : 000000100
WS-NUM3     : 000000100
WS-NUMA     : 000000010
WS-NUMB     : 000000010
WS-NUMC     : 000000100

Разделить глагол

Глагол Divide используется для операций деления.

Синтаксис

Ниже приведен синтаксис для операций деления -

DIVIDE A INTO B

DIVIDE A BY B GIVING C REMAINDER R

В синтаксисе-1 B делится на A, и результат сохраняется в B (B = B / A).

В синтаксисе 2 A делится на B, и результат сохраняется в C (C = A / B), а остаток сохраняется в R.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-NUM1 PIC 9(9) VALUE 5.
   01 WS-NUM2 PIC 9(9) VALUE 250.
   01 WS-NUMA PIC 9(9) VALUE 100.
   01 WS-NUMB PIC 9(9) VALUE 15.
   01 WS-NUMC PIC 9(9).
   01 WS-REM PIC 9(9). 

PROCEDURE DIVISION.
   DIVIDE WS-NUM1 INTO WS-NUM2.
   DIVIDE WS-NUMA BY WS-NUMB GIVING WS-NUMC REMAINDER WS-REM.
   DISPLAY "WS-NUM1     : " WS-NUM1
   DISPLAY "WS-NUM2     : " WS-NUM2
   DISPLAY "WS-NUMA     : " WS-NUMA
   DISPLAY "WS-NUMB     : " WS-NUMB
   DISPLAY "WS-NUMC     : " WS-NUMC
   DISPLAY "WS-REM      : " WS-REM
   
STOP RUN.

JCL для выполнения вышеуказанной программы COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

WS-NUM1     : 000000005
WS-NUM2     : 000000050
WS-NUMA     : 000000100
WS-NUMB     : 000000015
WS-NUMC     : 000000006
WS-REM      : 000000010

Вычислить заявление

Оператор Compute используется для записи арифметических выражений в COBOL. Это замена для сложения, вычитания, умножения и деления.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-NUM1 PIC 9(9) VALUE 10 .
   01 WS-NUM2 PIC 9(9) VALUE 10.
   01 WS-NUM3 PIC 9(9) VALUE 10.
   01 WS-NUMA PIC 9(9) VALUE 50.
   01 WS-NUMB PIC 9(9) VALUE 10.
   01 WS-NUMC PIC 9(9).

PROCEDURE DIVISION.
   COMPUTE WS-NUMC= (WS-NUM1 * WS-NUM2) - (WS-NUMA / WS-NUMB) + WS-NUM3.
   DISPLAY "WS-NUM1     : " WS-NUM1
   DISPLAY "WS-NUM2     : " WS-NUM2
   DISPLAY "WS-NUM3     : " WS-NUM3
   DISPLAY "WS-NUMA     : " WS-NUMA
   DISPLAY "WS-NUMB     : " WS-NUMB
   DISPLAY "WS-NUMC     : " WS-NUMC

STOP RUN.

JCL для выполнения указанной выше программы COBOL.

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

WS-NUM1     : 000000010
WS-NUM2     : 000000010
WS-NUM3     : 000000010
WS-NUMA     : 000000050
WS-NUMB     : 000000010
WS-NUMC     : 000000105

Макет COBOL - это описание использования каждого поля и содержащихся в нем значений. Ниже приведены записи описания данных, используемые в COBOL.

  • Новое определение статьи
  • Пункт переименования
  • Положение об использовании
  • Copybooks

Новое определение статьи

Предложение Redefines используется для определения хранилища с другим описанием данных. Если один или несколько элементов данных не используются одновременно, то то же хранилище можно использовать для другого элемента данных. Таким образом, одно и то же хранилище может относиться к разным элементам данных.

Синтаксис

Ниже приведен синтаксис предложения Redefines -

01 WS-OLD PIC X(10).
01 WS-NEW1 REDEFINES WS-OLD PIC 9(8).
01 WS-NEW2 REDEFINES WS-OLD PIC A(10).

Ниже приведены подробные сведения об используемых параметрах -

  • WS-OLD - это переопределенный элемент
  • WS-NEW1 и WS-NEW2 - это новое определение

Номера уровней переопределяемого предмета и переопределяемого предмета должны быть одинаковыми и не могут быть номерами 66 или 88. Не используйте предложение VALUE с переопределяющим элементом. В разделе файлов не используйте предложение переопределения с номером уровня 01. Определение переопределения должно быть следующим описанием данных, которое вы хотите переопределить. Переопределенный элемент всегда будет иметь то же значение, что и переопределенный элемент.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-DESCRIPTION.
   05 WS-DATE1 VALUE '20140831'.
   10 WS-YEAR PIC X(4).
   10 WS-MONTH PIC X(2).
   10 WS-DATE PIC X(2).
   05 WS-DATE2 REDEFINES WS-DATE1 PIC 9(8).

PROCEDURE DIVISION.
   DISPLAY "WS-DATE1 : "WS-DATE1.
   DISPLAY "WS-DATE2 : "WS-DATE2.

STOP RUN.

JCL для выполнения вышеуказанной программы COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

WS-DATE1 : 20140831
WS-DATE2 : 20140831

Пункт переименования

Предложение Renames используется для присвоения различных имен существующим элементам данных. Он используется для повторной группировки имен данных и присвоения им нового имени. Новые имена данных можно переименовывать в группах или элементарных элементах. Уровень 66 зарезервирован для переименований.

Syntax

Ниже приведен синтаксис предложения Renames -

01 WS-OLD.
10 WS-A PIC 9(12).
10 WS-B PIC X(20).
10 WS-C PIC A(25).
10 WS-D PIC X(12).
66 WS-NEW RENAMES WS-A THRU WS-C.

Переименование возможно только на том же уровне. В приведенном выше примере WS-A, WS-B и WS-C находятся на одном уровне. Определение переименования должно быть следующим описанием данных, которое вы хотите переименовать. Не используйте Renames с номером уровня 01, 77 или 66. Имена данных, используемые для переименований, должны идти последовательно. Элементы данных с предложением происходят не могут быть переименованы.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-DESCRIPTION.
   05 WS-NUM.
   10 WS-NUM1 PIC 9(2) VALUE 20.
   10 WS-NUM2 PIC 9(2) VALUE 56.
   05 WS-CHAR.
   10 WS-CHAR1 PIC X(2) VALUE 'AA'.
   10 WS-CHAR2 PIC X(2) VALUE 'BB'.
   66 WS-RENAME RENAMES WS-NUM2 THRU WS-CHAR2.

PROCEDURE DIVISION.
   DISPLAY "WS-RENAME : " WS-RENAME.
   
STOP RUN.

JCL для выполнения вышеуказанной программы COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

WS-RENAME : 56AABB

Положение об использовании

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

Дисплей

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

В следующем примере вычисляется количество требуемых байтов -

01 WS-NUM PIC S9(5)V9(3) USAGE IS DISPLAY.
It requires 8 bytes as sign and decimal doesn't require any byte.

01 WS-NUM PIC 9(5) USAGE IS DISPLAY.
It requires 5 bytes as sign.

ВЫЧИСЛИТЕЛЬНЫЙ / КОМП

Элемент данных хранится в двоичном формате. Здесь элементы данных должны быть целыми.

В следующем примере вычисляется количество требуемых байтов -

01 WS-NUM PIC S9(n) USAGE IS COMP.

If 'n' = 1 to 4, it takes 2 bytes.
If 'n' = 5 to 9, it takes 4 bytes.
If 'n' = 10 to 18, it takes 8 bytes.

КОМП-1

Элемент данных похож на Real или Float и представлен как число с плавающей запятой одинарной точности. Внутри данные хранятся в шестнадцатеричном формате. COMP-1 не принимает пункт PIC. Здесь 1 слово равно 4 байтам.

КОМП-2

Элемент данных похож на Long или Double и представлен как число с плавающей запятой двойной точности. Внутри данные хранятся в шестнадцатеричном формате. COMP-2 не определяет пункт PIC. Здесь 2 слова равны 8 байтам.

КОМП-3

Элемент данных хранится в упакованном десятичном формате. Каждая цифра занимает полбайта (1 полубайт), а знак сохраняется в крайнем правом полубайте.

В следующем примере вычисляется количество требуемых байтов -

01 WS-NUM PIC 9(n) USAGE IS COMP.
Number of bytes = n/2 (If n is even)
Number of bytes = n/2 + 1(If n is odd, consider only integer part)

01 WS-NUM PIC 9(4) USAGE IS COMP-3 VALUE 21.
It requires 2 bytes of storage as each digit occupies half a byte.

01 WS-NUM PIC 9(5) USAGE IS COMP-3 VALUE 21.
It requires 3 bytes of storage as each digit occupies half a byte.

Тетради

Записная книжка COBOL - это набор кода, который определяет структуры данных. Если во многих программах используется определенная структура данных, то вместо повторной записи той же структуры данных мы можем использовать тетрадки. Мы используем оператор COPY, чтобы включить тетрадь в программу. Оператор COPY используется в разделе WorkingStorage.

Следующий пример включает тетрадь внутри программы COBOL -

DATA DIVISION.
WORKING-STORAGE SECTION.
COPY ABC.

Здесь ABC - название тетради. Следующие элементы данных в тетради ABC могут использоваться внутри программы.

01 WS-DESCRIPTION.
   05 WS-NUM.
      10 WS-NUM1 PIC 9(2) VALUE 20.
      10 WS-NUM2 PIC 9(2) VALUE 56.
   05 WS-CHAR.
      10 WS-CHAR1 PIC X(2) VALUE 'AA'.
      10 WS-CHAR2 PIC X(2) VALUE 'BB'.

Условные операторы используются для изменения потока выполнения в зависимости от определенных условий, указанных программистом. Условные утверждения всегда будут иметь значение истина или ложь. Условия используются в операторах IF, Evaluate и Perform. Различные типы условий следующие:

  • Заявление условия ЕСЛИ
  • Условие отношения
  • Условие знака
  • Состояние класса
  • Название условия Условие
  • Отрицательное состояние
  • Комбинированное состояние

Заявление условия ЕСЛИ

Оператор IF проверяет наличие условий. Если условие истинно, выполняется блок IF; и если условие ложно, выполняется блок ELSE.

END-IFиспользуется для завершения блока IF. Чтобы завершить блок IF, можно использовать точку вместо END-IF. Но всегда предпочтительнее использовать END-IF для нескольких блоков IF.

Nested-IF- IF-блоки появляются внутри другого IF-блока. Нет ограничений на глубину вложенных операторов IF.

Синтаксис

Ниже приведен синтаксис операторов условия IF:

IF [condition] THEN
   [COBOL statements]
ELSE
   [COBOL statements]
END-IF.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-NUM1 PIC 9(9).
   01 WS-NUM2 PIC 9(9).
   01 WS-NUM3 PIC 9(5).
   01 WS-NUM4 PIC 9(6).

PROCEDURE DIVISION.
   A000-FIRST-PARA.
   MOVE 25 TO WS-NUM1 WS-NUM3.
   MOVE 15 TO WS-NUM2 WS-NUM4.
   
   IF WS-NUM1 > WS-NUM2 THEN
      DISPLAY 'IN LOOP 1 - IF BLOCK'
      
      IF WS-NUM3 = WS-NUM4 THEN
         DISPLAY 'IN LOOP 2 - IF BLOCK'
      ELSE
         DISPLAY 'IN LOOP 2 - ELSE BLOCK'
      END-IF
      
   ELSE
      DISPLAY 'IN LOOP 1 - ELSE BLOCK'
   END-IF.
   
STOP RUN.

JCL для выполнения вышеуказанной программы COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

IN LOOP 1 - IF BLOCK
IN LOOP 2 - ELSE BLOCK

Условие отношения

Условие отношения сравнивает два операнда, каждый из которых может быть идентификатором, литералом или арифметическим выражением. Алгебраическое сравнение числовых полей выполняется независимо от размера и условия использования.

For non-numeric operands

Если сравниваются два нечисловых операнда равного размера, то символы сравниваются слева с соответствующими позициями до тех пор, пока не будет достигнут конец. Операнд, содержащий большее количество символов, объявляется большим.

Если сравниваются два нечисловых операнда неравного размера, то к более короткому элементу данных добавляются пробелы в конце до тех пор, пока размер операндов не станет равным, а затем сравнивается в соответствии с правилами, упомянутыми в предыдущем пункте.

Синтаксис

Ниже приведен синтаксис операторов условия отношения -

[Data Name/Arithmetic Operation]

   [IS] [NOT] 

[Equal to (=),Greater than (>), Less than (<), 
Greater than or Equal (>=), Less than or equal (<=) ]

[Data Name/Arithmetic Operation]

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-NUM1 PIC 9(9).
   01 WS-NUM2 PIC 9(9).

PROCEDURE DIVISION.
   A000-FIRST-PARA.
   MOVE 25 TO WS-NUM1.
   MOVE 15 TO WS-NUM2.
   
   IF WS-NUM1 IS GREATER THAN OR EQUAL TO WS-NUM2 THEN
      DISPLAY 'WS-NUM1 IS GREATER THAN WS-NUM2'
   ELSE
      DISPLAY 'WS-NUM1 IS LESS THAN WS-NUM2'
   END-IF.
   
STOP RUN.

JCL для выполнения вышеуказанной программы COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

WS-NUM1 IS GREATER THAN WS-NUM2

Условие знака

Условие знака используется для проверки знака числового операнда. Он определяет, является ли данное числовое значение больше, меньше или равно НУЛЮ.

Синтаксис

Ниже приведен синтаксис операторов условия подписи -

[Data Name/Arithmetic Operation] 

   [IS] [NOT] 

[Positive, Negative or Zero]

[Data Name/Arithmetic Operation]

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-NUM1 PIC S9(9) VALUE -1234.
   01 WS-NUM2 PIC S9(9) VALUE 123456.

PROCEDURE DIVISION.
   A000-FIRST-PARA.
   IF WS-NUM1 IS POSITIVE THEN
      DISPLAY 'WS-NUM1 IS POSITIVE'.
      
   IF WS-NUM1 IS NEGATIVE THEN
      DISPLAY 'WS-NUM1 IS NEGATIVE'.
      
   IF WS-NUM1 IS ZERO THEN
      DISPLAY 'WS-NUM1 IS ZERO'.
      
   IF WS-NUM2 IS POSITIVE THEN
      DISPLAY 'WS-NUM2 IS POSITIVE'.

STOP RUN.

JCL для выполнения вышеуказанной программы COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

WS-NUM1 IS NEGATIVE
WS-NUM2 IS POSITIVE

Состояние класса

Условие класса используется для проверки того, содержит ли операнд только буквы или числа. Пробелы рассматриваются в АЛФАВИТЕ, АЛФАВИТЕ ВНИЗ и ВЕРХНИЙ АЛФАВИТ.

Синтаксис

Ниже приведен синтаксис операторов условия класса -

[Data Name/Arithmetic Operation>]

   [IS] [NOT] 

[NUMERIC, ALPHABETIC, ALPHABETIC-LOWER, ALPHABETIC-UPPER]

[Data Name/Arithmetic Operation]

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-NUM1 PIC X(9) VALUE 'ABCD '.
   01 WS-NUM2 PIC 9(9) VALUE 123456789.

PROCEDURE DIVISION.
   A000-FIRST-PARA.
   
   IF WS-NUM1 IS ALPHABETIC THEN
      DISPLAY 'WS-NUM1 IS ALPHABETIC'.
      
   IF WS-NUM1 IS NUMERIC THEN
      DISPLAY 'WS-NUM1 IS NUMERIC'.
      
   IF WS-NUM2 IS NUMERIC THEN
      DISPLAY 'WS-NUM2 IS NUMERIC'.
   
STOP RUN.

JCL для выполнения вышеуказанной программы COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

WS-NUM1 IS ALPHABETIC
WS-NUM2 IS NUMERIC

Название условия Условие

Имя-условия - это имя, определяемое пользователем. Он содержит набор значений, заданных пользователем. Он ведет себя как логические переменные. Они определены с номером 88. У него не будет пункта PIC.

Синтаксис

Ниже приводится синтаксис определяемых пользователем операторов условий:

88 [Condition-Name] VALUE [IS, ARE] [LITERAL] [THRU LITERAL].

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-NUM PIC 9(3).
   88 PASS VALUES ARE 041 THRU 100.
   88 FAIL VALUES ARE 000 THRU 40.

PROCEDURE DIVISION.
   A000-FIRST-PARA.
   MOVE 65 TO WS-NUM.
   
   IF PASS 
      DISPLAY 'Passed with ' WS-NUM ' marks'.
      
   IF FAIL 
      DISPLAY 'FAILED with ' WS-NUM 'marks'.
      
STOP RUN.

JCL для выполнения вышеуказанной программы COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

Passed with 065 marks

Отрицательное состояние

Отрицательное условие задается ключевым словом NOT. Если условие истинно и перед ним мы указали НЕ, то его окончательное значение будет ложным.

Синтаксис

Ниже приведен синтаксис операторов отрицательного условия.

IF NOT [CONDITION] 
   COBOL Statements
END-IF.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-NUM1 PIC 9(2) VALUE 20.
   01 WS-NUM2 PIC 9(9) VALUE 25.

PROCEDURE DIVISION.
   A000-FIRST-PARA.
   
   IF NOT WS-NUM1 IS LESS THAN WS-NUM2 THEN
      DISPLAY 'IF-BLOCK'
   ELSE
      DISPLAY 'ELSE-BLOCK'
   END-IF.
   
STOP RUN.

JCL для выполнения вышеуказанной программы COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

ELSE-BLOCK

Комбинированное состояние

Комбинированное условие содержит два или более условий, связанных с помощью логических операторов И или ИЛИ.

Синтаксис

Ниже приведен синтаксис комбинированных операторов условий -

IF [CONDITION] AND [CONDITION]
   COBOL Statements
END-IF.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-NUM1 PIC 9(2) VALUE 20.
   01 WS-NUM2 PIC 9(2) VALUE 25.
   01 WS-NUM3 PIC 9(2) VALUE 20.

PROCEDURE DIVISION.
   A000-FIRST-PARA.
   
   IF WS-NUM1 IS LESS THAN WS-NUM2 AND WS-NUM1=WS-NUM3 THEN
      DISPLAY 'Both condition OK'
   ELSE
      DISPLAY 'Error'
   END-IF.
   
STOP RUN.

JCL для выполнения вышеуказанной программы COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

Both condition OK

Оценить глагол

Глагол Evaluate заменяет серию операторов IF-ELSE. Его можно использовать для оценки более чем одного условия. Он похож на оператор SWITCH в программах на C.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-A PIC 9 VALUE 0.
   
PROCEDURE DIVISION.
   MOVE 3 TO WS-A.
   
   EVALUATE TRUE
      WHEN WS-A > 2
         DISPLAY 'WS-A GREATER THAN 2'

      WHEN WS-A < 0
         DISPLAY 'WS-A LESS THAN 0'

      WHEN OTHER
         DISPLAY 'INVALID VALUE OF WS-A'
   END-EVALUATE.
   
STOP RUN.

JCL для выполнения вышеуказанной программы COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

WS-A GREATER THAN 2

Есть некоторые задачи, которые нужно выполнять снова и снова, например, чтение каждой записи файла до конца. Операторы цикла, используемые в COBOL:

  • Выполнить через
  • Выполнять до
  • Время выполнения
  • Выполнить Варьирование

Выполнить через

Perform Thru используется для выполнения серии абзацев, задавая имена первого и последнего абзаца в последовательности. После выполнения последнего абзаца управление возвращается обратно.

Встроенное исполнение

Операторы внутри PERFORM будут выполняться до достижения END-PERFORM.

Синтаксис

Ниже приведен синтаксис встроенного выполнения -

PERFORM 
   DISPLAY 'HELLO WORLD'
END-PERFORM.

Вне линии Выполнить

Здесь оператор выполняется в одном абзаце, а затем управление передается другому абзацу или разделу.

Синтаксис

Ниже приведен синтаксис выполнения вне очереди -

PERFORM PARAGRAPH1 THRU PARAGRAPH2

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

PROCEDURE DIVISION.
   A-PARA.
   PERFORM DISPLAY 'IN A-PARA'
   END-PERFORM.
   PERFORM C-PARA THRU E-PARA.
   
   B-PARA.
   DISPLAY 'IN B-PARA'.
   STOP RUN.
   
   C-PARA.
   DISPLAY 'IN C-PARA'.
   
   D-PARA.
   DISPLAY 'IN D-PARA'.
   
   E-PARA.
   DISPLAY 'IN E-PARA'.

JCL для выполнения указанной выше программы COBOL.

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

IN A-PARA
IN C-PARA
IN D-PARA
IN E-PARA
IN B-PARA

Выполнять до

В «выполнять до» абзац выполняется до тех пор, пока данное условие не станет истинным. «С проверкой до» является условием по умолчанию и означает, что условие проверяется перед выполнением операторов в абзаце.

Синтаксис

Ниже приведен синтаксис выполнения до -

PERFORM A-PARA UNTIL COUNT=5

PERFORM A-PARA WITH TEST BEFORE UNTIL COUNT=5

PERFORM A-PARA WITH TEST AFTER UNTIL COUNT=5

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-CNT PIC 9(1) VALUE 0. 

PROCEDURE DIVISION.
   A-PARA.
   PERFORM B-PARA WITH TEST AFTER UNTIL WS-CNT>3.
   STOP RUN.
   
   B-PARA.
   DISPLAY 'WS-CNT : 'WS-CNT.
   ADD 1 TO WS-CNT.

JCL для выполнения вышеуказанной программы COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

WS-CNT : 0
WS-CNT : 1
WS-CNT : 2
WS-CNT : 3

Время выполнения

В поле «раз выполнения» абзац будет выполняться указанное количество раз.

Синтаксис

Ниже приведен синтаксис времени выполнения -

PERFORM A-PARA 5 TIMES.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

PROCEDURE DIVISION.
   A-PARA.
   PERFORM B-PARA 3 TIMES.
   STOP RUN.
   
   B-PARA.
   DISPLAY 'IN B-PARA'.

JCL для выполнения вышеуказанной программы COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

IN B-PARA
IN B-PARA
IN B-PARA

Выполнить Варьирование

При изменении выполнения абзац будет выполняться до тех пор, пока условие в фразе «До» не станет истинным.

Синтаксис

Ниже приведен синтаксис изменения выполнения -

PERFORM A-PARA VARYING A FROM 1 BY 1 UNTIL A = 5.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-A PIC 9 VALUE 0.

PROCEDURE DIVISION.
   A-PARA.
   PERFORM B-PARA VARYING WS-A FROM 1 BY 1 UNTIL WS-A=5
   STOP RUN.
   
   B-PARA.
   DISPLAY 'IN B-PARA ' WS-A.

JCL для выполнения вышеуказанной программы COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

IN B-PARA 1
IN B-PARA 2
IN B-PARA 3
IN B-PARA 4

ПЕРЕЙТИ К Заявлению

Оператор GO TO используется для изменения потока выполнения в программе. В операторах GO TO перевод идет только в прямом направлении. Используется для выхода из абзаца. Используются различные типы операторов GO TO:

Безусловный ПЕРЕЙТИ К

GO TO para-name.

Условный переход к

GO TO para-1 para-2 para-3 DEPENDING ON x.

Если «x» равно 1, то управление будет передано первому абзацу; и если «x» равно 2, то управление будет передано второму абзацу и так далее.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-A PIC 9 VALUE 2.
   
PROCEDURE DIVISION.
   A-PARA.
   DISPLAY 'IN A-PARA'
   GO TO B-PARA.
   
   B-PARA.
   DISPLAY 'IN B-PARA '.
   GO TO C-PARA D-PARA DEPENDING ON WS-A.
   
   C-PARA.
   DISPLAY 'IN C-PARA '.
   
   D-PARA.
   DISPLAY 'IN D-PARA '.
   STOP RUN.

JCL чтобы выполнить указанную выше программу COBOL:

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Когда вы компилируете и выполняете указанную выше программу, она дает следующий результат:

IN A-PARA
IN B-PARA 
IN D-PARA

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

  • Inspect
  • String
  • Unstring

Осмотреть

Глагол проверки используется для подсчета или замены символов в строке. Строковые операции могут выполняться с буквенно-цифровыми, числовыми или буквенными значениями. Операции проверки выполняются слева направо. Параметры, используемые для строковых операций, следующие:

Подсчет

Опция подсчета используется для подсчета символов строки.

Syntax

Ниже приведен синтаксис опции Tallying -

INSPECT input-string
TALLYING output-count FOR ALL CHARACTERS

Используемые параметры:

  • input-string - строка, символы которой нужно подсчитать.
  • output-count - Элемент данных для хранения количества символов.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-CNT1 PIC 9(2) VALUE 0.
   01 WS-CNT2 PIC 9(2) VALUE 0.
   01 WS-STRING PIC X(15) VALUE 'ABCDACDADEAAAFF'.
   
PROCEDURE DIVISION.
   INSPECT WS-STRING TALLYING WS-CNT1 FOR CHARACTER.
   DISPLAY "WS-CNT1 : "WS-CNT1.
   INSPECT WS-STRING TALLYING WS-CNT2 FOR ALL 'A'.
   DISPLAY "WS-CNT2 : "WS-CNT2
   
STOP RUN.

JCL для выполнения указанной выше программы COBOL.

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

WS-CNT1 : 15
WS-CNT2 : 06

Замена

Параметр замены используется для замены строковых символов.

Syntax

Ниже приведен синтаксис опции замены -

INSPECT input-string REPLACING ALL char1 BY char2.

Используемый параметр -

  • input-string - Строка, символы которой нужно заменить с char1 на char2.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-STRING PIC X(15) VALUE 'ABCDACDADEAAAFF'.

PROCEDURE DIVISION.
   DISPLAY "OLD STRING : "WS-STRING.
   INSPECT WS-STRING REPLACING ALL 'A' BY 'X'.
   DISPLAY "NEW STRING : "WS-STRING.
   
STOP RUN.

JCL для выполнения указанной выше программы COBOL.

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

OLD STRING : ABCDACDADEAAAFF
NEW STRING : XBCDXCDXDEXXXFF

Строка

Глагол String используется для объединения строк. Используя оператор STRING, можно объединить две или более строки символов в более длинную строку. Условие «с разделителями» является обязательным.

Syntax

Ниже приведен синтаксис строкового глагола -

STRING ws-string1 DELIMITED BY SPACE
   ws-string2 DELIMITED BY SIZE
   INTO ws-destination-string
   WITH POINTER ws-count
   ON OVERFLOW DISPLAY message1
   NOT ON OVERFLOW DISPLAY message2
END-STRING.

Ниже приведены подробные сведения об используемых параметрах -

  • ws-string1 и ws-string2: входные строки для объединения
  • ws-string: Выходная строка
  • ws-count: используется для подсчета длины новой объединенной строки
  • С разделителями указывает конец строки
  • Указатель и переполнение не являются обязательными

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-STRING PIC A(30).
   01 WS-STR1 PIC A(15) VALUE 'Tutorialspoint'.
   01 WS-STR2 PIC A(7) VALUE 'Welcome'.
   01 WS-STR3 PIC A(7) VALUE 'To AND'.
   01 WS-COUNT PIC 99 VALUE 1.

PROCEDURE DIVISION.
   STRING WS-STR2 DELIMITED BY SIZE
      WS-STR3 DELIMITED BY SPACE
      WS-STR1 DELIMITED BY SIZE
      INTO WS-STRING 
      WITH POINTER WS-COUNT
      ON OVERFLOW DISPLAY 'OVERFLOW!' 
   END-STRING.
   
   DISPLAY 'WS-STRING : 'WS-STRING.
   DISPLAY 'WS-COUNT : 'WS-COUNT.

STOP RUN.

JCL для выполнения вышеуказанной программы COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

WS-STRING : WelcomeToTutorialspoint       
WS-COUNT : 25

Unstring

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

Syntax

Ниже приводится синтаксис глагола Unstring -

UNSTRING ws-string DELIMITED BY SPACE
INTO ws-str1, ws-str2
WITH POINTER ws-count
ON OVERFLOW DISPLAY message
NOT ON OVERFLOW DISPLAY message
END-UNSTRING.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-STRING PIC A(30) VALUE 'WELCOME TO TUTORIALSPOINT'.
   01 WS-STR1 PIC A(7).
   01 WS-STR2 PIC A(2).
   01 WS-STR3 PIC A(15).
   01 WS-COUNT PIC 99 VALUE 1.

PROCEDURE DIVISION.
   UNSTRING WS-STRING DELIMITED BY SPACE
      INTO WS-STR1, WS-STR2, WS-STR3
   END-UNSTRING.
   
   DISPLAY 'WS-STR1 : 'WS-STR1.
   DISPLAY 'WS-STR2 : 'WS-STR2.
   DISPLAY 'WS-STR3 : 'WS-STR3.
   
STOP RUN.

JCL для выполнения вышеуказанной программы COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

WS-STR1 : WELCOME
WS-STR2 : TO
WS-STR3 : TUTORIALSPOINT

Массивы в COBOL известны как таблицы. Массив - это линейная структура данных, представляющая собой набор отдельных элементов данных одного типа. Элементы данных таблицы сортируются внутри.

Объявление таблицы

Таблица объявлена ​​в Data Division. Occursпредложение используется для определения таблицы. Предложение Occurs указывает на повторение определения имени данных. Его можно использовать только с номерами уровней, начинающимися с 02 по 49. Не использовать условие возникновения с переопределениями. Описание одномерной и двухмерной таблицы выглядит следующим образом -

Одномерный стол

В одномерной таблице occursПредложение используется только один раз в объявлении. WSTABLE - это элемент группы, содержащий таблицу. WS-B называет элементы таблицы, которые встречаются 10 раз.

Syntax

Ниже приведен синтаксис для определения одномерной таблицы:

01 WS-TABLE.
   05 WS-A PIC A(10) OCCURS 10 TIMES.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-TABLE.
      05 WS-A PIC A(10) VALUE 'TUTORIALS' OCCURS 5 TIMES.     

PROCEDURE DIVISION.
   DISPLAY "ONE-D TABLE : "WS-TABLE.
STOP RUN.

JCL для выполнения вышеуказанной программы COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

ONE-D TABLE : TUTORIALS TUTORIALS TUTORIALS TUTORIALS TUTORIALS

Двумерный стол

Двумерная таблица создается с обоими элементами данных переменной длины. Для справки просмотрите синтаксис, а затем попробуйте проанализировать таблицу. Первый массив (WS-A) может встречаться от 1 до 10 раз, а внутренний массив (WS-C) может встречаться от 1 до 5 раз. Каждой записи WS-A соответствует 5 записей WS-C.

Syntax

Ниже приведен синтаксис для определения двумерной таблицы:

01 WS-TABLE.
   05 WS-A OCCURS 10 TIMES.
      10 WS-B PIC A(10).
      10 WS-C OCCURS 5 TIMES.
         15 WS-D PIC X(6).

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-TABLE.
      05 WS-A OCCURS 2 TIMES.
         10 WS-B PIC A(10) VALUE ' TUTORIALS'.
         10 WS-C OCCURS 2 TIMES.
            15 WS-D PIC X(6) VALUE ' POINT'.

PROCEDURE DIVISION.
   DISPLAY "TWO-D TABLE : "WS-TABLE.

STOP RUN.

JCL для выполнения вышеуказанной программы COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

TWO-D TABLE :  TUTORIALS POINT POINT TUTORIALS POINT POINT

Нижний индекс

Доступ к отдельным элементам таблицы можно получить с помощью нижнего индекса. Значения нижнего индекса могут варьироваться от 1 до количества раз, когда таблица встречается. Нижний индекс может быть любым положительным числом. Никакого объявления в разделе данных не требуется. Он автоматически создается с предложением происходит.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-TABLE.
      05 WS-A OCCURS 3 TIMES.
         10 WS-B PIC A(2).
         10 WS-C OCCURS 2 TIMES.
            15 WS-D PIC X(3).

PROCEDURE DIVISION.
   MOVE '12ABCDEF34GHIJKL56MNOPQR' TO WS-TABLE.
   DISPLAY 'WS-TABLE  : ' WS-TABLE.
   DISPLAY 'WS-A(1)   : ' WS-A(1).
   DISPLAY 'WS-C(1,1) : ' WS-C(1,1).
   DISPLAY 'WS-C(1,2) : ' WS-C(1,2).
   DISPLAY 'WS-A(2)   : ' WS-A(2).
   DISPLAY 'WS-C(2,1) : ' WS-C(2,1).
   DISPLAY 'WS-C(2,2) : ' WS-C(2,2).
   DISPLAY 'WS-A(3)   : ' WS-A(3).
   DISPLAY 'WS-C(3,1) : ' WS-C(3,1).
   DISPLAY 'WS-C(3,2) : ' WS-C(3,2).
   
STOP RUN.

JCL для выполнения вышеуказанной программы COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

WS-TABLE  : 12ABCDEF34GHIJKL56MNOPQR
WS-A(1)   : 12ABCDEF
WS-C(1,1) : ABC
WS-C(1,2) : DEF
WS-A(2)   : 34GHIJKL
WS-C(2,1) : GHI
WS-C(2,2) : JKL
WS-A(3)   : 56MNOPQR
WS-C(3,1) : MNO
WS-C(3,2) : PQR

Индекс

Доступ к элементам таблицы также можно получить с помощью index. Индекс - это смещение элемента от начала таблицы. Индекс объявляется с помощью предложения Occurs с использованием предложения INDEXED BY. Значение индекса можно изменить с помощью оператора SET и опции PERFORM Varying.

Syntax

Ниже приведен синтаксис для определения индекса в таблице.

01 WS-TABLE.
   05 WS-A PIC A(10) OCCURS 10 TIMES INDEXED BY I.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-TABLE.
      05 WS-A OCCURS 3 TIMES INDEXED BY I.
         10 WS-B PIC A(2).
         10 WS-C OCCURS 2 TIMES INDEXED BY J.
            15 WS-D PIC X(3).

PROCEDURE DIVISION.
   MOVE '12ABCDEF34GHIJKL56MNOPQR' TO WS-TABLE.
   PERFORM A-PARA VARYING I FROM 1 BY 1 UNTIL I >3 
   STOP RUN.
   
   A-PARA.
   PERFORM C-PARA VARYING J FROM 1 BY 1 UNTIL J>2.
   
   C-PARA.
   DISPLAY WS-C(I,J).

JCL для выполнения вышеуказанной программы COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

ABC
DEF
GHI
JKL
MNO
PQR

Установить заявление

Оператор Set используется для изменения значения индекса. Команда установки используется для инициализации, увеличения или уменьшения значения индекса. Он используется с Поиском и Поиском по всем для поиска элементов в таблице.

Syntax

Ниже приведен синтаксис использования оператора Set -

SET I J TO positive-number
SET I TO J
SET I TO 5
SET I J UP BY 1
SET J DOWN BY 5

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-TABLE.
      05 WS-A OCCURS 3 TIMES INDEXED BY I.
         10 WS-B PIC A(2).
         10 WS-C OCCURS 2 TIMES INDEXED BY J.
            15 WS-D PIC X(3).

PROCEDURE DIVISION.
   MOVE '12ABCDEF34GHIJKL56MNOPQR' TO WS-TABLE.
   SET I J TO 1.
   DISPLAY WS-C(I,J).
   SET I J UP BY 1.
   DISPLAY WS-C(I,J).
   
STOP RUN.

JCL для выполнения указанной выше программы COBOL.

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

ABC
JKL

Поиск

Поиск - это метод линейного поиска, который используется для поиска элементов внутри таблицы. Это может быть выполнено как на отсортированной, так и на несортированной таблице. Используется только для таблиц, объявленных индексной фразой. Начинается с начального значения index. Если искомый элемент не найден, индекс автоматически увеличивается на 1 и продолжается до конца таблицы.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-TABLE.
      05 WS-A PIC X(1) OCCURS 18 TIMES INDEXED BY I.
   01 WS-SRCH PIC A(1) VALUE 'M'.

PROCEDURE DIVISION.
   MOVE 'ABCDEFGHIJKLMNOPQR' TO WS-TABLE.
   SET I TO 1.
   SEARCH WS-A
      AT END DISPLAY 'M NOT FOUND IN TABLE'
      WHEN WS-A(I) = WS-SRCH
      DISPLAY 'LETTER M FOUND IN TABLE'
   END-SEARCH.  

STOP RUN.

JCL для выполнения указанной выше программы COBOL.

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

LETTER M FOUND IN TABLE

Искать все

Search All - это метод двоичного поиска, который используется для поиска элементов внутри таблицы. Для опции Искать все таблица должна быть отсортирована. Индекс не требует инициализации. При двоичном поиске таблица делится на две половины и определяет, в какой половине находится искомый элемент. Этот процесс повторяется до тех пор, пока элемент не будет найден или не будет достигнут конец.

Example

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-TABLE.
      05 WS-RECORD OCCURS 10 TIMES ASCENDING KEY IS WS-NUM INDEXED BY I.
      10 WS-NUM PIC 9(2).
      10 WS-NAME PIC A(3).

PROCEDURE DIVISION.
   MOVE '12ABC56DEF34GHI78JKL93MNO11PQR' TO WS-TABLE.
   SEARCH ALL WS-RECORD
     AT END DISPLAY 'RECORD NOT FOUND'
     WHEN WS-NUM(I) = 93
     DISPLAY 'RECORD FOUND '
     DISPLAY WS-NUM(I)
     DISPLAY WS-NAME(I)

END-SEARCH.

JCL для выполнения вышеуказанной программы COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

RECORD FOUND 
93
MNO

Концепция файлов в COBOL отличается от C / C ++. Изучая основы работы с файлами в COBOL, концепции обоих языков не должны совпадать. Простые текстовые файлы нельзя использовать в COBOL, вместо этогоPS (Physical Sequential) и VSAMфайлы используются. Файлы PS будут рассмотрены в этом модуле.

Чтобы понять работу с файлами в COBOL, нужно знать основные термины. Эти термины служат только для понимания основ работы с файлами. Более подробно терминология будет обсуждаться в главе «Глаголы обработки файлов». Ниже приведены основные термины -

  • Field
  • Record
  • Физическая запись
  • Логическая запись
  • File

Следующий пример помогает понять эти термины -

Поле

Поле используется для обозначения данных, хранящихся об элементе. Он представляет собой один элемент, как показано в приведенном выше примере, такой как идентификатор студента, имя, оценки, общие оценки и процент. Количество символов в любом поле называется размером поля, например, имя студента может состоять из 10 символов. Поля могут иметь следующие атрибуты -

  • Primary keys- это те поля, которые уникальны для каждой записи и используются для идентификации конкретной записи. Например, в файле оценок учащихся у каждого учащегося будет уникальный идентификатор учащегося, который образует первичный ключ.

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

  • Descriptorsполя используются для описания сущности. Например, в файле оценок учащихся известными дескрипторами являются поля оценок и процентов, которые добавляют значение записи.

Запись

Запись - это набор полей, который используется для описания сущности. Одно или несколько полей вместе образуют запись. Например, в файле оценок учащихся идентификатор учащегося, имя, оценки, общие оценки и процентное соотношение образуют одну запись. Совокупный размер всех полей в записи известен как размер записи. Записи в файле могут быть фиксированной или переменной длины.

Физическая запись

Физическая запись - это информация, которая существует на внешнем устройстве. Он также известен как блок.

Логическая запись

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

файл

Файл - это набор связанных записей. Например, файл оценок студентов состоит из записей всех студентов.

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

  • Последовательная организация файлов
  • Индексированная последовательная файловая организация
  • Относительная файловая организация

Синтаксисы в этом модуле, упомянутые вместе с соответствующими терминами, относятся только к их использованию в программе. Полные программы, использующие этот синтаксис, будут обсуждаться в главе «Глаголы обработки файлов».

Последовательная организация файлов

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

  • Записи можно читать в последовательном порядке. Для чтения 10- й записи необходимо прочитать все предыдущие 9 записей.

  • Записи пишутся в последовательном порядке. Новую запись нельзя вставить между ними. Новая запись всегда вставляется в конец файла.

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

  • Порядок вставленных записей никогда не может быть изменен.

  • Возможно обновление записи. Запись может быть перезаписана, если длина новой записи такая же, как длина старой записи.

  • Файлы с последовательным выводом - хороший вариант для печати.

Синтаксис

Ниже приведен синтаксис последовательной организации файлов -

INPUT-OUTPUT SECTION.
FILE-CONTROL.
   SELECT file-name ASSIGN TO dd-name-jcl
   ORGANIZATION IS SEQUENTIAL

Индексированная последовательная организация файлов

Индексированный последовательный файл состоит из записей, к которым можно получить доступ последовательно. Также возможен прямой доступ. Он состоит из двух частей -

  • Data File содержит записи в последовательной схеме.

  • Index File содержит первичный ключ и его адрес в файле данных.

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

  • Записи можно читать в последовательном порядке, как при последовательной организации файлов.

  • Доступ к записям можно получить случайным образом, если известен первичный ключ. Индексный файл используется для получения адреса записи, а затем запись выбирается из файла данных.

  • В этой файловой системе поддерживается отсортированный индекс, который связывает значение ключа с позицией записи в файле.

  • Также можно создать альтернативный индекс для выборки записей.

Синтаксис

Ниже приведен синтаксис индексированной последовательной файловой организации.

INPUT-OUTPUT SECTION.
FILE-CONTROL.
   SELECT file-name ASSIGN TO dd-name-jcl
   ORGANIZATION IS INDEXED
   RECORD KEY IS primary-key
   ALTERNATE RECORD KEY IS rec-key

Относительная организация файлов

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

  • Записи можно читать в последовательном порядке, как при последовательной и индексированной файловой организации.

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

  • Записи могут быть вставлены с использованием относительного ключа. Относительный адрес рассчитывается с использованием относительного ключа.

  • Относительный файл обеспечивает самый быстрый доступ к записям.

  • Основным недостатком этой файловой системы является то, что если некоторые промежуточные записи отсутствуют, они также будут занимать место.

Синтаксис

Ниже приведен синтаксис относительной организации файлов -

INPUT-OUTPUT SECTION.
FILE-CONTROL.
   SELECT file-name ASSIGN TO dd-name-jcl
   ORGANIZATION IS RELATIVE
   RELATIVE KEY IS rec-key

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

  • Последовательный доступ
  • Произвольный доступ
  • Динамический доступ

Синтаксисы в этом модуле, упомянутые вместе с соответствующими терминами, относятся только к их использованию в программе. Полные программы, использующие этот синтаксис, будут обсуждаться в следующей главе.

Последовательный доступ

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

  • За sequential files, записи доступны в том же порядке, в котором они были вставлены.

  • За indexed files, параметр, используемый для выборки записей, - это значения ключей записи.

  • За relative files, относительные ключи записи используются для извлечения записей.

Синтаксис

Ниже приведен синтаксис режима последовательного доступа -

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
   SELECT file-name ASSIGN TO dd-name
   ORGANIZATION IS SEQUENTIAL
   ACCESS MODE IS SEQUENTIAL
	
	
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
   FILE-CONTROL.
   SELECT file-name ASSIGN TO dd-name
   ORGANIZATION IS INDEXED
   ACCESS MODE IS SEQUENTIAL
   RECORD KEY IS rec-key1
   ALTERNATE RECORD KEY IS rec-key2

		
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
   FILE-CONTROL.
   SELECT file-name ASSIGN TO dd-name
   ORGANIZATION IS RELATIVE
   ACCESS MODE IS SEQUENTIAL
   RELATIVE KEY IS rec-key1

Произвольный доступ

Когда режим доступа - СЛУЧАЙНЫЙ, метод извлечения записи изменяется в соответствии с выбранной файловой организацией.

  • За indexed filesдоступ к записям осуществляется в соответствии со значением, помещенным в поле ключа, которое может быть первичным или альтернативным ключом. Может быть один или несколько альтернативных индексов.

  • За relative files , записи извлекаются с помощью относительных ключей записи.

Синтаксис

Ниже приведен синтаксис режима произвольного доступа -

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
   FILE-CONTROL.
   SELECT file-name ASSIGN TO dd-name
   ORGANIZATION IS INDEXED
   ACCESS MODE IS RANDOM
   RECORD KEY IS rec-key1
   ALTERNATE RECORD KEY IS rec-key2

		
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
   FILE-CONTROL.
   SELECT file-name ASSIGN TO dd-name
   ORGANIZATION IS RELATIVE
   ACCESS MODE IS RANDOM
   RELATIVE KEY IS rec-key1

Динамический доступ

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

Для относительных и индексированных файлов режим динамического доступа позволяет переключаться между режимом последовательного доступа и режимом произвольного доступа при чтении файла с помощью фразы NEXT в операторе READ. Функции NEXT и READ будут рассмотрены в следующей главе.

Синтаксис

Ниже приведен синтаксис режима динамического доступа -

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
   FILE-CONTROL.
   SELECT file-name ASSIGN TO dd-name
   ORGANIZATION IS SEQUENTIAL
   ACCESS MODE IS DYNAMIC
   RECORD KEY IS rec-key1
   ALTERNATE RECORD KEY IS rec-key2

		
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
   FILE-CONTROL.
   SELECT file-name ASSIGN TO dd-name
   ORGANIZATION IS RELATIVE
   ACCESS MODE IS DYNAMIC
   RELATIVE KEY IS rec-key1

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

  • 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.

Подпрограмма Cobol - это программа, которая может быть скомпилирована независимо, но не может быть выполнена независимо. Есть два типа подпрограмм:internal subroutines нравиться Perform заявления и external подпрограммы, такие как глагол CALL.

Call Verb

Глагол вызова используется для передачи управления от одной программы к другой программе. Программа, содержащая глагол CALL, являетсяCalling Program и вызываемая программа известна как Called Program. Выполнение вызывающей программы будет остановлено до тех пор, пока вызываемая программа не завершит выполнение. Оператор Exit Program используется в вызываемой программе для передачи управления обратно.

Вызываемые программные ограничения

Ниже приведены названные требования к программе -

  • Linkage sectionдолжен быть определен в вызываемой программе. Он состоит из элементов данных, переданных в программе. В элементах данных не должно быть предложения Value. Предложение PIC должно быть совместимо с переменными, переданными через вызывающую программу.

  • Procedure division using имеет список переменных, переданных из вызывающей программы, и порядок должен быть таким же, как указано в глаголе Call.

  • Exit programОператор используется в вызываемой программе для передачи управления обратно. Это должен быть последний оператор в вызываемой программе.

Параметры могут передаваться между программами двумя способами:

  • По ссылке
  • По содержанию

Звоните по ссылке

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

Синтаксис

Ниже приводится синтаксис вызова подпрограммы по ссылке -

CALL sub-prog-name USING variable-1, variable-2.

Example

Следующий пример - это ОСНОВНАЯ вызывающая программа, а UTIL - это вызываемая программа.

IDENTIFICATION DIVISION.
PROGRAM-ID. MAIN.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-STUDENT-ID PIC 9(4) VALUE 1000.
   01 WS-STUDENT-NAME PIC A(15) VALUE 'Tim'.

PROCEDURE DIVISION.
   CALL 'UTIL' USING WS-STUDENT-ID, WS-STUDENT-NAME.
   DISPLAY 'Student Id : ' WS-STUDENT-ID
   DISPLAY 'Student Name : ' WS-STUDENT-NAME
STOP RUN.

Вызывается программа

IDENTIFICATION DIVISION.
PROGRAM-ID. UTIL.

DATA DIVISION.
   LINKAGE SECTION.
   01 LS-STUDENT-ID PIC 9(4).
   01 LS-STUDENT-NAME PIC A(15).

PROCEDURE DIVISION USING LS-STUDENT-ID, LS-STUDENT-NAME.
   DISPLAY 'In Called Program'.
   MOVE 1111 TO LS-STUDENT-ID.
EXIT PROGRAM.

JCL для выполнения вышеуказанной программы COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = MAIN

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

In Called Program
Student Id : 1111
Student Name : Tim

Звоните по содержанию

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

Синтаксис

Ниже приведен синтаксис вызова подпрограммы по содержимому -

CALL sub-prog-name USING 
BY CONTENT variable-1, BY CONTENT variable-2.

Example

Следующий пример - это ОСНОВНАЯ вызывающая программа, а UTIL - это вызываемая программа.

IDENTIFICATION DIVISION.
PROGRAM-ID. MAIN.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-STUDENT-ID PIC 9(4) VALUE 1000.
   01 WS-STUDENT-NAME PIC A(15) VALUE 'Tim'.

PROCEDURE DIVISION.
   CALL 'UTIL' USING BY CONTENT WS-STUDENT-ID, BY CONTENT WS-STUDENT-NAME.
   DISPLAY 'Student Id : ' WS-STUDENT-ID
   DISPLAY 'Student Name : ' WS-STUDENT-NAME
STOP RUN.

Вызывается программа

IDENTIFICATION DIVISION.
PROGRAM-ID. UTIL.

DATA DIVISION.
   LINKAGE SECTION.
   01 LS-STUDENT-ID PIC 9(4).
   01 LS-STUDENT-NAME PIC A(15).

PROCEDURE DIVISION USING LS-STUDENT-ID, LS-STUDENT-NAME.
   DISPLAY 'In Called Program'.
   MOVE 1111 TO LS-STUDENT-ID.
EXIT PROGRAM.

JCL для выполнения вышеуказанной программы COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = MAIN

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

In Called Program
Student Id : 1000
Student Name : Tim

Типы звонков

Есть два типа звонков -

  • Static Callвозникает, когда программа компилируется с параметром компилятора NODYNAM. Статическая вызываемая программа загружается в хранилище во время компиляции.

  • Dynamic Callвозникает, когда программа компилируется с опциями компилятора DYNAM и NODLL. Динамически вызываемая программа загружается в хранилище во время выполнения.

Сортировка данных в файле или слияние двух или более файлов - обычная необходимость почти во всех бизнес-приложениях. Сортировка используется для упорядочения записей в порядке возрастания или убывания, чтобы можно было выполнять последовательную обработку. Есть два метода, которые используются для сортировки файлов в COBOL:

  • External sortиспользуется для сортировки файлов с помощью утилиты SORT в JCL. Мы обсуждали это в главе JCL. На данный момент мы сосредоточимся на внутренней сортировке.

  • Internal sort используется для сортировки файлов в программе COBOL. SORT глагол используется для сортировки файла.

Сортировка глагола

В процессе сортировки в COBOL используются три файла:

  • Input file - это файл, который мы должны отсортировать в порядке возрастания или убывания.

  • Work fileиспользуется для хранения записей в процессе сортировки. Записи входного файла передаются в рабочий файл для процесса сортировки. Этот файл должен быть определен в разделе файлов под записью SD.

  • Output fileэто файл, который мы получаем после процесса сортировки. Это окончательный результат команды Sort.

Синтаксис

Ниже приведен синтаксис для сортировки файла:

SORT work-file ON ASCENDING KEY rec-key1
   [ON DESCENDING KEY rec-key2]
USING input-file GIVING output-file.

SORT выполняет следующие операции -

  • Открывает рабочий файл в режиме ввода-вывода, файл ввода в режиме ввода и файл вывода в режиме вывода.

  • Переносит записи, присутствующие во входном файле, в рабочий файл.

  • Сортирует SORT-FILE в возрастающей / убывающей последовательности по ключу записи.

  • Переносит отсортированные записи из рабочего файла в выходной файл.

  • Закрывает входной файл и выходной файл и удаляет рабочий файл.

Example

В следующем примере INPUT - это входной файл, который необходимо отсортировать в порядке возрастания:

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

ENVIRONMENT DIVISION.
   INPUT-OUTPUT SECTION.
   FILE-CONTROL.
      SELECT INPUT ASSIGN TO IN.
      SELECT OUTPUT ASSIGN TO OUT.
      SELECT WORK ASSIGN TO WRK.

DATA DIVISION.
   FILE SECTION.
   FD INPUT.
      01 INPUT-STUDENT.
         05 STUDENT-ID-I PIC 9(5).
         05 STUDENT-NAME-I PIC A(25).
   FD OUTPUT.
      01 OUTPUT-STUDENT.
         05 STUDENT-ID-O PIC 9(5).
         05 STUDENT-NAME-O PIC A(25).
   SD WORK.
      01 WORK-STUDENT.
         05 STUDENT-ID-W PIC 9(5).
         05 STUDENT-NAME-W PIC A(25).

PROCEDURE DIVISION.
   SORT WORK ON ASCENDING KEY STUDENT-ID-O
   USING INPUT GIVING OUTPUT.
   DISPLAY 'Sort Successful'.
STOP RUN.

JCL для выполнения вышеуказанной программы COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//IN DD DSN = INPUT-FILE-NAME,DISP = SHR
//OUT DD DSN = OUTPUT-FILE-NAME,DISP = SHR
//WRK DD DSN = &&TEMP

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

Sort Successful

Глагол слияния

Два или более файла с одинаковой последовательностью объединяются с помощью оператора Merge. Файлы, используемые в процессе слияния -

  • Входные файлы - Вход-1, Вход-2
  • Рабочий файл
  • Выходной файл

Синтаксис

Ниже приведен синтаксис для объединения двух или более файлов:

MERGE work-file ON ASCENDING KEY rec-key1
   [ON DESCENDING KEY rec-key2]

USING input-1, input-2 GIVING output-file.

Слияние выполняет следующие операции -

  • Открывает рабочий файл в режиме ввода-вывода, файлы ввода в режиме ввода и файл вывода в режиме вывода.

  • Переносит записи, присутствующие во входных файлах, в рабочий файл.

  • Сортирует SORT-FILE в возрастающей / убывающей последовательности по ключу записи.

  • Переносит отсортированные записи из рабочего файла в выходной файл.

  • Закрывает входной файл и выходной файл и удаляет рабочий файл.

Example

В следующем примере INPUT1 и INPUT2 - это входные файлы, которые должны быть объединены в порядке возрастания -

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

ENVIRONMENT DIVISION.
   INPUT-OUTPUT SECTION.
   FILE-CONTROL.
      SELECT INPUT1 ASSIGN TO IN1.
      SELECT INPUT2 ASSIGN TO IN2.
      SELECT OUTPUT ASSIGN TO OUT.
      SELECT WORK ASSIGN TO WRK.

DATA DIVISION.
   FILE SECTION.
   FD INPUT1.
      01 INPUT1-STUDENT.
         05 STUDENT-ID-I1 PIC 9(5).
         05 STUDENT-NAME-I1 PIC A(25).
   FD INPUT2.
      01 INPUT2-STUDENT.
         05 STUDENT-ID-I2 PIC 9(5).
         05 STUDENT-NAME-I2 PIC A(25).
   FD OUTPUT.
      01 OUTPUT-STUDENT.
         05 STUDENT-ID-O PIC 9(5).
         05 STUDENT-NAME-O PIC A(25).
   SD WORK.
      01 WORK-STUDENT.
         05 STUDENT-ID-W PIC 9(5).
         05 STUDENT-NAME-W PIC A(25).

PROCEDURE DIVISION.
   MERGE WORK ON ASCENDING KEY STUDENT-ID-O
   USING INPUT1, INPUT2 GIVING OUTPUT.
   DISPLAY 'Merge Successful'.
STOP RUN.

JCL для выполнения вышеуказанной программы COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//IN1 DD DSN=INPUT1-FILE-NAME,DISP=SHR
//IN2 DD DSN=INPUT2-FILE-NAME,DISP=SHR
//OUT DD DSN = OUTPUT-FILE-NAME,DISP=SHR
//WRK DD DSN = &&TEMP

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

Merge Successful

На данный момент мы научились использовать файлы в COBOL. Теперь мы обсудим, как программа COBOL взаимодействует с DB2. Он включает в себя следующие термины -

  • Встроенный SQL
  • Программирование приложений DB2
  • Переменные хоста
  • SQLCA
  • SQL запросы
  • Cursors

Встроенный SQL

Встроенные операторы SQL используются в программах на языке COBOL для выполнения стандартных операций SQL. Встроенные операторы SQL предварительно обрабатываются процессором SQL перед компиляцией прикладной программы. COBOL известен какHost Language. Приложения COBOL-DB2 - это те приложения, которые включают как COBOL, так и DB2.

Встроенные операторы SQL работают как обычные операторы SQL с небольшими изменениями. Например, результат запроса направляется к заранее определенному набору переменных, которые называютсяHost Variables. Дополнительное предложение INTO помещается в оператор SELECT.

Программирование приложений DB2

Ниже приведены правила, которые необходимо соблюдать при написании программы на COBOL-DB2.

  • Все операторы SQL должны быть разделены между EXEC SQL и ENDEXEC..

  • Операторы SQL должны быть закодированы в области B.

  • Все таблицы, которые используются в программе, должны быть объявлены в разделе WorkingStorage. Это делается с помощьюINCLUDE заявление.

  • Все операторы SQL, кроме INCLUDE и DECLARE TABLE, должны появляться в разделе «Процедуры».

Переменные хоста

Переменные хоста используются для получения данных из таблицы или вставки данных в таблицу. Переменные хоста должны быть объявлены для всех значений, которые должны передаваться между программой и DB2. Они заявлены в разделе «Рабочее хранилище».

Переменные хоста не могут быть элементами группы, но они могут быть сгруппированы вместе в структуре хоста. Они не могут бытьRenamed или же Redefined. Используя переменные хоста с операторами SQL, добавьте к ним префиксcolon (:)..

Синтаксис

Ниже приведен синтаксис для объявления переменных хоста и включения таблиц в раздел «Рабочее хранилище».

DATA DIVISION.
   WORKING-STORAGE SECTION.
   
   EXEC SQL
   INCLUDE table-name
   END-EXEC.

   EXEC SQL BEGIN DECLARE SECTION
   END-EXEC.
   
   01 STUDENT-REC.
      05 STUDENT-ID PIC 9(4).
      05 STUDENT-NAME PIC X(25).
      05 STUDENT-ADDRESS X(50).
   EXEC SQL END DECLARE SECTION
   END-EXEC.

SQLCA

SQLCA - это область связи SQL, через которую DB2 передает программе обратную связь о выполнении SQL. Он сообщает программе, было ли выполнение успешным или нет. В SQLCA есть ряд предопределенных переменных, напримерSQLCODEкоторый содержит код ошибки. Значение «000» в SQLCODE указывает на успешное выполнение.

Синтаксис

Ниже приведен синтаксис для объявления SQLCA в разделе рабочего хранилища.

DATA DIVISION.
WORKING-STORAGE SECTION.
	EXEC SQL
	INCLUDE SQLCA
	END-EXEC.

SQL запросы

Предположим, у нас есть одна таблица с именем «Студент», которая содержит идентификатор студента, имя студента и адрес студента.

Таблица СТУДЕНТ содержит следующие данные -

Student Id		Student Name		Student Address
1001 			   Mohtashim M.		Hyderabad
1002			   Nishant Malik		Delhi
1003 			   Amitabh Bachan		Mumbai
1004			   Chulbul Pandey		Lucknow

В следующем примере показано использование SELECT запрос в программе COBOL -

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   EXEC SQL
      INCLUDE SQLCA
   END-EXEC.
   
   EXEC SQL
      INCLUDE STUDENT
   END-EXEC.
   
   EXEC SQL BEGIN DECLARE SECTION
   END-EXEC.
      01 WS-STUDENT-REC.
         05 WS-STUDENT-ID PIC 9(4).
         05 WS-STUDENT-NAME PIC X(25).
         05 WS-STUDENT-ADDRESS X(50).
   EXEC SQL END DECLARE SECTION
   END-EXEC.

PROCEDURE DIVISION.
   EXEC SQL
      SELECT STUDENT-ID, STUDENT-NAME, STUDENT-ADDRESS
      INTO :WS-STUDENT-ID, :WS-STUDENT-NAME, WS-STUDENT-ADDRESS FROM STUDENT
      WHERE STUDENT-ID=1004
   END-EXEC.
   
   IF SQLCODE = 0 
      DISPLAY WS-STUDENT-RECORD
   ELSE DISPLAY 'Error'
   END-IF.
STOP RUN.

JCL для выполнения вышеуказанной программы COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP001  EXEC PGM = IKJEFT01
//STEPLIB  DD DSN = MYDATA.URMI.DBRMLIB,DISP = SHR
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSOUT   DD SYSOUT=*
//SYSTSIN  DD *
   DSN SYSTEM(SSID)
   RUN PROGRAM(HELLO) PLAN(PLANNAME) -
   END
/*

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

1004 Chulbul Pandey		Lucknow

В следующем примере показано использование INSERT запрос в программе COBOL -

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   EXEC SQL
   INCLUDE SQLCA
   END-EXEC.
   
   EXEC SQL
   INCLUDE STUDENT
   END-EXEC.
   
   EXEC SQL BEGIN DECLARE SECTION
   END-EXEC.
      01 WS-STUDENT-REC.
         05 WS-STUDENT-ID PIC 9(4).
         05 WS-STUDENT-NAME PIC X(25).
         05 WS-STUDENT-ADDRESS X(50).
   EXEC SQL END DECLARE SECTION
   END-EXEC.

PROCEDURE DIVISION.
   MOVE 1005 TO WS-STUDENT-ID.
   MOVE 'TutorialsPoint' TO WS-STUDENT-NAME.
   MOVE 'Hyderabad' TO WS-STUDENT-ADDRESS.
   
   EXEC SQL
      INSERT INTO STUDENT(STUDENT-ID, STUDENT-NAME, STUDENT-ADDRESS)
      VALUES (:WS-STUDENT-ID, :WS-STUDENT-NAME, WS-STUDENT-ADDRESS)
   END-EXEC.
   
   IF SQLCODE = 0 
      DISPLAY 'Record Inserted Successfully'
      DISPLAY WS-STUDENT-REC
   ELSE DISPLAY 'Error'
   END-IF.
STOP RUN.

JCL для выполнения вышеуказанной программы COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP001  EXEC PGM = IKJEFT01
//STEPLIB  DD DSN = MYDATA.URMI.DBRMLIB,DISP=SHR
//SYSPRINT DD SYSOUT = *
//SYSUDUMP DD SYSOUT = *
//SYSOUT   DD SYSOUT = *
//SYSTSIN  DD *
   DSN SYSTEM(SSID)
   RUN PROGRAM(HELLO) PLAN(PLANNAME) -
   END
/*

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

Record Inserted Successfully
1005 TutorialsPoint		Hyderabad

В следующем примере показано использование UPDATE запрос в программе COBOL -

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   
   EXEC SQL
   INCLUDE SQLCA
   END-EXEC.
   
   EXEC SQL
   INCLUDE STUDENT
   END-EXEC.
   
   EXEC SQL BEGIN DECLARE SECTION
   END-EXEC.
      01 WS-STUDENT-REC.
         05 WS-STUDENT-ID PIC 9(4).
         05 WS-STUDENT-NAME PIC X(25).
         05 WS-STUDENT-ADDRESS X(50).
   EXEC SQL END DECLARE SECTION
   END-EXEC.

PROCEDURE DIVISION.
   MOVE 'Bangalore' TO WS-STUDENT-ADDRESS.
   EXEC SQL
      UPDATE STUDENT SET STUDENT-ADDRESS=:WS-STUDENT-ADDRESS
      WHERE STUDENT-ID = 1003
   END-EXEC.
   
   IF SQLCODE = 0 
      DISPLAY 'Record Updated Successfully'
   ELSE DISPLAY 'Error'
   END-IF.
STOP RUN.

JCL для выполнения вышеуказанной программы COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP001  EXEC PGM = IKJEFT01
//STEPLIB  DD DSN = MYDATA.URMI.DBRMLIB,DISP = SHR
//SYSPRINT DD SYSOUT = *
//SYSUDUMP DD SYSOUT = *
//SYSOUT   DD SYSOUT = *
//SYSTSIN  DD *
   DSN SYSTEM(SSID)
   RUN PROGRAM(HELLO) PLAN(PLANNAME) -
   END
/*

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

Record Updated Successfully

Следующее example показывает использование DELETE запрос в программе COBOL -

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
WORKING-STORAGE SECTION.

   EXEC SQL
   INCLUDE SQLCA
   END-EXEC.
   
   EXEC SQL
   INCLUDE STUDENT
   END-EXEC.
   
   EXEC SQL BEGIN DECLARE SECTION
   END-EXEC.
      01 WS-STUDENT-REC.
         05 WS-STUDENT-ID PIC 9(4).
         05 WS-STUDENT-NAME PIC X(25).
         05 WS-STUDENT-ADDRESS X(50).
   EXEC SQL END DECLARE SECTION
   END-EXEC.

PROCEDURE DIVISION.
   MOVE 1005 TO WS-STUDENT-ID.
   
   EXEC SQL
      DELETE FROM STUDENT
      WHERE STUDENT-ID=:WS-STUDENT-ID
   END-EXEC.
   
   IF SQLCODE = 0 
      DISPLAY 'Record Deleted Successfully'
   ELSE DISPLAY 'Error'
   END-IF.
STOP RUN.

JCL для выполнения вышеуказанной программы COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP001  EXEC PGM = IKJEFT01
//STEPLIB  DD DSN = MYDATA.URMI.DBRMLIB,DISP=SHR
//SYSPRINT DD SYSOUT = *
//SYSUDUMP DD SYSOUT = *
//SYSOUT   DD SYSOUT = *
//SYSTSIN  DD *
   DSN SYSTEM(SSID)
   RUN PROGRAM(HELLO) PLAN(PLANNAME) -
   END
/*

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

Record Deleted Successfully

Курсоры

Курсоры используются для одновременного выбора нескольких строк. Это структуры данных, содержащие все результаты запроса. Их можно определить в разделе «Рабочее хранилище» или в разделе «Процедуры». Ниже приведены операции, связанные с курсором -

  • Declare
  • Open
  • Close
  • Fetch

Объявить курсор

Объявление курсора может быть выполнено в разделе рабочего хранилища или в разделе процедур. Первый оператор - это оператор DECLARE, который является невыполнимым оператором.

EXEC SQL
   DECLARE STUDCUR CURSOR FOR
   SELECT STUDENT-ID, STUDENT-NAME, STUDENT-ADDRESS FROM STUDENT
   WHERE STUDENT-ID >:WS-STUDENT-ID
END-EXEC.

открыто

Перед использованием курсора необходимо выполнить оператор Open. Оператор Open подготавливает SELECT к выполнению.

EXEC SQL
   OPEN STUDCUR
END-EXEC.

Закрыть

Оператор Close освобождает всю память, занятую курсором. Перед завершением программы обязательно закрыть курсор.

EXEC SQL
   CLOSE STUDCUR
END-EXEC.

Получить

Оператор Fetch идентифицирует курсор и помещает значение в предложение INTO. Оператор Fetch закодирован в цикле, так как мы получаем по одной строке за раз.

EXEC SQL
   FETCH STUDCUR
   INTO :WS-STUDENT-ID, :WS-STUDENT-NAME, WS-STUDENT-ADDRESS
END-EXEC.

В следующем примере показано использование курсора для извлечения всех записей из таблицы STUDENT.

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   
   EXEC SQL
   INCLUDE SQLCA
   END-EXEC.
   
   EXEC SQL
   INCLUDE STUDENT
   END-EXEC.
   
   EXEC SQL BEGIN DECLARE SECTION
   END-EXEC.
      01 WS-STUDENT-REC.
         05 WS-STUDENT-ID PIC 9(4).
         05 WS-STUDENT-NAME PIC X(25).
         05 WS-STUDENT-ADDRESS X(50).
   EXEC SQL END DECLARE SECTION
   END-EXEC.
   
   EXEC SQL
      DECLARE STUDCUR CURSOR FOR
      SELECT STUDENT-ID, STUDENT-NAME, STUDENT-ADDRESS FROM STUDENT
      WHERE STUDENT-ID >:WS-STUDENT-ID
   END-EXEC.

PROCEDURE DIVISION.
   MOVE 1001 TO WS-STUDENT-ID.
   PERFORM UNTIL SQLCODE = 100
   
   EXEC SQL
      FETCH STUDCUR
      INTO :WS-STUDENT-ID, :WS-STUDENT-NAME, WS-STUDENT-ADDRESS
   END-EXEC
   
   DISPLAY WS-STUDENT-REC
END-PERFORM	
STOP RUN.

JCL для выполнения вышеуказанной программы COBOL -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP001  EXEC PGM=IKJEFT01
//STEPLIB  DD DSN=MYDATA.URMI.DBRMLIB,DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSOUT   DD SYSOUT=*
//SYSTSIN  DD *
   DSN SYSTEM(SSID)
   RUN PROGRAM(HELLO) PLAN(PLANNAME) -
   END
/*

Когда вы компилируете и выполняете вышеуказанную программу, она дает следующий результат:

1001 Mohtashim M.		Hyderabad
1002 Nishant Malik		Delhi
1003 Amitabh Bachan		Mumbai
1004 Chulbul Pandey		Lucknow