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

  1. При выполнении оператора RELEASE (ПЕРЕДАТЬ) за­пись, указанная именем-записи-1, передается в начальную фазу операции сортировки.

Логическая запись, переданная в результате выполнения оператора RELEASE (ПЕРЕДАТЬ), становится недоступной в области записи, если имя сортируемого или сливаемого файла, со­ответствующее имени-записи-1, не указано во фразе SAME RE­CORD AREA (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ). Логическая запись доступна программе как запись других файлов, представленных фразой SAME RECORD AREA (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ), соответствующей выходному файлу так, как и запись файла, соот­ветствующего имени-записи-1

  1. .Результат выполнения оператора RELEASE (ПЕРЕДАТЬ) с фразой FROM (ИЗ ПОЛЯ) эквивалентен выполнению следую­щих операторов в указанном порядке:

  1. оператор

MOVE идентификатор-1 ТО имя-записи-1

ПОМЕСТИТЬ идентификатор-1 В имя-записи-1 согласно пра­вилам, указанным для оператора MOVE (ПОМЕСТИТЬ);

  1. тот же оператор RELEASE (ПЕРЕДАТЬ) без фразы FROM /ИЗ ПОЛЯ).

  1. После завершения выполнения оператора RELEASE (ПЕ­РЕДАТЬ) информацию в области, представленной идентификато­ром-1, остается доступной, даже если недоступна информация в об­ласти, представленной именем-записи-1, за исключением случаев, определенных фразой SAME RECORD AREA (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ).

  1. Оператор RETURN (ВЕРНУТЬ)

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

Оператор RETURN (ВЕРНУТЬ) получает либо отсортирован­ные записи в конечной фазе операции сортировки, либо объеди­ненные в один файл записи, полученные при выполнении опера­ции слияния.

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

RETURN имя-файла-1 RECORD [INTO идентификатор-1]

AT END повелительный-оператор-1

[NOT AT END повелительный-оператор-2]

[END-RETURN]

ВЕРНУТЬ ЗАПИСЬ имя-файла-1 [В идентификатор-1]

В КОНЦЕ повелительный-оператор-1

[НЕ В КОНЦЕ повелительный-оператор-2]

[КОНЕЦ-ВЕРНУТЬ]

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

  1. Область памяти, связанная с идентификатором-1, и область записи, связанная с именем-файла-1, не должны представлять од­ну и ту же область памяти.

  2. Имя-файла-1 должно быть описано в статье описания сор- тируемого-сливаемого файла в разделе данных.

  3. Оператор RETURN (ВЕРНУТЬ) может .использоваться только в процедуре вывода, связанной с оператором SORT (СОР­ТИРОВАТЬ) или MERGE (СЛИТЬ) для имени-файла-1.

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

Если файл состоит из логических записей нескольких ти­пов, то эти записи автоматически разделяют общую область запИ- 584си в памяти; это равносильно неявному переопределению области. Значения любых данных, которые лежат вне текущей записи, по окончании выполнения оператора RETURN (ВЕРНУТЬ) не опре­делены.

  1. В результате выполнения оператора RETURN (ВЕРНУТЬ) следующая существующая запись файла, представленного именем- файла-1, становится доступной для обработки в области, связанной с именем-файла-1, в порядке, определенном ключами, перечислен­ными в операторе MERGE (СЛИТЬ) или SORT (СОРТИРО­ВАТЬ). Если следующей логической записи в файле, представлен­ном именем-файла-1, не существует, возникает условие конца, и. уп­равление передается повелительному-оператору-1 фразы AT END (В КОНЦЕ). Выполнение продолжается согласно правилам для операторов, указанных в повелительном-операторе-1. Если выпол­няется оператор ветвления процедур или условный оператор, вы­зывающий явную передачу управления, оно передается согласно правилам для этого оператора; в противном случае после заверше­ния выполнения повелительного-оператора-1 управление переда­ется в точку выхода из оператора RETURN (ВЕРНУТЬ), а фраза NOT AT END (НЕ В КОНЦЕ), если указана, она игнорируется. Пои наступлении условия конца выполнение оператора RETURN (ВЕРНУТЬ) считается неуспешным и содержимое области за­писи, соответствующей имени-файла-1, не определено. Оператор RETURN (ВЕРНУТЬ) не может быть выполнен как часть теку­щей процедуры вывода после выполнения повелительного-опера- тора-1, указанного фразой AT END (В КОНЦЕ).

  2. Если при выполнении оператора RETURN (ВЕРНУТЬ) ус­ловие конца не возникает, то после того, как запись стала доступ­ной, и после выполнения всех неявных пересылок, связанных с фра­зой INTO (В), управление передается повелительному-операто- ру-2, если он указан; в противном случае управление передается в: точку выхода оператора RETURN (ВЕРНУТЬ).

  3. Фраза END-RETURN (КОНЕЦ-ВЕРНУТЬ) ограничивает область действия оператора RETURN (ВЕРНУТЬ) (см. ч. 4, п. 6.4.3).

  4. Фраза INTO (В) может быть указана в операторе RETURN (ВЕРНУТЬ) в следующих случаях:

  1. если в статье описания сортируемого-сливаемого файла име­ется только одно описание записи;

  2. если все имена-записей, соответствующие имени-файла-1, и данное, представленное идентификатором-1, описывают группо­вое данное или элементарное буквенно-цифровое данное.

(6) результат выполнения оператора RETURN (ВЕРНУТЬ)’ с фразой INTO (В) эквивалентен выполнению следующих действий в указанном порядке:

  1. 585«выполнению того же оператора RETURN (ВЕРНУТЬ) без фразы INTO (В);

  2. текущая запись перемещается из области записи в область, определенную идентификатором-1, согласно правилам для опера­тора MOVE (ПОМЕСТИТЬ) без фразы CORRESPONDING (СО­ОТВЕТСТВЕННО). Размер текущей записи определяется пра­вилами, указанными для фразы RECORD (В ЗАПИСИ). Если статья описания файла содержит фразу RECORD IS VARYING (В ЗАПИСИ ПЕРЕМЕННОЕ ЧИСЛО ЛИТЕР), пересылка является групповой. Неявный оператор MOVE (ПОМЕСТИТЬ) не выпол­няется, если выполнение оператора RETURN (ВЕРНУТЬ) было неуспешным. Индексы, относящиеся к идентификатору-1, вычис­ляются после чтения записи и непосредственно перед ее пересыл­кой в данное. Запись доступна как в области записи, так и в облас­ти данного, представленного идентификатором-1.

4.4. Оператор SORT (СОРТИРОВАТЬ)

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

Оператор SORT (СОРТИРОВАТЬ) создает сортируемый файл, выполняя для этого процедуру ввода или перемещение записей из других файлов, сортирует записи в сортируемом файле по указан­ному набору ключей и в последней фазе операции сортировки дела­ет доступной каждую запись из сортируемого файла в отсортиро­ванном порядке для указанной процедуры вывода или для выход­ного файла.

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

л Лf ASCENDING ]

SORT имя-файла-1 |ON | DESCENDING (

' KEY {имя-дэнного-1}... j ...

[WITH DUPLICATES IN ORDER]

[COLLATING SEQUENCE IS имя-алфавита-1]

INPUT PROCEDURE IS имя-процедуры-1

THROUGH 1 01

'— имя-процедуры-2]

USING {имя-файла-2} ...

OUTPUT PROCEDURE IS имя-процедуры-3

Г (THROUGH )

THRU имя-процедуры-4

GIVING {имя-файла-3} ...

СОРТИРОВАТЬ имя-файла-1

і ВОЗРАСТАНИЮ . п ч

{ПО УБЫВАНИЮ 1КЛЮЧА {имя-данного-1} .

[С ДУБЛИРОВАНИЕМ] [АЛФАВИТ имя-алфавита-1]

ПРОЦЕДУРА ВВОДА имя-процедуры-1
[ПО имя-процедуры-2]

ИСПОЛЬЗУЯ {имя-файла-2}. . .

ПРОЦЕДУРА ВЫВОДА имя-процедуры-3

[Пр имя-процедуры-4] ПОЛУЧАЯ {имя-файла-3} ...

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

  1. Оператор SORT (СОРТИРОВАТЬ) может указываться в любом месте раздела процедур, за исключением декларатив.

  2. Имя-файла-1 должно быть описано в статье описания сор- тируемого-сливаемого файла в разделе данных.

  3. Если указана фраза USING (ИСПОЛЬЗУЯ) и файл, пред­ставленный именем-файла-1, содержит записи переменной длины, размер записей, содержащихся в файле, представленном именем- файла-2, должен быть не меньше размера самой короткой и не больше размера самой длинной записи, описанной для имени- файла- 1. Если файл, представленный именем-файла-1, содержит записи фиксированной длины, размер записей, содержащихся в файле, представленном именем-файла-2, должен быть не больше, чем размер самой длинной записи, описанной для файла, представ­ленного именем-файла-1.

  4. Имя-данного-1 является именем ключа и подчиняется сле­дующим правилам:

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

  2. имена ключей могут уточняться;

  3. имена ключей не должны быть групповыми данными, содер­жащими переменно повторяющиеся данные;

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

  5. описания ключей не должны содержать фразу OCCURS (ПОВТОРЯЕТСЯ) или быть подчиненными статьям, имеющим фразу OCCURS (ПОВТОРЯЕТСЯ);если файл, представленный именем-файла-1, содержит за­писи переменной длины, все данные, представленные именами- ключей, должны содержаться в первых х позициях записи, где х равняется минимальному размеру записи, указанному для файла, представленного именем-файла-1.

  1. Слова THRU и THROUGH эквивалентны.

  2. Имя-файла-2 и имя-файла-3 должны быть описаны в раз­деле данных статьей описания файла, а не статьей описания сорти- руемого-сливаемого файла.

  3. Файлы, представленные именем-файла-2 и именем-файла-3, могут размещаться на одной и той же катушке.

  4. Если имя-файла-3 относится к индексному файлу, первое указание имени-дэнного-1 должно быть связано с фразой ASCEN­DING (ПО ВОЗРАСТАНИЮ), а данное, представленное именем- данного-1, должно занимать те же позиции литер в записи, что и данное, соответствующее основному ключу записи для этого файла.

  5. В одной и той же фразе SAME SORT AREA (ОБЩАЯ ОБ­ЛАСТЬ СОРТИРОВКИ) или SAME SORT-MERGE AREA (ОБ­ЩАЯ ОБЛАСТЬ СОРТИРОВКИ-СЛИЯНИЯ) не могут быть ука­заны никакие два имени-файла, используемые в одном и том же операторе SORT (СОРТИРОВАТЬ). Имена-файлов, соответствую­щие фразе GIVING (ПОЛУЧАЯ), не могут указываться в одной и той же фразе SAME (ОБЩАЯ) (см. ч. 7, п. 2.13 и п. 2.5 настоя­щей части).

  6. Если указана фраза GIVING (ПОЛУЧАЯ) и файл, пред­ставленный именем-файла-3, содержит записи переменной длины, размер записей, содержащихся в файле, представленном именем- файла-1, должен быть не меньше размера самой короткой и не боль­ше размера самой длинной записи, описанной для имени-файла-3. Если файл, представленный именем-файла-3, содержит записи фик­сированной длины, размер записей, содержащихся в файле, пред­ставленном именем-файла-1, должен быть не больше самой длин­ной записи, описанной для файла, представленного именем-фай­ла-3.

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

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

  2. Имена-данных, указанные в качестве ключей, перечисля­ются в операторе SORT (СОРТИРОВАТЬ) в порядке убывания значимости. Самое левое имя-данного-1 — самый главный ключ, следующее имя-данного-2 — следующий по значимости ключ и так далее.

  1. Если определена фраза ASCENDING (ПО ВОЗРАСТА­НИЮ), то отсортированная последовательность будет сформиро­вана, начиная с наименьшего значения данных, указанных в ка­честве ключей, и кончая наибольшим значением в соответствии с правилами сравнения операндов в условиях отношения.

  2. Если указана фраза DESCENDING (ПО УБЫВАНИЮ), то отсортированная последовательность будет сформирована, начи­ная с наибольшего значения данных, указанных в качестве клю­чей, и кончая наименьшим значением в соответствии с правилами сравнения операндов

  1. Если указана фраза DUPLICATES (С ДУБЛИРОВАНИ­ЕМ) и содержимое всех ключей, связанных с одной записью дан­ных, равно содержимому соответствующих ключей, связанных с одной или несколькими другими записями данных, то порядок воз­врата этих записей следующий:

  1. совпадает с порядком указания входных файлов в операторе SORT (СОРТИРОВАТЬ). В заданном входном файле порядок за­писей совпадает с порядком получения записей из этого файла;

  2. если указана процедура ввода, порядок записей совпадает с порядком, в котором эти записи поступают из процедуры ввода.

  1. Если фраза DUPLICATES (С ДУБЛИРОВАНИЕМ) не указана, и содержимое всех ключей, связанных с одной записью данных, равно содержимому соответствующих ключей, связанных с одной или несколькими другими записями данных, то порядок возвращения этих записей не определен.

  2. Основная последовательность при сравнении нечисловых данных, являющихся ключами, определяется в начале выполнения оператора SORT (СОРТИРОВАТЬ) в следующем порядке стар­шинства:

  1. во-первых, основная последовательность, установленная фразой COLLATING SEQUENCE (АЛФАВИТ) в операторе SORT (СОРТИРОВАТЬ), если эта фраза определена;

  2. во-вторых, основная последовательность, установленная как программный алфавит.

(6) Выполнение оператора SORT (СОРТИРОВАТЬ) состоит из следующих трех этапов:

  1. записи становятся доступными файлу, представленному именем-файла-1, либо благодаря выполнению оператора RELEA­SE (ПЕРЕДАТЬ) в процедуре ввода, либо благодаря неявному выполнению оператора READ (ЧИТАТЬ) для имени-файла-2. Пе­ред началом этой фазы файл, представленный именем-файла-2, не должен быть открыт. После окончания этой фазы файл, пред­ставленный именем-файла-2, не является открытым;

  2. файл, представленный именем-файла-1, упорядочивается. На протяжении этого этапа файлы, представленные именем-фай- ла-2 и именем-файла-3, не подвергаются никакой обработке;записи файла, представленного именем-файла-1, становят­ся доступными в отсортированном виде. Отсортированные записи либо записываются в файл, представленный именем-файла-3, либо становятся доступными для обработки в результате выполнения оператора RETURN (ВЕРНУТЬ) в процедуре вывода. В начале этой фазы файл, представленный именем-файла-3, не должен быть открыт. После окончания это файл, представленный именем- файла-3, не является открытым.