Перейти до вмісту
ГОСТ 22558-89
/ 116

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

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

[END-SUBTRACT]

птідати f СООТВЕТСТВЕННО 1

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

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

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

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

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

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

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

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

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

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

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

В формате 1 значения операндов, предшествующие слову FROM (ОТ), складываются вместе, эта сумма сохраняется в про», межуточном данном. Значение этого промежуточного данного вы­читается из значения данного, представленного идентификато­ром-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 и литерал-2 должны быть нечисловыми лите­ралами. Литералы могут быть стандартными константами, кро­ме начинающихся со слова ALL (ВСЕ).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Литерал-1 или значение данного, представленного иден­тификатором-2, может содержать любые литеры из множества литер машины.

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

Если во фразе DELIMITED BY (ОГРАНИЧИВАЯСЬ) задано два или более ограничителя, между ними существует ус­ловие OR (ИЛИ). Каждый ограничитель поочередно сравни­вается с рассматриваемыми позициями, пересылаемого поля в указанной последовательности. При обнаружении совпадения рассматриваемые литеры считаются единым ограничителем. Ни одна литера в пересылаемом поле не может рассматриваться принадлежащей нескольким ограничителям.

К началу работы оператора UNSTRING (РАЗОБРАТЬ) данное, определяемое идентификатором-4, является текущим принимающим полем, в которое пересылаются литеры данного,

представленного идентификатором-1. Позиции последнего про­сматриваются согласно следующим правилам:

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

если задана фраза DELIMITED BY (ОГРАНИЧИВАЯСЬ), просмотр прекращается при обнаружении вхождения ограничи­теля, заданного литералом-1 или значением данного, представ­ленного идентификатором-2 (см. общее правило 11). Если фра­за DELIMITED BY (ОГРАНИЧИВАЯСЬ) не задана, число про­сматриваемых литер равно размеру текущего принимающего данного (однако, если знак принимающего данного занимает отдельную позицию литеры, число просматриваемых литер по­лагается на единицу меньшим размера текущего принимающего поля данного).

Если вхождение ограничителя не обнаружено, просмотр оканчивается на последней позиции литеры данного, представ­ленного идентификатором-1;

просмотренные литеры (за исключением литер, совпадаю­щих с ограничителем, если они имеются) рассматриваются как элементарные буквенно-цифровые данные и пересылаются в те­кущее принимающее поле согласно правилам оператора MOVE (ПОМЕСТИТЬ) (см. п. 6.19 настоящей части);

если задана фраза DELIMITER (ОГРАНИЧИТЕЛЬ), об­наруженные при просмотре литеры ограничителя рассматрива­ются как элементарное буквенно-цифровое данное и помеща­ются согласно правилам оператора MOVE (ПОМЕСТИТЬ) в данное, представленное идентификатором-5.

Если вхождение ограничителя в данное, представленное идентификатором-1, не обнаружено, то данное, представленное идентификатором-5, заполняется пробелами; |

если задана фраза COUNT IN (СЧЕТ), то количество I просмотренных литер (исключая литеры ограничителя, если они | имеются) помещается согласно правилам для перемещения ї элементарного данного в данное, представленное идентифика- [ тором-6; S

если задана фраза DELIMITED BY (ОГРАНИЧИВАЯСЬ), то после заполнения очередного принимающего данного про- | смотр продолжается с первой литеры справа от ограничителя., f Если фраза DELIMITED BY (ОГРАНИЧИВАЯСЬ) не задана, I' просмотр продолжается от первой литеры, находящейся справа | от последней пересланной литеры; | I ж) после завершения пересылки в принимающее данное, [ представленное идентификатором-4, текущим принимающим ‘ полем становится данное, представленное следующим вхожде- ( ниєм идентификатора-4, и все описанные выше действия повто­ряются до тех пор, пока не будут исчерпаны все литеры в дан­ном, определяемом идентификатором-1, или не будут заполнены все принимающие поля.

Начальная установка значения данного, связанного с фразой POINTER (УКАЗАТЕЛЬ) или TALLYING (СЧИТАЯ), осуществляется пользователем.

' (15) Значение данного, представленного идентификато­ром-?, увеличивается на единицу при просмотре каждой литеры в данном, представленном идентификатором-1. После завер­шения выполнения оператора UNSTRING (РАЗОБРАТЬ) с фразой POINTER (УКАЗАТЕЛЬ) значение данного, представ­ленного идентификатором-?, становится равным начальному значению плюс число просмотренных литер данного, представ­ленного идентификатором-1.

После завершения выполнения оператора UNSTRING і (РАЗОБРАТЬ) с фразой TALLYING (СЧИТАЯ) значение дан­ного, представленного идентификатором-8, становится равным его начальному значению плюс число принимающих полей, участвовавших в выполнении оператора.

Условие переполнения возникает при следующих ситуа­циях:

если к моменту начала ^работы оператора UNSTRING (РАЗОБРАТЬ) значение данного, представленного идентифи­катором-?, меньше 1 или больше размера данного, представлен­ного идентификатором-1;

если в некоторый момент выполнения оператора UNSTRING (РАЗОБРАТЬ) данное, представленное идентифи­катором-!, содержит непросмотренные позиции, а все принима­ющие поля уже использованы.

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

ле завершения выполнения повелительного-оператора-1 управ­ление передается на конец оператора UNSTRING (РАЗО­БРАТЬ).

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

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

Если идентификатор-1, идентификатор-2 и идентифи-і катор-3 занимают ту же область памяти, что и идентифика­тор-5, идентификатор-6, идентификатор-7 или идентифика­тор-8, или если идентификатор-4, идентификатор-5 и идентифи­катор-6 занимают ту же область памяти, что и идентификатор-7 или идентификатор-8, или если идентификатор-7 и идентифика­тор-8 занимают одну и ту же область памяти, результат вы­полнения оператора UNSTRING (РАЗОБРАТЬ) не определен, даже если эти идентификаторы описаны одной и той же статьей описания данных (см. п. 6.4.5 настоящей части).

Побачили розбіжність з офіційним текстом?

Повідомити про неточність

Напишіть, що саме розходиться з офіційною публікацією. Код документа вкажіть у повідомленні — так ми швидше знайдемо потрібне місце.

Перейти до форми зворотного зв'язку

Дивіться також

Весь розділ →