ГОСТ 22558-89 сторінка 45 з 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 (ДО) выполняется так, как если бы фраза BEFORE (ДО) не была задана; в случае фразы 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 с фразой REPLACING (ЗАМЕНЯЯ), тождественной соответствующей фразе оператора в формате 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 (СООТВ) является сокращением слова 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 ПОМЕСТИТЬ А (М) В пром
Побачили розбіжність з офіційним текстом?