1. В формате 2 оператора SEARCH (ИСКАТЬ) результат операции SEARCH ALL (ИСКАТЬ ОСОБО) определен только в следующих ситуациях:

  1. данные в таблице упорядочены таким же образом, как это описано в варианте KEY IS (ПО ВОЗРАСТАНИЮ (УБЫВА­НИЮ) КЛЮЧА), связанном с идентификатором-1;

  2. значения ключа (ключей), упомянутого во фразе 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. Если в формате 1 фраза VARYING (МЕНЯЯ) не исполь- ; зуется, имя-индекса, которое используется в операции поиска, есть первое (или единственное) имя-индекса, указанное в ва- ; рианте INDEXED BY (ИНДЕКСИРУЕТСЯ) фразы OCCURS (ПОВТОРЯЕТСЯ), связанной с идентификатором-1. Все дру­гие имена-индексов для идентификатора-1 остаются неизменны­ми.

  2. Если в формате 1 задана фраза VARYING (МЕНЯЯ) имя-индекса-1 и это имя-индекса-1 указано в варианте INDE­XED (ИНДЕКСИРУЕТСЯ) фразы OCCURS (ПОВТОРЯЕТ­СЯ), связанной с идентификатором-1, то оно используется для поиска. Если имя-индекса-1 не указано в варианте INDEXED BY (ИНДЕКСИРУЕТСЯ) идентификатора-1 или задана фра­за VARYING (МЕНЯЯ) идентификатор-2, то для поиска ис­пользуется первое (или единственное) имя-индекса, заданное в варианте INDEXED BY (ИНДЕКСИРУЕТСЯ) фразы OCCURS (ПОВТОРЯЕТСЯ), связанной с идентификатором-1. Кроме то­го, имеют место следующие операции:

  1. если используется фраза VARYING (МЕНЯЯ) имя-индек- са-1 и это имя-индекса-1 появляется в варианте INDEXED BY (ИНДЕКСИРУЕТСЯ) фразы OCCURS (ПОВТОРЯЕТСЯ), связанной со статьей другой таблицы, то номер вхождения, пред­ставляемый именем-индекіса-1, увеличивается на такую же вели­чину и в то же время, что и номер ^вхождения, представляемый именем-индекса, связанным с идентификатором-1;

  2. если задана фраза VARYING (МЕНЯЯ) идентификатор-2 и идентификатор-2 есть индексное данное, то данное, представ­ленное идентификатором-2, увеличивается на такую же величи­ну и в то же время, что и индекс, связанный с идентификато­ром-1. Если идентификатор-2 не является индексным данным, то значение, представленное идентификатором-2, увеличивается на единицу в то же время, что и индекс, связанный с идентифика­тором-1.

  1. Область действия оператора SEARCH (ИСКАТЬ) огра­ничивается фразой END-SEARCH (КОНЕЦ-ИСКАТЬ) (см. ч. 4, п. 6.4.3).

  2. На рис. 1 приведена схема выполнения формата 1 опе­ратора SEARCH (ИСКАТЬ), содержащего две фразы WHEN (КОГДА). Эта схема не должна рассматриваться как предпи­сание по реализации оператора. На приведенном рисунке звез­дочками помечены следующие операции:

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

  2. * — каждая из этих передач ведет к точке выхода операто­ра SEARCH (ИСКАТЬ), если только повелительный-оператор не заканчивается оператором GO ТО (ПЕРЕЙТИ).

6.23. Оператор SET (УСТАНОВИТЬ)

  1. Назначение

Оператор SET (УСТАНОВИТЬ) учреждает точки обра­щений для операций обработки таблиц, устанавливая имена-ин- дексов, соответствующие элементам таблицы

.

  1. О

    SET

    (2) Оператор SET (УСТАНОВИТЬ) используется для измене­ния состояния внешних переключателей.

    бщий формат Формат 1

имя-индекса-1

и

идентификатор-2 имя-индекса-2 целое-1


дентификатор-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

  1. Имена-индексов рассматриваются относительно конкрет­ной таблицы и определяются заданием варианта INDEXED (ИН­ДЕКСИРУЕТСЯ) фразы OCCURS (ПОВТОРЯЕТСЯ) для этой таблицы.

  2. Если задано имя-индекса-1, то его значение после выполне­ния оператора SET (УСТАНОВИТЬ) должно соответствовать но­меру вхождения элемента в таблицу, соответствующую имени-ин­декса-1. Значение индекса, соответствующего имени-индекса,, после выполнения оператора PERFORM (ВЫПОЛНИТЬ) или оператора SEARCH (ИСКАТЬ) может быть установлено на номер вхождения, выходящий за пределы области допустимых значений для индексов соответствующей таблицы (см. п. 6.21 настоящей части). Если указано имя-индекса-2, то его значение перед вы­полнением оператора SET (УСТАНОВИТЬ) должно соответство­вать номеру вхождения элемента в таблицу, связанную с именем- индекса-1.

Если задано имя-индекса-3, то его значение до и после выпол­нения оператора SET (УСТАНОВИТЬ) должно соответствовать номеру вхождения элемента в таблицу, связанную с именем-ин- декса-3.

  1. В формате 1 выполняются следующие действия:

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

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

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

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

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

  2. Ниже представлены допустимые комбинации операндов в операторе SET (УСТАНОВИТЬ) в формате 1. Указанные ссылки относятся к общим правилам, применяемым при пересылке для данного сочетания операндов. .

Пересылаемое данное

Принимающее данное

Целоз-данное

Имя-индекса

Индексное данное

Целое-литерал

Не разрешено Зв

Разрешено За

Не разрешено 36

Целое-данное

Не разрешено Зв

Разрешено За

Не разрешено

36

Имя-индекса

Разрешено 'Зв

Разрешено За

Разрешено

36

Индексное

Не разрешено Зв

Разрешено За*

Разрешено 36*

* Никакие преобразования не имеют места.



Формат 3

  1. Состояние каждого внешнего переключателя, соответствую­щего мнемоническому-имени-1, изменяется таким образом, что ре­зультирующее значение «истина» вычисления имени-условия, свя­занного с этим переключателем, будет отражать состояние «вклю­чено», если указана фраза ON (ВКЛЮЧЕНО), или состояние «выключено»; если указана фраза OFF (ВЫКЛЮЧЕНО) (см. п. 6.3.1.4 настоящей части).

Формат 4

  1. Литерал во фразе VALUE (ЗНАЧЕНИЕ), соответству­ющей имени-условия-1, присваивается условной переменной согласно правилам использования фразы VALUE (ЗНАЧЕ­НИЕ) (см. п. 5.15 настоящей части). Если указано несколько литералов во фразе VALUE (ЗНАЧЕНИЕ), условной перемен­ной присваивается значение первого литерала, заданного в этой фразе.

  2. Если указано несколько .имен условий при использовании ■ формата 4, результаты такие же, как и в случае записи отдель­ного оператора SET (УСТАНОВИТЬ) для каждого имени-усло­вия-1 в том же порядке, в каком они указаны в операторе SET (УСТАНОВИТЬ).

  1. Оператор STOP (ОСТАНОВИТЬ)

    1. Назначение

Оператор STOP (ОСТАНОВИТЬ) прекращает полностью или временно выполнение единицы исполнения.

Указание литерала в операторе STOP (ОСТАНОВИТЬ) явля­ется устаревшим элементом в настоящем стандарте и будет удале­но в следующей редакции стандарта.

  1. Общий формат

STOP j RUN

[литерал-1

ОСТАНОВИТЬ j РАБ0ТУ . j

( литерал-1 j

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

  1. Литерал-1 не может быть стандартной константой, начина­ющейся словом ALL (ВСЕ).

  2. Если оператор STOP RUN (ОСТАНОВИТЬ РАБОТУ) по­является в последовательности повелительных операторов предло­жения, то он должен быть последним оператором предложения.

  3. Если литерал числовой, то он должен быть целым без зна­ка.

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

  1. Если указана фраза RUN (РАБОТУ), выполнение единицы исполнения прекращается и управление передается операционной системе.

  2. При выполнении оператора STOP RUN (ОСТАНОВИТЬ РАБОТУ) выполняется неявный оператор CLOSE (ЗАКРЫТЬ)1 без необязательных вариантов для всех открытых файлов данной единицы исполнения. Никакие процедуры USE (ИСПОЛЬЗО­ВАТЬ), соответствующие этим файлам, не выполняются.

  3. Если единица исполнения получала сообщения, то по опе­ратору STOP RUN (ОСТАНОВИТЬ РАБОТУ) система управле­ния сообщениями уничтожает в очереди сообщения, лишь частич­но полученные этой единицей исполнения.

Часть сообщения, передаваемая из единицы исполнения опе­ратором SEND (ПОСЛАТЬ), но не законченная EMI (ИКС) или EGI (ИКГ), исключается из системы.

  1. Если указан вариант STOP (ОСТАНОВИТЬ) литерал-1, вы­полнение единицы исполнения приостанавливается, а литерал-1 сообщается оператору ЭВМ. Продолжение функционирования единицы исполнения начинается со следующего выполнимого опе­ратора в том случае, когда подключена зависящая от реализации процедура управления возобновлением единицы исполнения.

  1. Оператор STRING (СОБРАТЬ)

    1. Назначение

Оператор STRING (СОБРАТЬ) соединяет часть или полное содержимое двух или нескольких данных в одно данное.

  1. Общи й формат

идентификатор-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. Синтаксические правила

  1. Литерал-1 и литерал-2 не могут быть стандартными кон­стантами, начинающимися со слова ALL (ВСЕ).

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

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

  2. Идентификатор-3 не может быть редактируемым дан­ным; он не может быть описан с фразой JUSTIFIED (СДВИ­НУТО).

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

  4. Если идентификатор-1 или идентификатор-2 представля­ют элементарные числовые данные, то они должны быть описа­ны как целые, причем соответствующие строки-литер шаблона не должны содержать литеры Р (М).