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

если не определены ни LEADING (ВЕДУЩИЕ), ни FIRST (ПЕРВЫЙ) либо

если LEADING (ВЕДУЩИЕ) относится к литералу-1, а ли­терал-1 является ведущим вхождением, как определено в общих правилах (10) и (13), либо

если FIRST (ПЕРВЫЙ) относится к литералу-1, а лите­рал-1 является первым вхождением, как определено в общих пра­вилах (10) и (13);

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

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

если вхождение найдено, выполняется подсчет или замеще­ние согласно правилам (10) и (13).

Соседняя справа позиция литеры по отношению к самой правой из рассматриваемых в предыдущем цикле сравнения позиций ли­тер данного, представленного идентификатором-1, становится са­мой левой рассматриваемой позицией этого данного, после чего снова выполняется цикл сравнений, начиная с первого литерала-1;

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

если указана фраза CHARACTERS (ЛИТЕРЫ), в описан­ном выше цикле сравнения вместо литерала-1 всегда участвует од­нолитерный подразумеваемый операнд, значение которого в каж­дый момент совпадает с самой левой рассматриваемой позицией данного, представленного идентификатором-1.

(7) Операции сравнения, определенные правилами (6), огра­ничиваются фразами BEFORE (ДО) и AFTER (ПОСЛЕ) следую­щим образом:

если не указаны фразы BEFORE (ДО) и AFTER (ПОСЛЕ), литерал-1 или подразумеваемый операнд фразы CHARACTERS (ЛИТЕРЫ) участвует в сравнении согласно предыдущему прави­лу с самой левой позиции идентификатора-1;

если указана фраза BEFORE (ДО), то самая левая позиция литеры этого данного становится самой левой рассматриваемой' позицией; соседняя слева позиция литеры по отношению к перво­му вхождению литерала-2 в значение данного, представленного идентификатором-1, становится самой правой рассматриваемой позицией литеры этого данного;

если указана фраза AFTER (ПОСЛЕ), то соседняя справа позиция литеры по отношению к первому вхождению литерала-2 в данное, представленное идентификатором-1, становится самой левой рассматриваемой позицией этого данного, а его самая пра­вая позиция становится самой правой рассматриваемой позицией.

Если вхождение литерала-2 в значение данного, представлен­ного идентификатором-1, не установлено, цикл сравнения в случае фразы BEFORE (ДО) выполняется так, как если бы фраза BE­FORE (ДО) не была задана; в случае фразы AFTER (ПОСЛЕ) считается, что вхождение литерала-1 в значение данного, представ­ленного идентификатором-1, не обнаружено.

В формате 1

Слова ALL (ВСЕ), LEADING (ВЕДУЩИЕ) рассматривав ются как прилагательные, которые относятся ко всем последую-* щим литералам-1 до появления другого прилагательного.

При выполнении оператора INSPECT (ПРОСМОТРЕТЬ) значение данного, представленного идентификатором-2, не уста­навливается в начальное состояние.

Правила использования следующие:

Если задана фраза ALL (ВСЕ), значение данного, пред­ставленного идентификатором-2, увеличивается на единицу при каждом вхождении литер ала-1 в значение данного, представлен­ного идентификатором-1;

если задана фраза LEADING (ВЕДУЩИЕ), значение дан­ного, представленного идентификатором-2, увеличивается на еди-

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

если задана фраза CHARACTERS (ЛИТЕРЫ), значение дан­ного, на которое ссылается идентификатор-2, увеличивается на единицу при каждом просмотре литеры данного, представленного идентификатором-1.

При использовании формата 1 в случае, когда идентифи­катор-!, идентификатор-3 или идентификатор-4 занимают ту же область памяти, что и идентификатор-2, результат выполнения оператора INSPECT (ПРОСМОТРЕТЬ) не определен, даже если эти идентификаторы описаны одной и той же статьей описания дан­ных (см. п. 6.4.5 настоящей части).

В формате 2

Фразы ALL (ВСЕ), LEADING (ВЕДУЩИЕ), FIRST (ПЕРВЫЙ) применяются к каждой следующей за ними фразе BY (НА) до появления очередного вхождения одной из перечис­ленных фраз.

Правила замещения следующие:

если задана фраза CHARACTERS (ЛИТЕРЫ), каждая лите­ра значения данного, представляемого идентификатором-1, заме­няется на литерал-3;

если задана фраза ALL (ВСЕ), каждое вхождение литера­ла-1 в значение данного, представляемого идентификатором-1, за­меняется на литерал-3;

если задана фраза LEADING (ВЕДУЩИЕ), каждое смеж­ное вхождение литерала-1 в значение данного, представляемого идентификатором-1, заменяется на литерал-3 при условии, что сле­ва не были обнаружены позиции этого данного, которые не совпа­ли ни с одним из литералов-1;

когда задана фраза FIRST (ПЕРВЫЙ), самое левое вхож­дение литерала-1 в значение данного, представляемого идентифи­катором-1, заменяется литералом-3.

Это правило применяется ко всем последующим указаниям фра­зы FIRST (ПЕРВЫЙ) независимо от значения литерала-1.

При использовании формата 2 в случае, когда идентифи­катор-3, идентификатор-4 или идентификатор-5 занимают одну и ту же область памяти, результат выполнения оператора INSPECT (ПРОСМОТРЕТЬ) не определен, даже если эти идентификаторы описаны одной и той же статьей описания данных (см. п. 6.4.5 нас­тоящей части).

В формате 3

Оператор INSPECT (ПРОСМОТРЕТЬ) интерпретируется и выполняется так, как будто заданы два следующих друг за дру- 348

гом оператора INSPECT (ПРОСМОТРЕТЬ) для одного и того же идентификатора-1, один из которых имеет формат 1 с фразой TALLYING (СЧИТАЯ), тождественной соответствующей фразе оператора в формате 3, а другой — формат 2 с фразой REPLA­CING (ЗАМЕНЯЯ), тождественной соответствующей фразе опе­ратора в формате 3. К оператору в формате 1 применяются общие правила сравнения и подсчета. К оператору в формате 2 применя­ются общие правила сравнения и замены.

Индексы, связанные с любым идентификатором в операторе формата 2, вычисляются только один раз до выполнения операто­ра в формате 1.

В формате 4

Оператор INSPECT (ПРОСМОТРЕТЬ) интерпретиру­ется и выполняется так, как будто задан оператор INSPECT (ПРОСМОТРЕТЬ) в формате 2 для одного и того же иденти­фикатора-1 с последовательностью фраз ALL (ВСЕ) — по од­ной для каждой литеры литерала-4. Результат оператора такой же, как если бы в каждой фразе ALL (ВСЕ) в качестве литера­ла-1 указывалась единственная литера литерала-4, а в качест­ве литерала-3 — соответствующая единственная литера лите­рала-5. Соответствие между литерами литерала-4 и литерами литерала-5 осуществляется по порядковому номеру литеры в данном.

Если идентификатор-4, идентификатор-6 или идентифи­катор-7 занимают одну и ту же область памяти, результат вы­полнения оператора INSPECT (ПРОСМОТРЕТЬ) не определен, даже если эти идентификаторы определены одной и той же ста­тьей описания данных.

6.18.5. Примеры

В каждом из следующих примеров оператора INSPECT (ПРО­СМОТРЕТЬ) предполагается, что непосредственно перед выпол­нением оператора значения всех данных СО-О, СО-1, СО-2, СО-3, СО-4 равны нулю. В каждом примере, кроме последнего, приводят­ся результаты работы двух операторов INSPECT (ПРОСМОТ­РЕТЬ).

Пример 1.

INSPECT ТЕМ TALLYING

СО-О FOR ALL «АВ», ALL «D»

CO-1 FOR ALL «ВС»

CO-2 FOR LEADING «EF»

CO-3 FOR LEADING «В»

CO-4 FOR CHARACTERS;

ПРОСМОТРЕТЬ ТЕМ СЧИТАЯ

В СО-О, ВСЕ «АВ», ВСЕ «D»

В СО-1 ВСЕ «ВС»

В СО-2 ВЕДУЩИЕ «EF»

В СО-3 ВЕДУЩИЕ «В»

В СО-4 ЛИТЕРЫ;

INSPECT ТЕМ REPLACING

ALL «АВ» BY «XY», «D» BY «X»

ALL «ВС» BY «VW»

LEADING «EF» BY «TU»

LEADING «В» BY «S»

FIRST «G» BY «Р»

CHARACTERS BY «Z»

ПРОСМОТРЕТЬ ТЕМ ЗАМЕНЯЯ

ВСЕ «АВ» НА «XY», «D» НА «X»

ВСЕ «ВС» НА «VW»

ВЕДУЩИЕ «EF» НА «TU»

ВЕДУЩИЕ «В» НА «S»

ПЕРВЫЙ «G» НА «Р»

ЛИТЕРЫ НА «Z»

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

Начальное значение данного ТЕМ

с 0-0

СО-1

СО-2

СО-3

СО-4

Результирующее значе­ние данного ТЕМ

EFABDBCGABEFGG

3

1

1

0

5

TUXYXVWRXYZZPZ

ВАВАВС

2

0

0

1

1

SXYXYZ

ВВВС

0

1

0

2

0

SSVW

Пример 2

INSPECT ТЕМ TALLYING

CO-O FOR CHARACTERS

CO-O FOR ALL «А»

ПРОСМОТРЕТЬ ТЕМ СЧИТАЯ

В СО-О ЛИТЕРЫ

В СО-1 ВСЕ «А»

INSPECT ТЕМ REPLACING

CHARACTERS BY «Z»

ALL «А» BY «X»

ПРОСМОТРЕТЬ ТЕМ ЗАМЕНЯЯ

ЛИТЕРЫ НА «Z»

ВСЕ «А» НА «X»

Результаты работы операторов показаны ниже.

Исходное значение данного ТЕМ

СО-О

СО-1

Результирующее значение данного ТЕМ

ввв

3

0

ZZZ

АВА

3

0

ZZZ

Пример 3

INSPECT ТЕМ TALLYING

CO-O FOR ALL «АВ» BEFORE «ВС»

CO-1 FOR LEADING «В» AFTER «D»

CO-2 FOR CHARACTERS AFTER «А» BEFORE «С» ПРОСМОТРЕТЬ ТЕМ СЧИТАЯ ,

В СО-О ВСЕ «АВ» ДО «ВС»

В СО-1 ВЕДУЩИЕ «В» ПОСЛЕ «D»

В СО-2 ЛИТЕРЫ ПОСЛЕ «А» ДО «С»

INSPECT ТЕМ REPLACING

ALL «АВ» BY «XY» BEFORE «ВС»

LEADING «В» BY «W» AFTER «D»

FIRST «Е» BY «V» AFTER «D»

CHARACTERS BY «Z» AFTER «А» BEFORE «С»

ПРОСМОТРЕТЬ ТЕМ ЗАМЕНЯЯ

ВСЕ «АВ» НА «XY» ДО «ВС»

ВЕДУЩИЕ «В» НА «W» ПОСЛЕ «D»

ПЕРВЫЙ «Е» НА «V» ПОСЛЕ «D»

ЛИТЕРЫ НА «Z» ПОСЛЕ «А» ДО «С»

Результаты работы операторов показаны ниже.

Начальное значение ТЕМ

СО-О

СО 1

СО-2

Результирующее значение ТЕМ

BBEABDABABBCABEE

3

а

2

BBEXYZXYXYZCABVE

ADDDDC

0

0

4

AZZZZC

ADDDDA

(I

0'

5

AZZZZZ

CDDDDC

0

0

0

CDDDDC

BDBBBDB

0.

3

0

BDWWWDB

Пример 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 (СООТВ) является сокращением слова CORRES­PONDING (СООТВЕТСТВЕННО).

При использовании фразы 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 ПОМЕСТИТЬ А (М) В пром

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

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

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

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

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

Весь розділ →