Пример 4
INSPECT ТЕМ TALLYING
СО-О FOR ALL «АВ» AFTER «ВА» BEFORE «ВС»
ПРОСМОТРЕТЬ ТЕМ СЧИТАЯ
В СО-О ВСЕ «АВ» ПОСЛЕ «ВА» ДО «ВС»
INSPECT ТЕМ REPLACING
ALL «АВ» BY «XY» AFTER «ВА» BEFORE «ВС»ПРОСМОТРЕТЬ ТЕМ ЗАМЕНЯЯ
ВСЕ «АВ» НА «ХУ» ПОСЛЕ «ВА» ДО «ВС». Результаты работы операторов показаны ниже.
Исходное значение данного ТЕМ |
со 0 |
Результирующее значение данного ТЕМ |
АВАВАВАВС |
1 |
ABABXYABC |
Пример 5
INSPECT ТЕМ CONVERTING
«ABCD» ТО «XYZX» AFTER QUOTE BEFORE «#» ПРОСМОТРЕТЬ ТЕМ ПРЕВРАЩАЯ
«ABCD» В «XYZX» ПОСЛЕ КАВЫЧКА ДО «#»
Этот оператор эквивалентен следующему:
INSPECT ITEM REPLACING
ALL «А» BY «X» AFTER QUOTE BEFORE «#» ALL «В» BY «Y» AFTER QUOTE BEFORE «#» ALL «С» BY «Z» AFTER QUOTE BEFORE «#» ALL «D» BY «X» AFTER QUOTE BEFORE «#» ПРОСМОТРЕТЬ ТЕМ ЗАМЕНЯЯ
ВСЕ «А» НА «X» ПОСЛЕ КАВЫЧКА ДО «#» ВСЕ «В» НА «Y» ПОСЛЕ КАВЫЧКА ДО «#» ВСЕ «С» НА «Z» ПОСЛЕ КАВЫЧКА ДО «#» ВСЕ «D» НА «X» ПОСЛЕ КАВЫЧКА ДО «#»
Результаты работы оператора показаны ниже.
Начальное значение ТЕМ |
Результирующее значение ТЕМ |
AC «AEBDFBCD # АВ» D |
AC «XEYXFYZX # АВ» D |
6 19. Оператор MOVE (ПОМЕСТИТЬ)
Назначение
Оператор MOVE (ПОМЕСТИТЬ) пересылает данные в соответствии с правилами редактирования в одно или несколько полей данных.
Общий формат
Формат 1
MOVE І иДентиФикатоР 1 1 JQ {идентификатор-2}...
[литерал-1 J ..
ПОМЕСТИТЬ ( ндеитнфикзтоР'1 1 в {идентификатор-2} ...
( литерал-1 J —
■Формат 2 |
[CORRESPONDING ) , , |
MOVE } идентификатор-1 ТО -[сокк ] |
идентификатор-2 |
(СООТВЕТСТВЕННО) |
НОМЕРІ И 1Ь { 1 идентификатор-1 В I 1 D I |
идентификатор-2 |
6.19.3. Синтаксические правила
Литерал-1 или данное, представленное идентификатором-1, представляют пересылаемое поле. Данное, представленное идентификатором-2, представляет принимающее поле.
CORR (СООТВ) является сокращением слова CORRESPONDING (СООТВЕТСТВЕННО).
При использовании фразы CORRESPONDING (СООТВЕТСТВЕННО) оба идентификатора должны представлять групповые данные.
Индексное данное не может появляться как операнд оператора MOVE (ПОМЕСТИТЬ).
6.19.4. Общие правила
Если используется фраза CORRESPONDING (СООТВЕТСТВЕННО), то отдельные компоненты идентификатора-1 перемещаются в соответствующие компоненты идентификатора-2 согласно правилам, приведенным в п. 6.4.3 настоящей части. Результат действия фразы такой же, как при использовании отдельного оператора MOVE (ПОМЕСТИТЬ) для каждой пары соответствующих идентификаторов.
Литерал-1 или содержимое данного, представленного идентификатором- 1, перемещается в данное, представленное иденти- фикатором-2 в том порядке, в каком они определены. Правила, относящиеся к идентификатору-2, применяются также и к другим принимающим полям. | Длина и индексы, относящиеся к идентификатору-2, вычисляются непосредственно перед перемещением данного в соответствующее поле.
Индексы, связанные с идентификатором-1, вычисляются только один раз непосредственно перед помещением данных в первый из принимающих операндов.Длина данного, представленного идентификатором-1, вычисляется только один раз непосредственно перед помещением данных в первый из принимающих операндов.
На вычисление длины идентификатор а-1 или идентификатора-2 может влиять вариант DEPENDING ON (В ЗАВИСИМОСТИ ОТ) фразы OCCURS (ПОВТОРЯЕТСЯ) (см. п. 5.8 настоящей части).
Результат действия оператора
MOVE А (М) ТОМ, Р (М)
ПОМЕСТИТЬ А(М) В М, Р(М) эквивалентен операторам
MOVE А (М) ТО temp ПОМЕСТИТЬ А (М) В пром
MOVE temp ТО М ПОМЕСТИТЬ пром В М
MOVE temp ТО Р (М) ПОМЕСТИТЬ пром В Р (М)
где «temp» («пром») — промежуточный результат, обеспечиваемый реализацией.
Перемещение, в котором принимающий операнд является элементарным данным, а пересылаемый операнд — литералом либо элементарным данным, называется элементарным перемещением. Каждое элементарное данное принадлежит одной из следующих категорий: числовой, буквенной, буквенно-цифровой, числовой редактируемой, буквенно-цифровой редактируемой (см. п. 5.9 настоящей части). Числовые литералы принадлежат к числовой категории, а нечисловые — к буквенно-цифровой категории. Стандартная константа ZERO, ZEROES (НУЛЬ, НУЛИ) при перемещении в числовое или числовое редактируемое данное относится к числовой категории.
Во всех прочих случаях она относится к буквенно-цифровой категории.
Стандартная константа SPACE, SPACES (ПРОБЕЛ, ПРОБЕЛЫ) относится к буквенной категории. Все остальные стандартные константы относятся к буквенно-цифровой категории.
К элементарному перемещению применяются следующие правила:
буквенно-цифровое редактируемое, стандартная константа SPACE (ПРОБЕЛ) или буквенное данное не должны перемещаться в числовое или числовое редактируемое данное;
числовое или числовое редактируемое данное, числовой литерал и стандартная константа ZERO (НУЛЬ) не могут перемещаться в буквенное данное;
числовой литерал, не представляющий целое число, или числовое данное, имеющее значение, не являющееся целым числом, не может перемещаться в буквенно-цифровое или буквенно-цифровое редактируемое данное;
на уровне 1 числовое редактируемое данное не должно перемещаться в числовое или числовое редактируемое данное;
прочие элементарные перемещения являются допустимыми и выполняются согласно общему правилу (4).
(4) Во время выполнения допустимого элементарного перемещения производятся все необходимые преобразования данного из одной формы внутреннего представления в другую, сопровождаю- щиеся редактированием, определенным для принимающего данно- го, или дередактированием, предполагаемым принимающим дан-
ным. Следующие правила применяются к допустимым элементарным перемещениям:
если принимающим данным является буквенно-цифровое редактируемое или буквенно-цифровое данное, производится выравнивание и любое необходимое дополнение пробелами, как это определено стандартными правилами выравнивания (см. ч. 4, п. 4.3.6). Если пересылаемое данное описано как числовое со знаком, знак числа не пересылается; если знак числа занимает отдельную позицию литеры, то эта литера не пересылается и размер пересылаемого данного на одну литеру меньше, чем его действительный размер в терминах литер стандартного формата данных (см. п. 5.12 настоящей части).
Если пересылаемый операнд описан как числовое редактируемое данное, дередактирования не происходит. Если использование пересылаемого операнда отличается от использования принимающего операнда, происходит преобразование пересылаемого операнда во внутреннее представление принимающего операнда. Если пересылаемый операнд числовой и содержит литеру шаблона Р(М), считается, что все цифровые позиции, определяемые этой литерой, имеют значение нуль и учитываются при определении размера пересылаемого операнда;
если принимающим данным является числовое или числовое редактируемое данное, то производится выравнивание по десятичной точке и любое необходимое дополнение нулями согласно стандартным правилам выравнивания (см. ч. 4, п. 4.3.6), кроме случая, когда нули замещаются согласно требованиям редактирования. Если пересылаемый операнд является числовым редактируемым, требуется дередактирование для установления неотредак- тированного числового значения операнда, возможно, со знаком, затем это неотредактированное числовое значение помещается в принимающее поле.
Если принимающим является числовое данное со знаком, знак пересылаемого данного помещается в принимающее данное при этом выполняется необходимое преобразование представления знака (см. п. 5.12 настоящей части). Если пересылаемое данное описано без знака, принимающему данному присваивается положительный знак.
Если принимающее данное не имеет диака числа, при перемещении используется абсолютное значение пересылаемого данного.
Пересылаемое данное, описанное как буквенно-цифровое, перемещается так, как если бы оно было описано как числовое целой без знака;
в) если принимающее поле описано как буквенное, имеет место выравнивание и необходимое дополнение пробелами по ранее определенным правилам (см. ч. 4, п. 4.3.6).
Перемещение, которое не является элементарным, рассматривается как элементарное перемещение буквенно-цифрового данного в буквенно-цифровое; однако при этом не выполняются преобразования данных из одной формы внутреннего представления в другую. При таком перемещении принимающее поле будет заполняться без рассмотрения особенностей отдельных элементарных или групповых данных, содержащихся в пересылаемом или принимаю- щем поле, кроме случая, отмеченного в общем правиле фразы [ [OCCURS (ПОВТОРЯЕТСЯ) (см. ч. 4, п. 5.8). |
Ниже иллюстрируются допустимые сочетания категорий операндов оператора MOVE (ПОМЕСТИТЬ).
Категория пересылаемого данного |
Категория принимающего данного |
||
Буквенная |
Буквенно-цифровая, буквенно-цифровая редактируемая |
Числовая (целое), числовая (нецелое), числовая редак тн- руе.мая |
|
Буквенная |
Да По п. 4в |
Да По п. 4а |
Нет По п. За |
Буквенно-цифровая |
Да По п. 4в |
Да По п. 4а |
Да По п. 46 |
Буквенно-цифровая редактируемая |
Да По п. 4в |
Да Пэ п. 4а |
Нет По п. За |
Числовая (целое) |
Нет По п. 36 |
Да По п. 4а |
Да По п. 46 |
Числовая (нецелое) |
Нет По п. 36 |
Нет По п. Зв |
Да По п. 46 |
Числовая редактируемая |
Нет По и. 36 |
Да Пэ п. 4а |
Да По п. 46 |
Примечание. «Да» обозначает допустимость пересылки, «нет» — запрещение. Ссылка на общее правило указывает правило, запрещающее пересылку или объясняющее порядок перемещения.
Оператор MULTIPLY (УМНОЖИТЬ)
Назначение
Оператор MULTIPLY (УМНОЖИТЬ) позволяет перемножить числовые данные и присвоить значение произведения результату.
О б щ и й формат
Формат 1
... тт тшт V I идентификатор-! ] , о
MULTIPLY { , BY {идентификатор-2
( литерал-1 ]—
[ROUNDED])...
[ON SIZE ERROR повелительный-оператор-1]
[NOT ON SIZE ERROR повелительный-оператор-2]
[END-MULTIPLY]
vu.4T.vT/rjTT идентификатор-1 ... , , o
УМНОЖИТЬ , НА {идентификатор-2
(литерал-1 I —
[ОКРУГЛЯЯ]). ■■
[ПРИ ПЕРЕПОЛНЕНИИ повелительный-оператор-IJ
[БЕЗ ПЕРЕПОЛНЕНИЯ повелительный-оператор-2]
[КОНЕЦ-УМНОЖИТЬ]
Формат 2
MULTIPLY ( иДентиФикат°Р-56 ) BY I идентификатор-2 1
(литерал-1 j і литерал-2 ]
GIVING {идентификатор-3 [ROUNDED]}...
[ON SIZE ERROR повелительный-оператор-1]
[NOT ON SIZE ERROR повелительный-оператор-2]
[END-MULTIPLY]
УМНОЖИТЬ ! чдентнфик.тор-1 ] нд І ттдевтттфнкатор-2 I литерал-1 [ ( литерал-2
ПОЛУЧАЯ {идентификатор-3 [ОКРУГЛЯЯ]}. . .
[ПРИ ПЕРЕПОЛНЕНИИ повелительный-оператор-1] [БЕЗ ПЕРЕПОЛНЕНИЯ повелительный-оператор-2]
[КОНЕЦ-УМНОЖИТЬ] ментарное данное, за исключением формата 2, в котором любой идентификатор, который появляется только справа от слова GIVING (ПОЛУЧАЯ), должен представлять элементарное числовое или элементарное числовое редактируемое данное.
Каждый литерал должен быть числовым литералом.
Композиция операндов, полученная в результате умножения операндов, выровненных по положению их десятичной точки, не должна содержать более 18 цифр.
6.20.4. О б щ и е правила
При использовании формата 1 литерал-1 или значение данного, представленного идентификаторрм-1, хранится в промежуточном данном. Затем его промежуточное данное умножается на данное, представленное идентификатором-2. Значение множителя (значение данного, представленного идентификатором-2) заменяется этим произведением; аналогично промежуточное данное умножается на каждое последующее вхождение идентификатора-2 в указанном порядке слева направо.
При использовании формата 2 литерал-1 или значение данного, представленное идентификатором-1, умножается на лите- рал-2 или значение данного, представленного идентификатором-2, а результат хранится в данном, представленном каждым иденти- фикатором-3.
Дополнительные правила и пояснения^ относящиеся к этому оператору, приводятся в соответствующих параграфах (см. ч. 4, п. 6.4.3; ч. 6, пп. 6.4.1, 6.4.2, 6.4.4—6.4.6).
6.21. Оператор PERFORM (ВЫПОЛНИСЬ)
Назначение
Оператор PERFORM (ВЫПОЛНИТЬ) используется для явной передачи управления одной или нескольким процедурам и неявного возврата управления после завершения этих процедур. Оператор PERFORM (ВЫПОЛНИТЬ) используется также для управления выполнением одного или более повелительных операторов, находящихся в области действия этого оператора PERFORM (ВЫПОЛНИТЬ).
Общий формат
Ф
J THROUGH I THRU
ормат 1PERFORM [имя-процедуры-1 [
имя-процедуры-2] ]