6.18.4.Общие правила
Для всех форматов:
При просмотре (который включает цикл сравнения, установление границ для фраз BEFORE (ДО) и AFTER (ПОСЛЕ) и механизм подсчета или замещения) данное, представленное идентификатором-1, независимо от его класса, просматривается, начиная от своей самой левой позиции литеры, слева направо до самой правой позиции; выполняемые при этом действия и область их применения оговорены в общих правилах (5) —(7).
При просмотре содержимое данных, указанных идентификатором-1, идентификатором-3, идентификатором-4, идентификатором-5, идентификатором-6, идентификатором-?, трактуется следующим образом:
если какое-либо из данных, представленных идентификатором-!, идентификатором-3, идентификатором-4, идентификатором-5, идентификатором-6 или идентификатором-?, описано как буквенное или буквенно-цифровое, то оператор INSPECT (ПРОСМОТРЕТЬ) обрабатывает значение каждого такого данного как строку литер;
если какое-либо из данных, представленных идентификатором-1, идентификатором-3, идентификатором-4, идентификатором-5, идентификатором-6 или идентификатором-?, описано как буквенно-цифровое редактируемое, числовое редактируемое или числовое без знака, то оператор INSPECT (ПРОСМОТРЕТЬ) обрабатывает значение каждого такого данного так, как переопределенное на буквенно-цифровое (см. общее правило 2а);
если какой-либо из перечисленных ранее идентификаторов представляет числовое данное со знаком, это данное рассматривается при выполнении оператора так, как если бы оно было помещено в числовое данное без знака того же размера, после чего к нему применяется правило 26 (п. 6.19 настоящей части). Если идентификатор-1 представляет числовое данное со знаком, первоначальное значение знака сохраняется после завершения оператора INSPECT (ПРОСМОТРЕТЬ).
х (3) При изложении ниже правил (5) — (17) все, оговоренное для литерала-1, литерала-2, литерала-3, литерала-4 и литерала-5, применяется в равной мере к значениям данных, представленных идентифИкатором-3, идентификатором-4, идентификатором-5, иден- тификіатором-6 и идентификатором-? соответственно.
Индексы, связанные с любым идентификатором, вычисляются один раз в начале выполнения оператора INSPECT (ПРОСМОТРЕТЬ).
В форматах 1 и 2
При просмотре значения данного, представленного идентификатором-1, каждое обнаруженное вхождение литерала-1 подсчитывается (при использовании формата 1) или заменяется вхождением литерала-3 (при использовании формата 2).
Проверка вхождения литерала-1 в идентификатор-1 для подсчета или замены осуществляется по следующим правилам:
а) операнды фраз TALLYING (СЧИТАЯ) и REPLACING (ЗАМЕНЯЯ) рассматриваются в том порядке, в котором они представлены в операторе слева направо. Первый из литералов-1 сравнивается с соответствующим количеством первых слева позиций литер данного, представленного идентификатором-1. Литерал-1 совпадает с порцией данного, представляемого идентификатором-1, если их литеры попарно совпадают и:
если не определены ни 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 |