КОБОЛ — Обзор
Кобол — это язык высокого уровня. Нужно понимать, как работает 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 онлайн.
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, который используется в вызываемых программах.
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 isn’t 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 —
IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-NUM1 PIC S9(3)V9(2). 01 WS-NUM2 PIC PPP999. 01 WS-NUM3 PIC S9(3)V9(2) VALUE -123.45. 01 WS-NAME PIC A(6) VALUE 'ABCDEF'. 01 WS-ID PIC X(5) VALUE 'A121$'. PROCEDURE DIVISION. DISPLAY "WS-NUM1 : "WS-NUM1. DISPLAY "WS-NUM2 : "WS-NUM2. DISPLAY "WS-NUM3 : "WS-NUM3. DISPLAY "WS-NAME : "WS-NAME. DISPLAY "WS-ID : "WS-ID. STOP RUN.
JCL для выполнения вышеуказанной программы COBOL —
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC PGM = HELLO
Когда вы компилируете и запускаете вышеуказанную программу, она дает следующий результат —
WS-NUM1 : +000.00 WS-NUM2 : .000000 WS-NUM3 : -123.45 WS-NAME : ABCDEF WS-ID : A121$
Пункт о стоимости
Значение Value является необязательным предложением, которое используется для инициализации элементов данных. Значения могут быть числовым литералом, буквенно-цифровым литералом или образной константой. Может использоваться как с групповыми, так и с элементарными предметами.
пример
В следующем примере показано использование предложения VALUE —
IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-NUM1 PIC 99V9 VALUE IS 3.5. 01 WS-NAME PIC A(6) VALUE 'ABCD'. 01 WS-ID PIC 99 VALUE ZERO. PROCEDURE DIVISION. DISPLAY "WS-NUM1 : "WS-NUM1. DISPLAY "WS-NAME : "WS-NAME. DISPLAY "WS-ID : "WS-ID. STOP RUN.
JCL для выполнения вышеуказанной программы COBOL —
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC PGM = HELLO
Когда вы компилируете и запускаете вышеуказанную программу, она дает следующий результат —
WS-NUM1 : 03.5 WS-NAME : ABCD WS-ID : 00
КОБОЛ — Основные глаголы
Глаголы COBOL используются в разделе процедур для обработки данных. Оператор всегда начинается с глагола COBOL. Есть несколько глаголов COBOL с различными типами действий.
Глаголы ввода / вывода
Глаголы ввода / вывода используются для получения данных от пользователя и отображения результатов программ COBOL. Следующие два глагола используются для этого процесса —
Принять глагол
Глагол Accept используется для получения данных, таких как дата, время и день, из операционной системы или непосредственно от пользователя. Если программа принимает данные от пользователя, то она должна быть передана через JCL. При получении данных из операционной системы, опция FROM включена, как показано в следующем примере —
ACCEPT WS-STUDENT-NAME. ACCEPT WS-DATE FROM SYSTEM-DATE.
Показать глагол
Глагол отображения используется для отображения результатов программы 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 не могут быть инициализированы. Числовые элементы данных заменяются нулями. Буквенно-цифровые или буквенные элементы данных заменяются пробелами. Если мы включим термин ЗАМЕНА, то элементы данных могут быть инициализированы с указанным значением замены, как показано в следующем примере:
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. Следующий пример проясняет это.
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.
пример
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.
пример
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).
пример
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.
пример
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. Это замена для сложения, вычитания, умножения и деления.
пример
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. Определение переопределения должно быть следующим описанием данных, которое вы хотите переопределить. Переопределенный элемент всегда будет иметь то же значение, что и переопределенный элемент.
пример
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. Имена данных, используемые для переименований, должны быть в последовательности. Элементы данных с условием возникновения не могут быть переименованы.
пример
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.
пример
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]
пример
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]
пример
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]
пример
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].
пример
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.
пример
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.
пример
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 в программах на Си.
пример
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
пример
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
пример
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.
пример
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.
пример
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, то управление будет перенесено во второй абзац и так далее.
пример
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.
пример
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 указывает конец строки
- Указатель и переполнение не являются обязательными
пример
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.
пример
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.
пример
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).
пример
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 до количества раз, когда таблица встречается. Индекс может быть любым положительным числом. Это не требует каких-либо объявлений в разделении данных. Он автоматически создается с предложением происходит.
пример
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.
пример
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
пример
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 и продолжается до конца таблицы.
пример
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
Искать все
Поиск по всем — это двоичный метод поиска, который используется для поиска элементов внутри таблицы. Таблица должна быть в отсортированном порядке для опции Поиск всех. Индекс не требует инициализации. При бинарном поиске таблица делится на две половины и определяет, в какой половине присутствует искомый элемент. Этот процесс повторяется до тех пор, пока элемент не будет найден или пока не будет достигнут конец.
пример
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 /*
Когда вы компилируете и запускаете вышеуказанную программу, она дает следующий результат —