В формате 2 оператора SEARCH (ИСКАТЬ) результат операции SEARCH ALL (ИСКАТЬ ОСОБО) определен только в следующих ситуациях:
данные в таблице упорядочены таким же образом, как это описано в варианте KEY IS (ПО ВОЗРАСТАНИЮ (УБЫВАНИЮ) КЛЮЧА), связанном с идентификатором-1;
значения ключа (ключей), упомянутого во фразе WHEN (КОГДА), достаточны, чтобы однозначно идентифицировать < элемент таблицы.
’ (4) Если используется формат 2 оператора SEARCH (ИС
КАТЬ), то может иметь место непоследовательный тип поиска;
і начальная установка имени-индекса для идентификатора-1 иг- ; норируется, и установка имени-индекса меняется в ходе опера- і ции поиска способом, определяемым реализацией, с теми огра- ’ ничениями, что никогда значение имени-индекса не превзойдет значение, которое соответствует последнему элементу в табли- ! це, и не будет меньше значения, которое соответствует первому ( элементу таблицы. Длина таблицы определяется во фразе OCCURS (ПОВТОРЯЕТСЯ) (см. п. 5.8 настоящей части). Ес- , ли для каждой установки индекса в разрешенном интервале ка- ' кое-либо условие, задаваемое во фразе WHEN (КОГДА), не > удовлетворено, то управление передается повелительному-опе- , ратору-1 фразы AT END (В КОНЦЕ), если она указана, или ; на конец оператора SEARCH (ИСКАТЬ), если эта фраза не за- • дана. В любом случае конечная установка индекса не определена. Если все условия могут быть удовлетворены, то индекс ус- ■ танавливается на соответствующее вхождение, которое позволя- ■ ет удовлетворить условия, и управление передается повелитель- ному-оператору-2, если он указан, или следующему выполнимо- ; му предложению, если указана фраза NEXT SENTENCE (СЛЕДУЮЩЕЕ ПРЕДЛОЖЕНИЕ).
(5) После выполнения повелительного-оператора-1 или по- : велительного-оператора-2, которые не кончаются оператором ; GO ТО (ПЕРЕЙТИ), управление передается на конец операто- i pa SEARCH (ИСКАТЬ).
і (6) В формате 2 имя-индекса, которое используется в опера- ; ции поиска, есть первое (или единственное) имя-индекса, указанное в варианте INDEXED BY (ИНДЕКСИРУЕТСЯ) фразы OCCURS (ПОВТОРЯЕТСЯ), связанной с идентификатором-1.
і Все другие имена-индексов для идентификатора-1 остаются не- ; изменными.
Если в формате 1 фраза VARYING (МЕНЯЯ) не исполь- ; зуется, имя-индекса, которое используется в операции поиска, есть первое (или единственное) имя-индекса, указанное в ва- ; рианте INDEXED BY (ИНДЕКСИРУЕТСЯ) фразы OCCURS (ПОВТОРЯЕТСЯ), связанной с идентификатором-1. Все другие имена-индексов для идентификатора-1 остаются неизменными.
Если в формате 1 задана фраза VARYING (МЕНЯЯ) имя-индекса-1 и это имя-индекса-1 указано в варианте INDEXED (ИНДЕКСИРУЕТСЯ) фразы OCCURS (ПОВТОРЯЕТСЯ), связанной с идентификатором-1, то оно используется для поиска. Если имя-индекса-1 не указано в варианте INDEXED BY (ИНДЕКСИРУЕТСЯ) идентификатора-1 или задана фраза VARYING (МЕНЯЯ) идентификатор-2, то для поиска используется первое (или единственное) имя-индекса, заданное в варианте INDEXED BY (ИНДЕКСИРУЕТСЯ) фразы OCCURS (ПОВТОРЯЕТСЯ), связанной с идентификатором-1. Кроме того, имеют место следующие операции:
если используется фраза VARYING (МЕНЯЯ) имя-индек- са-1 и это имя-индекса-1 появляется в варианте INDEXED BY (ИНДЕКСИРУЕТСЯ) фразы OCCURS (ПОВТОРЯЕТСЯ), связанной со статьей другой таблицы, то номер вхождения, представляемый именем-индекіса-1, увеличивается на такую же величину и в то же время, что и номер ^вхождения, представляемый именем-индекса, связанным с идентификатором-1;
если задана фраза VARYING (МЕНЯЯ) идентификатор-2 и идентификатор-2 есть индексное данное, то данное, представленное идентификатором-2, увеличивается на такую же величину и в то же время, что и индекс, связанный с идентификатором-1. Если идентификатор-2 не является индексным данным, то значение, представленное идентификатором-2, увеличивается на единицу в то же время, что и индекс, связанный с идентификатором-1.
Область действия оператора SEARCH (ИСКАТЬ) ограничивается фразой END-SEARCH (КОНЕЦ-ИСКАТЬ) (см. ч. 4, п. 6.4.3).
На рис. 1 приведена схема выполнения формата 1 оператора SEARCH (ИСКАТЬ), содержащего две фразы WHEN (КОГДА). Эта схема не должна рассматриваться как предписание по реализации оператора. На приведенном рисунке звездочками помечены следующие операции:
— операции, включаемые только тогда, когда соответствующий вариант указан в формате оператора;
* — каждая из этих передач ведет к точке выхода оператора SEARCH (ИСКАТЬ), если только повелительный-оператор не заканчивается оператором GO ТО (ПЕРЕЙТИ).
6.23. Оператор SET (УСТАНОВИТЬ)
Назначение
Оператор SET (УСТАНОВИТЬ) учреждает точки обращений для операций обработки таблиц, устанавливая имена-ин- дексов, соответствующие элементам таблицы
.
О
SET
(2) Оператор SET (УСТАНОВИТЬ) используется для изменения состояния внешних переключателей.
бщий формат Формат 1имя-индекса-1
и
идентификатор-2 имя-индекса-2 целое-1
УСТАНОВИТЬ ( идентиФикатоР'789101112 I НА
[ имя-индекса-1 ) —
Ф
идентификатор-2 имя-индекса-2 целое-1
ормат 2сит , I UP BY 1 І идентификатор-3
SET {имя-индекса-3}... ктл,™
' ’ ( DOWN BY I I целое-2
TAunmrn. ( QI [ПРИБАВЛЯЯ]
УСТАНОВИТЬ {имя-индекса-3}. . . { тттг,т-. п >
[ ВЫЧИТАЯ J
[ идентификатор-3 ]
] целое-2 J
Формат 3
SET {{мнемоническое-имя-1}. . . ТО | ! } • • •
— OFF
УСТАНОВИТЬ {{мнемоническое-имя-1}. . . НА
I ВКЛЮЧЕНО 1
( ВЫКЛЮЧЕНО j } ‘ ■ -
Формат 4
SET {имя-условия-1} . .. ТО TRUE
УСТАНОВИТЬ {имя-условия-1}... НА ИСТИНА(6) Имя-условия-1 должно соответствовать условной переменной.
6.23.4. Общие правила
Форматы 1 и 2
Имена-индексов рассматриваются относительно конкретной таблицы и определяются заданием варианта INDEXED (ИНДЕКСИРУЕТСЯ) фразы OCCURS (ПОВТОРЯЕТСЯ) для этой таблицы.
Если задано имя-индекса-1, то его значение после выполнения оператора SET (УСТАНОВИТЬ) должно соответствовать номеру вхождения элемента в таблицу, соответствующую имени-индекса-1. Значение индекса, соответствующего имени-индекса,, после выполнения оператора PERFORM (ВЫПОЛНИТЬ) или оператора SEARCH (ИСКАТЬ) может быть установлено на номер вхождения, выходящий за пределы области допустимых значений для индексов соответствующей таблицы (см. п. 6.21 настоящей части). Если указано имя-индекса-2, то его значение перед выполнением оператора SET (УСТАНОВИТЬ) должно соответствовать номеру вхождения элемента в таблицу, связанную с именем- индекса-1.
Если задано имя-индекса-3, то его значение до и после выполнения оператора SET (УСТАНОВИТЬ) должно соответствовать номеру вхождения элемента в таблицу, связанную с именем-ин- декса-3.
В формате 1 выполняются следующие действия:
имя-индекса-1 устанавливается на значение, указывающее на элемент таблицы, соответствующий номеру вхождения, определяемому именем-индекса-2, идентификатором-2 или целым-1. Если идентификатор-2 есть индексное данное или если имя-индекса-2 относится к той же таблице, что и имя-индекса-1, то преобразование не происходит;
если идентификатор-1 есть индексное данное, то он может быть установлен равным либо значению имени-индекса-2, либо идентификатору-2, где идентификатор-2 также является индексным данным; в обоих случаях преобразование не происходит;
если идентификатор-1 не является индексным данным, то он может быть установлен только на номер вхождения, соответствующий значению имени-индекса-2. В этом случае ни идентификатор-2, ни целое-1 не могут быть использованы;
процесс повторяется для каждого вхождения имени-индек- са-1 и идентификатора-1, если они заданы. При этом каждый раз используется значение имени-индекса-2 или данного, представленного идентификатором-2, которое они имели в начале выполнения оператора. Всякое индексирование, связанное с идентификатором-1, выполняется непосредственно перед изменением соответствующего данного.
В формате 2 значение имени-индекса-3 увеличивается или уменьшается на значение, которое соответствует числу вхождений, представляемому целым-2 или значением данного, представленного идентификатором-3, после этого процесс повторяется для каждого вхождения имени-индекса-3 и т. д. Каждый раз используется значение данного, представленного идентификатором-3, такое же, как в начале выполнения оператора.
Ниже представлены допустимые комбинации операндов в операторе SET (УСТАНОВИТЬ) в формате 1. Указанные ссылки относятся к общим правилам, применяемым при пересылке для данного сочетания операндов. .
Пересылаемое данное |
Принимающее данное |
||
Целоз-данное |
Имя-индекса |
Индексное данное |
|
Целое-литерал |
Не разрешено Зв |
Разрешено За |
Не разрешено 36 |
Целое-данное |
Не разрешено Зв |
Разрешено За |
Не разрешено 36 |
Имя-индекса |
Разрешено 'Зв |
Разрешено За |
Разрешено 36 |
Индексное |
Не разрешено Зв |
Разрешено За* |
Разрешено 36* |
* Никакие преобразования не имеют места.
Формат 3
Состояние каждого внешнего переключателя, соответствующего мнемоническому-имени-1, изменяется таким образом, что результирующее значение «истина» вычисления имени-условия, связанного с этим переключателем, будет отражать состояние «включено», если указана фраза ON (ВКЛЮЧЕНО), или состояние «выключено»; если указана фраза OFF (ВЫКЛЮЧЕНО) (см. п. 6.3.1.4 настоящей части).
Формат 4
Литерал во фразе VALUE (ЗНАЧЕНИЕ), соответствующей имени-условия-1, присваивается условной переменной согласно правилам использования фразы VALUE (ЗНАЧЕНИЕ) (см. п. 5.15 настоящей части). Если указано несколько литералов во фразе VALUE (ЗНАЧЕНИЕ), условной переменной присваивается значение первого литерала, заданного в этой фразе.
Если указано несколько .имен условий при использовании ■ формата 4, результаты такие же, как и в случае записи отдельного оператора SET (УСТАНОВИТЬ) для каждого имени-условия-1 в том же порядке, в каком они указаны в операторе SET (УСТАНОВИТЬ).
Оператор STOP (ОСТАНОВИТЬ)
Назначение
Оператор STOP (ОСТАНОВИТЬ) прекращает полностью или временно выполнение единицы исполнения.
Указание литерала в операторе STOP (ОСТАНОВИТЬ) является устаревшим элементом в настоящем стандарте и будет удалено в следующей редакции стандарта.
Общий формат
STOP j RUN
[литерал-1
ОСТАНОВИТЬ j РАБ0ТУ . j
( литерал-1 j
Синтаксические правила
Литерал-1 не может быть стандартной константой, начинающейся словом ALL (ВСЕ).
Если оператор STOP RUN (ОСТАНОВИТЬ РАБОТУ) появляется в последовательности повелительных операторов предложения, то он должен быть последним оператором предложения.
Если литерал числовой, то он должен быть целым без знака.
Общие правил а
Если указана фраза RUN (РАБОТУ), выполнение единицы исполнения прекращается и управление передается операционной системе.
При выполнении оператора STOP RUN (ОСТАНОВИТЬ РАБОТУ) выполняется неявный оператор CLOSE (ЗАКРЫТЬ)1 без необязательных вариантов для всех открытых файлов данной единицы исполнения. Никакие процедуры USE (ИСПОЛЬЗОВАТЬ), соответствующие этим файлам, не выполняются.
Если единица исполнения получала сообщения, то по оператору STOP RUN (ОСТАНОВИТЬ РАБОТУ) система управления сообщениями уничтожает в очереди сообщения, лишь частично полученные этой единицей исполнения.
Часть сообщения, передаваемая из единицы исполнения оператором SEND (ПОСЛАТЬ), но не законченная EMI (ИКС) или EGI (ИКГ), исключается из системы.
Если указан вариант STOP (ОСТАНОВИТЬ) литерал-1, выполнение единицы исполнения приостанавливается, а литерал-1 сообщается оператору ЭВМ. Продолжение функционирования единицы исполнения начинается со следующего выполнимого оператора в том случае, когда подключена зависящая от реализации процедура управления возобновлением единицы исполнения.
Оператор STRING (СОБРАТЬ)
Назначение
Оператор STRING (СОБРАТЬ) соединяет часть или полное содержимое двух или нескольких данных в одно данное.
Общи й формат
идентификатор-1 ]
литерал-1 ]
идентификатор-2
DELIMITED BY литерал-2 SIZE
INTO идентификатор-3
[WITH POINTER идентификатор-4]
[ON OVERFLOW повелительный-оператор-1]
[NOT ON OVERFLOW повелительный-оператор-3]
[END-STRING]
СОБРАТЬ I идентификатор-1 1 . ОГРАНИЧИВАЯСЬ . .ПИТРПЯЛ-
идентификатор-2
литерал-2 ...
РАЗМЕРОМ
В идентификатор-3 [УКАЗАТЕЛЬ идентификатор-4]
[ПРИ ПЕРЕПОЛНЕНИИ повелительный-оператор-1 ]
[БЕЗ ПЕРЕПОЛНЕНИЯ повелительный-оператор-2]
[КОНЕЦ-СОБРАТЬ]
Синтаксические правила
Литерал-1 и литерал-2 не могут быть стандартными константами, начинающимися со слова ALL (ВСЕ).
Все литералы должны быть нечисловыми литералами и все идентификаторы, за исключением идентификатора-4, дОлжны быть определены явно или неявно с использованием DISPLAY (ДЛЯ ВЫДАЧИ).
Идентификатор-3 не может быть модификацией ссылки.
Идентификатор-3 не может быть редактируемым данным; он не может быть описан с фразой JUSTIFIED (СДВИНУТО).
Идентификатор-4 должен быть описан как элементарное числовое целое данное, имеющее достаточный размер для того, чтобы содержать значение, равное увеличенному на единицу размеру данного, представленного идентификатором-3. Символ Р(М) не может использоваться в строке-литер шаблона данного, представленного идентификатором-4.
Если идентификатор-1 или идентификатор-2 представляют элементарные числовые данные, то они должны быть описаны как целые, причем соответствующие строки-литер шаблона не должны содержать литеры Р (М).