Учебники

КОБОЛ — Краткое руководство

КОБОЛ — Обзор

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

Эволюция Кобола

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

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

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

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

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

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

В 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 имеет эффективные сообщения об ошибках, поэтому устранение ошибок проще.

Особенности КОБОЛ

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

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

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

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

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

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, который доступен на домашнем сайте 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.

Когда программа на языке 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 состоит из подразделений, как показано на следующем рисунке —

Структура программы

Краткое введение этих разделов дано ниже —

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

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

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

  • Утверждения являются осмысленными операторами COBOL, которые выполняют некоторую обработку.

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

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

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

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

Утверждения являются осмысленными операторами COBOL, которые выполняют некоторую обработку.

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

Вы можете связать вышеупомянутые термины с программой 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 онлайн.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 используется для определения структуры записи файла.

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

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

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

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

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

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

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

Программа КОБОЛ

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, который используется в вызываемых программах.

Live Demo

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

Аризона

Алфавиты (заглавные буквы)

2

Аризона

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

3

0-9

числовой

4

Космос

5

+

Знак плюс

6

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

7

*

звездочка

8

/

Косая черта

9

$

Знак валюты

10

,

запятая

11

;

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

12

,

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

13

«

Кавычки

14

(

Левая скобка

15

)

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

16

>

Лучше чем

17

<

Меньше, чем

18

:

Двоеточие

19

Апостроф

20

знак равно

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

Аризона

Алфавиты (заглавные буквы)

Аризона

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

0-9

числовой

Космос

+

Знак плюс

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

*

звездочка

/

Косая черта

$

Знак валюты

,

запятая

;

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

,

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

«

Кавычки

(

Левая скобка

)

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

>

Лучше чем

<

Меньше, чем

:

Двоеточие

Апостроф

знак равно

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

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

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

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

позиции поле Описание
1-6 Номера столбцов Зарезервировано для номеров строк.
7 Индикатор Он может иметь звездочку (*), обозначающую комментарии, дефис (-), обозначающий продолжение, и косую черту (/), обозначающую подачу формы.
8-11 Площадь А Все подразделения, разделы, абзацы и некоторые специальные записи КОБОЛ должны начинаться в области А.
12-72 Площадь Б Все операторы 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

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

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

  • Комментарий,
  • Буквальный или
  • Кобол слово.

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

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

Комментарий

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

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

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

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

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

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

Текст, выделенный жирным шрифтом , является комментариями в следующем примере:

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 символов. Апостроф или цитата могут быть частью литерала, только если они являются парными. Начало и конец букв должны быть одинаковыми, апостроф или цитата.

пример

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

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

Invalid:
   This is invalid
   This isnt valid

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

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

пример

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

Valid:
   100
   +10.9
   -1.9

Invalid:
   1,00
   10.
   10.9-

Слово КОБОЛ

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

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

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

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

Зарезервированные слова — это предопределенные слова в языке COBOL. Ниже перечислены различные типы зарезервированных слов, которые мы часто используем.

  • Ключевые слова, такие как ADD, ACCEPT, MOVE и т. Д.

  • Специальные символы, такие как +, -, *, <, <= и т. Д.

  • Образные константы — это постоянные значения, такие как НОЛЬ, ПРОСТРАНСТВА и т. Д. Все постоянные значения переносных констант указаны в следующей таблице.

Ключевые слова, такие как ADD, ACCEPT, MOVE и т. Д.

Специальные символы, такие как +, -, *, <, <= и т. Д.

Образные константы — это постоянные значения, такие как НОЛЬ, ПРОСТРАНСТВА и т. Д. Все постоянные значения переносных констант указаны в следующей таблице.

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

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

ВЫСОКИЕ ЗНАЧЕНИЯ

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

2

НИЗКИЕ ЗНАЧЕНИЯ

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

3

ZERO / обнуляет

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

4

ПРОСТРАНСТВА

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

5

ЦИТАТЫ

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

6

ВСЁ буквальное

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

ВЫСОКИЕ ЗНАЧЕНИЯ

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

НИЗКИЕ ЗНАЧЕНИЯ

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

ZERO / обнуляет

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

ПРОСТРАНСТВА

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

ЦИТАТЫ

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

ВСЁ буквальное

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

КОБОЛ — Типы данных

Разделение данных используется для определения переменных, используемых в программе. Чтобы описать данные в 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 до 49

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

3

66

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

4

77

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

5

88

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

01

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

02 до 49

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

66

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

77

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

88

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

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

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

Элементарные предметы не могут быть разделены дальше. Номер уровня, Имя данных, предложение Picture и предложение 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 используется для определения следующих элементов:

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

  • Знак может использоваться с числовыми данными. Это может быть либо +, либо -.

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

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

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

Знак может использоваться с числовыми данными. Это может быть либо +, либо -.

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

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

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

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

9

числовой

2

буквенный

3

Икс

алфавитно-цифровой

4

В

Неявный десятичный

5

S

Знак

6

п

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

9

числовой

буквенный

Икс

алфавитно-цифровой

В

Неявный десятичный

S

Знак

п

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

пример

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

Live Demo

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 —

Live Demo

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.

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

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

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

Программа COBOL

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 : 2014-08-30

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

Глагол Initialize используется для инициализации группового элемента или элементарного элемента. Имена данных с предложением RENAME не могут быть инициализированы. Числовые элементы данных заменяются нулями. Буквенно-цифровые или буквенные элементы данных заменяются пробелами. Если мы включим термин ЗАМЕНА, то элементы данных могут быть инициализированы с указанным значением замены, как показано в следующем примере:

Live Demo

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 элемента данных источника, то в дополнительные байты будут добавлены ZEROS или SPACES. Следующий пример проясняет это.

Live Demo

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.

пример

Live Demo

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.

пример

Live Demo

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

пример

Live Demo

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

пример

Live Demo

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

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

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

пример

Live Demo

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 —

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

Переопределить пункт

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

Синтаксис

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

пример

Live Demo

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 зарезервирован для переименования.

Синтаксис

Ниже приводится синтаксис предложения 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 находятся на одном уровне. Определение переименования должно быть следующим описанием данных, которое вы хотите переименовать. Не используйте переименования с номерами уровней 01, 77 или 66. Имена данных, используемые для переименований, должны быть в последовательности. Элементы данных с условием возникновения не могут быть переименованы.

пример

Live Demo

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

КОБОЛ — Условные заявления

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

  • IF Условие
  • Условие отношений
  • Условие подписи
  • Состояние класса
  • Условие-Название Условие
  • Отрицательное состояние
  • Комбинированное условие

IF Условие

Оператор 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.

пример

Live Demo

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

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

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

Для нечисловых операндов

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

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

Синтаксис

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

[Data Name/Arithmetic Operation]

   [IS] [NOT] 

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

[Data Name/Arithmetic Operation] 

пример

Live Demo

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

Условие подписи

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

Синтаксис

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

[Data Name/Arithmetic Operation] 

   [IS] [NOT] 

[Positive, Negative or Zero]

[Data Name/Arithmetic Operation]

пример

Live Demo

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

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

Условие класса используется для проверки, содержит ли операнд только алфавиты или числовые данные. Пространства рассматриваются в ALFHABETIC, ALFHABETIC-LOWER и ALPHABETIC-UPPER.

Синтаксис

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

[Data Name/Arithmetic Operation>]

   [IS] [NOT] 

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

[Data Name/Arithmetic Operation]

пример

Live Demo

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-NUM1 IS NUMERIC

Условие-имя Условие

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

Синтаксис

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

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

пример

Live Demo

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.

пример

Live Demo

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.

пример

Live Demo

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 в программах на Си.

пример

Live Demo

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 — Loop Заявления

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

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

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

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

In-line Perform

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

Синтаксис

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

PERFORM 
   DISPLAY 'HELLO WORLD'
END-PERFORM.

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

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

Синтаксис

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

PERFORM PARAGRAPH1 THRU PARAGRAPH2

пример

Live Demo

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

пример

Live Demo

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.

пример

Live Demo

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.

пример

Live Demo

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

GO TO para-name.

Условно GO TO

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

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

пример

Live Demo

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 — Обработка строк

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

  • Осмотреть
  • строка
  • расшатывать

Осмотреть

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

Тальманские

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

Синтаксис

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

INSPECT input-string
TALLYING output-count FOR ALL CHARACTERS

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

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

пример

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

Замена

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

Синтаксис

Ниже приведен синтаксис параметра «Замена»:

INSPECT input-string REPLACING ALL char1 BY char2.

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

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

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

пример

Live Demo

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 —

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: используется для подсчета длины новой объединенной строки
  • Delimited указывает конец строки
  • Указатель и переполнение не являются обязательными

пример

Live Demo

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 —

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.

пример

Live Demo

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 называются таблицами. Массив представляет собой линейную структуру данных и представляет собой набор отдельных элементов данных одного типа. Элементы данных таблицы внутренне отсортированы.

Стол Декларации

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

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

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

Синтаксис

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

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

пример

Live Demo

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.

Синтаксис

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

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

пример

Live Demo

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

пример

Live Demo

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

Индекс

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

Синтаксис

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

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

пример

Live Demo

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 используется для изменения значения индекса. Заданный глагол используется для инициализации, увеличения или уменьшения значения индекса. Он используется с Search и Search All, чтобы найти элементы в таблице.

Синтаксис

Ниже приведен синтаксис для использования оператора 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

пример

Live Demo

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

Поиск

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

пример

Live Demo

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

Искать все

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

пример

Live Demo

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 — Обработка файлов

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

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

  • поле
  • запись
  • Физическая запись
  • Логическая запись
  • файл

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

Структура программы

поле

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

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

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

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

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

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

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

запись

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

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

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

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

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

файл

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

COBOL — Организация файлов

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Последовательные выходные файлы являются хорошим вариантом для печати.

Синтаксис

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

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

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

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

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

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

Файл данных содержит записи в последовательной схеме.

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

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

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

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

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

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

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

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

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

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

Синтаксис

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Синтаксис

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

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

COBOL — Режим доступа к файлам

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

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

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

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

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

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

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

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

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

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

Для относительных файлов относительные ключи записи используются для извлечения записей.

Синтаксис

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

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

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

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

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

  • Для относительных файлов записи извлекаются через относительные ключи записи.

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

Для относительных файлов записи извлекаются через относительные ключи записи.

Синтаксис

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

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

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

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

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

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

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

Синтаксис

OPEN "mode" file-name.

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

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

вход

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

2

Выход

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

3

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

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

4

IO

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

вход

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

Выход

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

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

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

IO

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

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

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

Синтаксис

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

READ file-name NEXT RECORD INTO ws-file-structure
   AT END DISPLAY 'End of File'
   NOT AT END DISPLAY 'Record Details:' ws-file-structure
END-READ.

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

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

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

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

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

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

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

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

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

ENVIRONMENT DIVISION.
   INPUT-OUTPUT SECTION.
      FILE-CONTROL.
      SELECT STUDENT ASSIGN TO 'input.txt'
      ORGANIZATION IS LINE SEQUENTIAL.            

DATA DIVISION.
   FILE SECTION.
   FD STUDENT.
   01 STUDENT-FILE.
      05 STUDENT-ID PIC 9(5).
      05 NAME PIC A(25).

   WORKING-STORAGE SECTION.
   01 WS-STUDENT.
      05 WS-STUDENT-ID PIC 9(5).
      05 WS-NAME PIC A(25).
   01 WS-EOF PIC A(1). 

PROCEDURE DIVISION.
   OPEN INPUT STUDENT.
      PERFORM UNTIL WS-EOF='Y'
         READ STUDENT INTO WS-STUDENT
            AT END MOVE 'Y' TO WS-EOF
            NOT AT END DISPLAY WS-STUDENT
         END-READ
      END-PERFORM.
   CLOSE STUDENT.
STOP RUN.

Предположим, что данные входного файла, доступные в файле input.txt, содержат следующее:

20003 Mohtashim M.
20004 Nishant Malik
20005 Amitabh Bachhan

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

20003 Mohtashim M.            
20004 Nishant Malik           
20005 Amitabh Bachhan 

Синтаксис

Ниже приводится синтаксис для чтения записи, когда режим доступа к файлу является случайным —

READ file-name RECORD INTO ws-file-structure
   KEY IS rec-key
   INVALID KEY DISPLAY 'Invalid Key'
   NOT INVALID KEY DISPLAY 'Record Details: ' ws-file-structure
END-READ.

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

Предположим, что файл, представленный на мэйнфреймах, имеет то же содержимое, что и файл input.txt в приведенном выше примере.

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

ENVIRONMENT DIVISION.
   INPUT-OUTPUT SECTION.
   FILE-CONTROL.
   SELECT STUDENT ASSIGN TO IN1
      ORGANIZATION IS INDEXED
      ACCESS IS RANDOM
      RECORD KEY IS STUDENT-ID
      FILE STATUS IS FS.

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

PROCEDURE DIVISION.
   OPEN INPUT STUDENT.
      MOVE 20005 TO STUDENT-ID.
      
      READ STUDENT RECORD INTO WS-STUDENT-FILE
         KEY IS STUDENT-ID
         INVALID KEY DISPLAY 'Invalid Key'
         NOT INVALID KEY DISPLAY WS-STUDENT-FILE
      END-READ.
      
   CLOSE STUDENT.
STOP RUN.

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

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//IN1 DD DSN = STUDENT-FILE-NAME,DISP=SHR

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

20005 Amitabh Bachhan 

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

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

Оператор write может использоваться с опцией FROM для прямой записи записей из рабочих переменных хранилища. From является необязательным предложением. Если режим доступа последовательный, то для записи записи файл должен открываться в режиме вывода или в режиме расширения. Если режим доступа является случайным или динамическим, то для записи записи файл должен открываться в режиме вывода или в режиме ввода-вывода.

Синтаксис

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

WRITE record-buffer [FROM ws-file-structure]
END-WRITE.

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

WRITE record-buffer [FROM ws-file-structure]
   INVALID KEY DISPLAY 'Invalid Key'
   NOT INVALID KEY DISPLAY 'Record Inserted'
END-WRITE.

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

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

ENVIRONMENT DIVISION.
   INPUT-OUTPUT SECTION.
   FILE-CONTROL.
   SELECT STUDENT ASSIGN TO OUT1
      ORGANIZATION IS SEQUENTIAL
      ACCESS IS SEQUENTIAL
      FILE STATUS IS FS.

DATA DIVISION.
   FILE SECTION.
   FD STUDENT
   01 STUDENT-FILE.
      05 STUDENT-ID PIC 9(5).
      05 NAME PIC A(25).
      05 CLASS PIC X(3).

   WORKING-STORAGE SECTION.
   01 WS-STUDENT.
      05 WS-STUDENT-ID PIC 9(5).
      05 WS-NAME PIC A(25).
      05 WS-CLASS PIC X(3).

PROCEDURE DIVISION.
   OPEN EXTEND STUDENT.
      MOVE 1000 TO STUDENT-ID.
      MOVE 'Tim' TO NAME.
      MOVE '10' TO CLASS.
      WRITE STUDENT-FILE
      END-WRITE.	
   CLOSE STUDENT.
STOP RUN.

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

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//OUT1 DD DSN = OUTPUT-FILE-NAME,DISP = (NEW,CATALOG,DELETE)

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

1000 Tim         10

Перепишите глагол

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

Синтаксис

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

REWRITE record-buffer [FROM ws-file-structure]
END-REWRITE.

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

REWRITE record-buffer [FROM ws-file-structure]
   INVALID KEY DISPLAY 'Invalid Key'
   NOT INVALID KEY DISPLAY 'Record Updated'
END-REWRITE.

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

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

ENVIRONMENT DIVISION.
   INPUT-OUTPUT SECTION.
   FILE-CONTROL.
   SELECT STUDENT ASSIGN TO IN1
      ORGANIZATION IS INDEXED
      ACCESS IS RANDOM
      RECORD KEY IS STUDENT-ID
      FILE STATUS IS FS.

DATA DIVISION.
   FILE SECTION.
   FD STUDENT
   01 STUDENT-FILE.
      05 STUDENT-ID PIC 9(4).
      05 NAME PIC A(12).
      05 CLASS PIC X(3).
      
   WORKING-STORAGE SECTION.
   01 WS-STUDENT.
      05 WS-STUDENT-ID PIC 9(5).
      05 WS-NAME PIC A(25).
      05 WS-CLASS PIC X(3).

PROCEDURE DIVISION.
   OPEN I-O STUDENT.
   MOVE '1000' TO STUDENT-ID.
  
   READ STUDENT
      KEY IS STUDENT-ID
      INVALID KEY DISPLAY KEY IS NOT EXISTING
   END-READ.
  
   MOVE 'Tim Dumais' TO NAME.
   REWRITE STUDENT-FILE
   END-REWRITE.
   CLOSE STUDENT.
STOP RUN.

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

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//IN1 DD DSN = OUTPUT-FILE-NAME,DISP = SHR

Когда вы скомпилируете и запустите вышеуказанную программу, она обновит запись —

1000 Tim Dumais  10

Удалить глагол

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

Синтаксис

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

DELETE file-name RECORD
   INVALID KEY DISPLAY 'Invalid Key'
   NOT INVALID KEY DISPLAY 'Record Deleted'
END-DELETE.

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

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

ENVIRONMENT DIVISION.
   INPUT-OUTPUT SECTION.
   FILE-CONTROL.
   SELECT STUDENT ASSIGN TO OUT1
      ORGANIZATION IS INDEXED
      ACCESS IS RANDOM
      RECORD KEY IS STUDENT-ID
      FILE STATUS IS FS.

DATA DIVISION.
   FILE SECTION.
   FD STUDENT
   01 STUDENT-FILE.
      05 STUDENT-ID PIC 9(4).
      05 NAME PIC A(12).
      05 CLASS PIC X(3).
   WORKING-STORAGE SECTION.
   01 WS-STUDENT.
      05 WS-STUDENT-ID PIC 9(5).
      05 WS-NAME PIC A(25).
      05 WS-CLASS PIC X(3).

PROCEDURE DIVISION.
   OPEN I-O STUDENT.
   MOVE '1000' TO STUDENT-ID.
   
   DELETE STUDENT RECORD
      INVALID KEY DISPLAY 'Invalid Key'
      NOT INVALID KEY DISPLAY 'Record Deleted'
   END-DELETE.
   
   CLOSE STUDENT.
STOP RUN.

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

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//OUT1 DD DSN = OUTPUT-FILE-NAME,DISP = SHR

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

Record Deleted

Начать глагол

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

Синтаксис

Ниже приведен синтаксис для размещения указателя на конкретную запись —

START file-name KEY IS [=, >, <, NOT, <= or >=] rec-key
   INVALID KEY DISPLAY 'Invalid Key'
   NOT INVALID KEY DISPLAY 'File Pointer Updated'
END-START.

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

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

Синтаксис

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

CLOSE file-name.

КОБОЛ — Подпрограммы

Подпрограмма Cobol — это программа, которая может быть скомпилирована независимо, но не может быть выполнена независимо. Существует два типа подпрограмм: внутренние подпрограммы, такие как операторы Perform, и внешние подпрограммы, такие как глагол CALL.

Позвонить глагол

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

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

Ниже перечислены требования к программам.

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

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

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

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

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

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

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

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

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

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

Синтаксис

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

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

пример

Следующий пример — MAIN вызывающая программа, а 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.

пример

Следующий пример — MAIN вызывающая программа, а 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

Типы звонков

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

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

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

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

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

КОБОЛ — Внутренняя сортировка

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

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

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

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

Внутренняя сортировка используется для сортировки файлов в программе на языке COBOL. Глагол SORT используется для сортировки файла.

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

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

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

  • Рабочий файл используется для хранения записей во время процесса сортировки. Записи входного файла переносятся в рабочий файл для процесса сортировки. Этот файл должен быть определен в разделе «Файл» в разделе «Запись SD».

  • Выходной файл — это файл, который мы получаем после процесса сортировки. Это конечный результат сортировки глагола.

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

Рабочий файл используется для хранения записей во время процесса сортировки. Записи входного файла переносятся в рабочий файл для процесса сортировки. Этот файл должен быть определен в разделе «Файл» в разделе «Запись SD».

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

Синтаксис

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

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

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

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

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

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

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

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

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

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

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

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

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

пример

В следующем примере 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. Файлы, используемые в процессе слияния —

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

Синтаксис

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

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

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

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

  • Открывает рабочий файл в режиме IO, входные файлы в режиме INPUT и выходной файл в режиме OUTPUT.

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

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

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

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

Открывает рабочий файл в режиме IO, входные файлы в режиме INPUT и выходной файл в режиме OUTPUT.

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

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

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

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

пример

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

  • Встроенный SQL
  • Прикладное программирование DB2
  • Переменные хоста
  • SQLCA
  • SQL-запросы
  • курсоры

Встроенный SQL

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

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

Прикладное программирование DB2

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

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

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

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

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

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

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

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

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

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

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

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

Синтаксис

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

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», которая содержит «Student-Id», «Student-Name» и «Student-Address».

Таблица STUDENT содержит следующие данные —

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

В следующем примере показано использование запроса 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, который является неисполнимым оператором.

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
/*

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