1. Общие правила

  1. Идентификатор-1 и литерал-1 представляют собой пере­сылаемые данные, а идентификатор-3 — принимающее данное.

  2. Литерал-2 и значение данного, представленного иденти­фикатором-2, указывают одну или несколько литер, ограничи­вающих перемещение. Если используется фраза SIZE (РАЗ­МЕРОМ), данные, определенные идентификатором-1 или лите­ралом-1, помещаются полностью. Если в качестве ограничите­ля используется стандартная константа, она представляет не­числовой литерал длиной в одну литеру.

  3. Если вместо литерала-1 и литерала-2 используется стан­дартная константа, то она представляет данное длиной в одну литеру с использованием DISPLAY (ДЛЯ ВЫДАЧИ).

  4. Перемещение данного при выполнении оператора STRING (СОБРАТЬ) определяется следующими правилами:

  1. литеры из литерала-1 или из значения данного, представ­ляемого идентификатором-1, передаются в данное, представля­емое идентификатором-3, согласно правилам перемещения бук­венно-цифрового в буквенно-цифровое данное, однако дополне­ние пробелами не производится;

  2. если задана фраза DELIMITED (ОГРАНИЧИВАЯСЬ) без фразы SIZE (РАЗМЕРОМ), значение данного, представляе­мого идентификатором-1, или значение литерала-1 передается в принимающее данное в последовательности, заданной опера­тором STRING (СОБРАТЬ), начиная с самой левой литеры и продолжая слева направо, пока не будет достигнут конец дан­ного или не встретится литера (литеры), заданная литералом-2 или значением данного, представленного идентификатором-2. Эта литера (литеры) не пересылается;

  3. если задана фраза DELIMITED BY SIZE (ОГРАНИЧИ­ВАЯСЬ РАЗМЕРОМ), значение, представленное литералом-1, или значение данного, представляемого идентификатором-1, пе­редаются в последовательности, заданной оператором STRING (СОБРАТЬ), в данное, представляемое идентификатором-3, по­ка все данные не будут переданы или не будет достигнут ко­нец данного, определяемого идентификатором-3.

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

  1. Если задана фраза POINTER (УКАЗАТЕЛЬ), значение данного, представленного идентификатором-4, перед выполне­нием оператора STRING (СОБРАТЬ) должно быть установле­но в начальное значение (не меньше 1).

  2. Если фраза POINTER (УКАЗАТЕЛЬ) не задана, опера­тор выполняется так, как если бы было задано начальное значе­ние данного, представленного идентификатором-4, равное 1.

  3. Когда литеры пересылаются в принимающее данное, на которое ссылается идентификатор-3, пересылка литер в при­нимающее данное начинается от указанной значением данного, представленного идентификатором-4, позиции литеры этого дан­ного (при условии, что значение данного, представленного иден­тификатором-4, не превышает длины данного, представленного идентификатором-3) и затем данное, представленное идентифи- катором-4, увеличивается на единицу перед пересылкой каж­дой литеры или перед завершением выполнения оператора STRING (СОБРАТЬ). Значение данного, представленного идентификатором-4, во время выполнения оператора STRING (СОБРАТЬ) изменяется только вышеописанным методом.

  4. В результате выполнения оператора STRING (СОБ­РАТЬ) изменяется только та часть данного, представленного идентификатором-3, к которой было обращение во время выпол­нения оператора STRING (СОБРАТЬ). Оставшаяся часть дан­ного, представленного идентификатором-3, после выполнения оператора STRING (СОБРАТЬ) не изменяется.

  5. Перед каждой пересылкой литеры в данное, представ­ленное идентификатором-3, если значение данного, представ­ленного идентификатором-4, окажется меньшим 1 либо прев­зойдет число позиций литер в данном, представляемом иденти­фикатором-3, дальнейшее перемещение в данное, представляе­мое идентификатором-3, прекращается и фраза NOT ON OVERFLOW (БЕЗ ПЕРЕПОЛНЕНИЯ), если она указана, игно­рируется, а управление передается на конец оператора STRING (СОБРАТЬ). Если в формате оператора указана фраза ON OVERFLOW (ПРИ ПЕРЕПОЛНЕНИИ), то выполняется пове- лительный-оператор-1, указанный в этой фразе. Если управле­ние передается повелительному-оператору-1, выполнение про­должается согласно правилам для каждого оператора, указан­ного в повелительном-операторе-1. Если выполняется оператор ветвления процедур или условный оператор, вызывающий яв­ную передачу управления, то управление передается согласно правилам для этих операторов; в противном случае по заверше­нии выполнения повелительного-оператора-1 управление пере­дается на конец оператора STRING (СОБРАТЬ).

  6. Если во время выполнения оператора STRING (СОБ­РАТЬ) с фразой NOT ON OVERFLOW (БЕЗ ПЕРЕПОЛНЕ­НИЯ) условия, описанные в общем правиле (9), не встречают­ся, после пересылки данных согласно другим общим правилам фраза ON OVERFLOW (ПРИ ПЕРЕПОЛНЕНИИ), если она указана, игнорируется и управление передается на конец опера­тора STRING (СОБРАТЬ), или, если указана фраза NOT ON OVERFLOW (БЕЗ ПЕРЕПОЛНЕНИЯ), повелительному-опера- тору-2. Если управление передается повелительному-операто- ру-2, выполнение продолжается согласно правилам для опера­торов, указанных в повелительном-операторе-2. Если выполня­ется ветвление процедуры или условный оператор, ведущий к явной передаче управления, управление передается в соответст­вии с правилами для этого оператора; в противном случае пос­ле завершения выполнения повелительного-оператора-2 управ­ление передается на конец оператора STRING (СОБРАТЬ).

(И) Фраза END-STRING (КОНЕЦ-СОБРАТЬ) ограничива­ет область действия оператора STRING (СОБРАТЬ) (см. ч. 4, п. 6.4.3).

  1. Если идентификатор-1 и идентификатор-2 занимают ту же область памяти, что и идентификатор-3 и идентификатор-4, или идентификатор-3 и идентификатор-4 занимают одну и ту же область памяти, результат выполнения оператора STRING (СОБРАТЬ) не определен, даже если они определены одной и той же статьей описания данных (см. п. 6.4,5 настоящей части).

  1. Оператор SUBTRACT (ОТНЯТЬ)

    1. Назначение

Оператор SUBTRACT (ОТНЯТЬ) используется для того, что­бы вычесть одно числовое данное или сумму двух или более число­вых данных из одного или более данных и установить значения од­ного или более данных равными результату.

  1. Общий формат

Формат 1

SUBTRACT f иДентиФикатор-1 j FROM {идентификатор-2

[ литерал-1 J

[ROUNDED]}...

[ON SIZE ERROR повелительный-оператор-1 ]

[NOT ON SIZE ERROR повелительный-оператор-2]

[END-SUBTRACT]

отнять |литерал1

[ идентификатор-1 J

ОТ {идентификатор-2 [ОКРУГЛЯЯ]} . ■ •

[ПРИ ПЕРЕПОЛНЕНИИ повелительный-оператор-1 ]

[БЕЗ ПЕРЕПОЛНЕНИЯ повелительный-оператор-2]

[КОНЕЦ-ОТНЯТЬ]

Формат 2

SUBTRACT І «ектвфикатор-1 ] FROM | »Д<="иф.»<атор.2

[литерал-1 j [литерал-2

GIVING {идентификатор-3 [ROUNDED]} ...

[ON SIZE ERROR повелительный-оператор-1]

[NOT ON SIZE ERROR повелительный-оператор-2]

[END-SUBTRACT]

ОТНЯТЬ литерал-1 1 ОТ < литерал-2 ]

[ идентификатор-1 | ' [ идентификатор-2 J ПОЛУЧАЯ {идентификатор-3 [ОКРУГЛЯЯ]}...

[ПРИ ПЕРЕПОЛНЕНИИ повелительный-оператор-1]

[БЕЗ ПЕРЕПОЛНЕНИЯ повелительный-оператор-2]

[КОНЕЦ-ОТНЯТЬ]

Формат 3

сттптплгт (CORRESPONDING 1 , ,

SUBTRACT {-лхРЕ> 1 идентификатор-1

I СОКК I

FROM, идентификатор-2 [ROUNDED]

[ON SIZE ERROR повелительный-оператор-1]

[NOT ON SIZE ERROR повелительный-оператор-2]

[END-SUBTRACT]птідати f СООТВЕТСТВЕННО 1

ОТНЯТЬ I } идентификатор-!

ОТ идентификатор-2 [ОКРУГЛЯЯ]

[ПРИ ПЕРЕПОЛНЕНИИ повелительный-оператор-1]

[БЕЗ ПЕРЕПОЛНЕНИЯ повелительный-оператор-2]

[КОНЕЦ-ОТНЯТЬ]

  1. Синтаксические правила

  1. Каждый идентификатор должен представлять числовое эле­ментарное данное, исключая формат 2, в котором идентификатор, указанный справа от слова GIVING (ПОЛУЧАЯ), должен отно-. ситься к числовому или к числовому редактируемому данному, и формат 3, в котором каждый идентификатор должен относить­ся к групповому данному.

  2. Каждый литерал должен быть числовым литералом.

  3. Композиция операндов не должна содержать более восем­надцати цифр (см. п. 6.4.4 настоящей части). При этом в формате 1 композиция операндов определяется использованием всех опе­рандов в заданном операторе; в формате 2 композиция операндов определяется использованием всех операндов в заданном операто­ре, исключая идентификаторы, которые следуют за словом GIVING (ПОЛУЧАЯ) ; в формате 3 композиция операндов оп- Іределяется отдельно для каждой пары соответствующих данных

  4. CORR (СООТВ) есть сокращение слова CORRESPON­DING (СООТВЕТСТВЕННО).

  1. О б щ и е правила

  1. В формате 1 значения операндов, предшествующие слову FROM (ОТ), складываются вместе, эта сумма сохраняется в про», межуточном данном. Значение этого промежуточного данного вы­читается из значения данного, представленного идентификато­ром-2, причем результат запоминается как новое значение данного, представленного идентификатором-2; затем этот процесс повторя­ется для всех последующих вхождений идентификатора-2 в поряд­ке слева направо.

  2. В формате 2 все литералы и значения данных, представлен­ные идентификаторами, предшествующими слову FROM (ОТ), складываются вместе и эта сумма вычитается из литерала-2 или значения данного, представленного идентификатором-2, после чего полученная разность запоминается как новое значение каж­дого данного, представленного идентификатором-3.

(3) Если используется формат 3, данные из группы, пред-

ставленной

идентификатором-1,

вычитаются от соответствую-

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

(4) Отведение достаточного поля для выполнения вычислений без потери значащих цифр обеспечивается компилятором.


(5) Дополнительные правила и пояснения, относящиеся к это­му оператору, приводятся в соответствующих параграфах (см. ч. 4, п. 6.4.3; ч. 6, пп. 6.4.1—6.4.6).

6.27. Оператор UNSTRING (РАЗОБРАТЬ)

6.27.1. Назначение

Оператор UNSTRING (РАЗОБРАТЬ) позволяет расчленить

. данное, находящееся в пересылаемом поле, и поместить отдель-

ные его части в несколько принимающих полей.

6.27.2. О б щ и й формат

UNSTRING идентификатор-1

DELIMITED BY [ALL] ( иДентиФикатоР-2 1 Г 0R [ALL]

j идентификатор-3 111

[ литерал-2 J J J

INTO {идентификатор-4 [DELIMITER IN идентификатор-5]

[COUNT IN идентификатор-6]} ...

[WITH POINTER идентификатор-7]

[TALLYING IN идентификатор-8]

[ON OVERFLOW повелительный-оператор-1]

[NOT ON OVERFLOW повелительный-оператор-2]

[END-UNSTRING]

РАЗОБРАТЬ идентификатор-1 [ОГРАНИЧИВАЯСЬ [ВСЕМИ]

J идентификатор-2 1[ИЛИ ^ВСЕМИ]

[ литерал-1 ]

І идентификатор-3 ] 1 1

[ литерал-2 J J

В {идентификатор-4 [ОГРАНИЧИТЕЛЬ В идентифика-

тор-5]

[СЧЕТ В идентификатор-6]} ...

[УКАЗАТЕЛЬ идентификатор-7]

[СЧИТАЯ В идентификатор-8]

[ПРИ ПЕРЕПОЛНЕНИИ повелительный-оператор-1 ]

[БЕЗ ПЕРЕПОЛНЕНИЯ повелительный-оператор-2]

[КОНЕЦ-РАЗОБРАТЬ]

  1. С и н т а к с и ч е с к и е правила

  1. Литерал-1 и литерал-2 должны быть нечисловыми лите­ралами. Литералы могут быть стандартными константами, кро­ме начинающихся со слова ALL (ВСЕ).

  2. Идентификатор-1, идентификатор-2, идентификатор-3 и идентификатор-5 должны быть определены явно или неявно как буквенно-цифровые данные.

  3. Идентификатор-4 может быть задан как буквенное, бук­венно-цифровое или числовое данное (причем в строке литер шаблона не должен использоваться символ Р(М)), описанное явно или неявно с использованием DISPLAY (ДЛЯ ВЫДАЧИ).

  4. Идентификатор-6 и идентификатор-8 должны быть описа­ны как элементарные числовые целые, при этом символ Р (М) не может использоваться в строке литер шаблона.

  5. Идентификатор-7 должен быть описан как элементарное числовое целое, его размер должен быть достаточен, чтобы со­держать значение, равное размеру данного, представленного идентификатором-1, увеличенное на единицу. Символ Р (М) не может использоваться в строке литер шаблона идентификато­ра-?.

  6. Фразы DELIMITER (ОГРАНИЧИТЕЛЬ) и COUNT (СЧЕТ) могут быть заданы только тогда, когда задана фраза DELIMITED (ОГРАНИЧИВАЯСЬ).

  7. Идентификатор-1 не должен быть модифицированной ссылкой.

  1. О б щ и е правила

  1. Все сказанное об идентификаторе-2 и литерале-1 отно­сится в равной мере к идентификатору-3 и литералу-2 соответ­ственно.

  2. Идентификатор-1 представляет собой пересылаемое поле;

  3. Идентификатор-4 представляет собой поле принимаю­щего данного, идентификатор-5 представляет принимающее поле для ограничителя.

  4. Литерал-1 или данное, представленное идентификато­ром-2, задает границу пересылаемого данного, называемую ог­раничителе^

  5. Данное, представленное идентификатором-6, представ­ляет количество литер в пересылаемом данном, выделенных с помощью ограничителя для перемещения в принимающее дан­ное, представленное идентификатором-4. В это количество не входят литеры ограничителя.

  6. Значение данного, представленного идентификатором-?, указывает относительную позицию литеры в поле, определен­ном идентификатором-1.

  7. К моменту завершения оператора UNSTRING (РАЗОБ­РАТЬ) значение данного, представленного идентификатором-8, указывает число принимающих данных, участвовавших в опе­рации.

  8. Если стандартная константа используется как ограничи­тель, она представляет собой нечисловой литерал размером в одну литеру.