Общие правила
При выполнении оператора RELEASE (ПЕРЕДАТЬ) запись, указанная именем-записи-1, передается в начальную фазу операции сортировки.
Логическая запись, переданная в результате выполнения оператора RELEASE (ПЕРЕДАТЬ), становится недоступной в области записи, если имя сортируемого или сливаемого файла, соответствующее имени-записи-1, не указано во фразе SAME RECORD AREA (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ). Логическая запись доступна программе как запись других файлов, представленных фразой SAME RECORD AREA (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ), соответствующей выходному файлу так, как и запись файла, соответствующего имени-записи-1
.Результат выполнения оператора RELEASE (ПЕРЕДАТЬ) с фразой FROM (ИЗ ПОЛЯ) эквивалентен выполнению следующих операторов в указанном порядке:
оператор
MOVE идентификатор-1 ТО имя-записи-1
ПОМЕСТИТЬ идентификатор-1 В имя-записи-1 согласно правилам, указанным для оператора MOVE (ПОМЕСТИТЬ);
тот же оператор RELEASE (ПЕРЕДАТЬ) без фразы FROM /ИЗ ПОЛЯ).
После завершения выполнения оператора RELEASE (ПЕРЕДАТЬ) информацию в области, представленной идентификатором-1, остается доступной, даже если недоступна информация в области, представленной именем-записи-1, за исключением случаев, определенных фразой SAME RECORD AREA (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ).
Оператор RETURN (ВЕРНУТЬ)
Назначение
Оператор RETURN (ВЕРНУТЬ) получает либо отсортированные записи в конечной фазе операции сортировки, либо объединенные в один файл записи, полученные при выполнении операции слияния.
Общий формат
RETURN имя-файла-1 RECORD [INTO идентификатор-1]
AT END повелительный-оператор-1
[NOT AT END повелительный-оператор-2]
[END-RETURN]
ВЕРНУТЬ ЗАПИСЬ имя-файла-1 [В идентификатор-1]
В КОНЦЕ повелительный-оператор-1
[НЕ В КОНЦЕ повелительный-оператор-2]
[КОНЕЦ-ВЕРНУТЬ]
Синтаксические правила
Область памяти, связанная с идентификатором-1, и область записи, связанная с именем-файла-1, не должны представлять одну и ту же область памяти.
Имя-файла-1 должно быть описано в статье описания сор- тируемого-сливаемого файла в разделе данных.
Оператор RETURN (ВЕРНУТЬ) может .использоваться только в процедуре вывода, связанной с оператором SORT (СОРТИРОВАТЬ) или MERGE (СЛИТЬ) для имени-файла-1.
О б щ и е правила
Если файл состоит из логических записей нескольких типов, то эти записи автоматически разделяют общую область запИ- 584си в памяти; это равносильно неявному переопределению области. Значения любых данных, которые лежат вне текущей записи, по окончании выполнения оператора RETURN (ВЕРНУТЬ) не определены.
В результате выполнения оператора RETURN (ВЕРНУТЬ) следующая существующая запись файла, представленного именем- файла-1, становится доступной для обработки в области, связанной с именем-файла-1, в порядке, определенном ключами, перечисленными в операторе MERGE (СЛИТЬ) или SORT (СОРТИРОВАТЬ). Если следующей логической записи в файле, представленном именем-файла-1, не существует, возникает условие конца, и. управление передается повелительному-оператору-1 фразы AT END (В КОНЦЕ). Выполнение продолжается согласно правилам для операторов, указанных в повелительном-операторе-1. Если выполняется оператор ветвления процедур или условный оператор, вызывающий явную передачу управления, оно передается согласно правилам для этого оператора; в противном случае после завершения выполнения повелительного-оператора-1 управление передается в точку выхода из оператора RETURN (ВЕРНУТЬ), а фраза NOT AT END (НЕ В КОНЦЕ), если указана, она игнорируется. Пои наступлении условия конца выполнение оператора RETURN (ВЕРНУТЬ) считается неуспешным и содержимое области записи, соответствующей имени-файла-1, не определено. Оператор RETURN (ВЕРНУТЬ) не может быть выполнен как часть текущей процедуры вывода после выполнения повелительного-опера- тора-1, указанного фразой AT END (В КОНЦЕ).
Если при выполнении оператора RETURN (ВЕРНУТЬ) условие конца не возникает, то после того, как запись стала доступной, и после выполнения всех неявных пересылок, связанных с фразой INTO (В), управление передается повелительному-операто- ру-2, если он указан; в противном случае управление передается в: точку выхода оператора RETURN (ВЕРНУТЬ).
Фраза END-RETURN (КОНЕЦ-ВЕРНУТЬ) ограничивает область действия оператора RETURN (ВЕРНУТЬ) (см. ч. 4, п. 6.4.3).
Фраза INTO (В) может быть указана в операторе RETURN (ВЕРНУТЬ) в следующих случаях:
если в статье описания сортируемого-сливаемого файла имеется только одно описание записи;
если все имена-записей, соответствующие имени-файла-1, и данное, представленное идентификатором-1, описывают групповое данное или элементарное буквенно-цифровое данное.
(6) результат выполнения оператора RETURN (ВЕРНУТЬ)’ с фразой INTO (В) эквивалентен выполнению следующих действий в указанном порядке:
585«выполнению того же оператора RETURN (ВЕРНУТЬ) без фразы INTO (В);
текущая запись перемещается из области записи в область, определенную идентификатором-1, согласно правилам для оператора MOVE (ПОМЕСТИТЬ) без фразы CORRESPONDING (СООТВЕТСТВЕННО). Размер текущей записи определяется правилами, указанными для фразы RECORD (В ЗАПИСИ). Если статья описания файла содержит фразу RECORD IS VARYING (В ЗАПИСИ ПЕРЕМЕННОЕ ЧИСЛО ЛИТЕР), пересылка является групповой. Неявный оператор MOVE (ПОМЕСТИТЬ) не выполняется, если выполнение оператора RETURN (ВЕРНУТЬ) было неуспешным. Индексы, относящиеся к идентификатору-1, вычисляются после чтения записи и непосредственно перед ее пересылкой в данное. Запись доступна как в области записи, так и в области данного, представленного идентификатором-1.
4.4. Оператор SORT (СОРТИРОВАТЬ)
Назначение
Оператор SORT (СОРТИРОВАТЬ) создает сортируемый файл, выполняя для этого процедуру ввода или перемещение записей из других файлов, сортирует записи в сортируемом файле по указанному набору ключей и в последней фазе операции сортировки делает доступной каждую запись из сортируемого файла в отсортированном порядке для указанной процедуры вывода или для выходного файла.
Общийформат
л Л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} ...
Синтаксические правила
Оператор SORT (СОРТИРОВАТЬ) может указываться в любом месте раздела процедур, за исключением декларатив.
Имя-файла-1 должно быть описано в статье описания сор- тируемого-сливаемого файла в разделе данных.
Если указана фраза USING (ИСПОЛЬЗУЯ) и файл, представленный именем-файла-1, содержит записи переменной длины, размер записей, содержащихся в файле, представленном именем- файла-2, должен быть не меньше размера самой короткой и не больше размера самой длинной записи, описанной для имени- файла- 1. Если файл, представленный именем-файла-1, содержит записи фиксированной длины, размер записей, содержащихся в файле, представленном именем-файла-2, должен быть не больше, чем размер самой длинной записи, описанной для файла, представленного именем-файла-1.
Имя-данного-1 является именем ключа и подчиняется следующим правилам:
данные, представленные именами ключей, должны быть описаны в записях, соответствующих имени-файла-1;
имена ключей могут уточняться;
имена ключей не должны быть групповыми данными, содержащими переменно повторяющиеся данные;
если имя-файла-1 имеет более одного описания записи, то данные, указанные именами ключей, могут быть описаны только в одном из описаний записей. Одни и те же позиции литер, определяемые именем-ключа в одной статье описания записи, считаются ключом во всех записях файла;
описания ключей не должны содержать фразу OCCURS (ПОВТОРЯЕТСЯ) или быть подчиненными статьям, имеющим фразу OCCURS (ПОВТОРЯЕТСЯ);если файл, представленный именем-файла-1, содержит записи переменной длины, все данные, представленные именами- ключей, должны содержаться в первых х позициях записи, где х равняется минимальному размеру записи, указанному для файла, представленного именем-файла-1.
Слова THRU и THROUGH эквивалентны.
Имя-файла-2 и имя-файла-3 должны быть описаны в разделе данных статьей описания файла, а не статьей описания сорти- руемого-сливаемого файла.
Файлы, представленные именем-файла-2 и именем-файла-3, могут размещаться на одной и той же катушке.
Если имя-файла-3 относится к индексному файлу, первое указание имени-дэнного-1 должно быть связано с фразой ASCENDING (ПО ВОЗРАСТАНИЮ), а данное, представленное именем- данного-1, должно занимать те же позиции литер в записи, что и данное, соответствующее основному ключу записи для этого файла.
В одной и той же фразе SAME SORT AREA (ОБЩАЯ ОБЛАСТЬ СОРТИРОВКИ) или SAME SORT-MERGE AREA (ОБЩАЯ ОБЛАСТЬ СОРТИРОВКИ-СЛИЯНИЯ) не могут быть указаны никакие два имени-файла, используемые в одном и том же операторе SORT (СОРТИРОВАТЬ). Имена-файлов, соответствующие фразе GIVING (ПОЛУЧАЯ), не могут указываться в одной и той же фразе SAME (ОБЩАЯ) (см. ч. 7, п. 2.13 и п. 2.5 настоящей части).
Если указана фраза GIVING (ПОЛУЧАЯ) и файл, представленный именем-файла-3, содержит записи переменной длины, размер записей, содержащихся в файле, представленном именем- файла-1, должен быть не меньше размера самой короткой и не больше размера самой длинной записи, описанной для имени-файла-3. Если файл, представленный именем-файла-3, содержит записи фиксированной длины, размер записей, содержащихся в файле, представленном именем-файла-1, должен быть не больше самой длинной записи, описанной для файла, представленного именем-файла-3.
Общиеправила
Если файл, представленный именем-файла-1, содержит только записи фиксированной длины, любая запись файла, представленного именем-файла-2, содержащая меньше позиций литер, чем запись фиксированной длины, при передаче в файл, представленный именем-файла-1, дополняется пробелами справа, начиная с первой позиции литеры после последней литеры записи.
Имена-данных, указанные в качестве ключей, перечисляются в операторе SORT (СОРТИРОВАТЬ) в порядке убывания значимости. Самое левое имя-данного-1 — самый главный ключ, следующее имя-данного-2 — следующий по значимости ключ и так далее.
Если определена фраза ASCENDING (ПО ВОЗРАСТАНИЮ), то отсортированная последовательность будет сформирована, начиная с наименьшего значения данных, указанных в качестве ключей, и кончая наибольшим значением в соответствии с правилами сравнения операндов в условиях отношения.
Если указана фраза DESCENDING (ПО УБЫВАНИЮ), то отсортированная последовательность будет сформирована, начиная с наибольшего значения данных, указанных в качестве ключей, и кончая наименьшим значением в соответствии с правилами сравнения операндов
Если указана фраза DUPLICATES (С ДУБЛИРОВАНИЕМ) и содержимое всех ключей, связанных с одной записью данных, равно содержимому соответствующих ключей, связанных с одной или несколькими другими записями данных, то порядок возврата этих записей следующий:
совпадает с порядком указания входных файлов в операторе SORT (СОРТИРОВАТЬ). В заданном входном файле порядок записей совпадает с порядком получения записей из этого файла;
если указана процедура ввода, порядок записей совпадает с порядком, в котором эти записи поступают из процедуры ввода.
Если фраза DUPLICATES (С ДУБЛИРОВАНИЕМ) не указана, и содержимое всех ключей, связанных с одной записью данных, равно содержимому соответствующих ключей, связанных с одной или несколькими другими записями данных, то порядок возвращения этих записей не определен.
Основная последовательность при сравнении нечисловых данных, являющихся ключами, определяется в начале выполнения оператора SORT (СОРТИРОВАТЬ) в следующем порядке старшинства:
во-первых, основная последовательность, установленная фразой COLLATING SEQUENCE (АЛФАВИТ) в операторе SORT (СОРТИРОВАТЬ), если эта фраза определена;
во-вторых, основная последовательность, установленная как программный алфавит.
(6) Выполнение оператора SORT (СОРТИРОВАТЬ) состоит из следующих трех этапов:
записи становятся доступными файлу, представленному именем-файла-1, либо благодаря выполнению оператора RELEASE (ПЕРЕДАТЬ) в процедуре ввода, либо благодаря неявному выполнению оператора READ (ЧИТАТЬ) для имени-файла-2. Перед началом этой фазы файл, представленный именем-файла-2, не должен быть открыт. После окончания этой фазы файл, представленный именем-файла-2, не является открытым;
файл, представленный именем-файла-1, упорядочивается. На протяжении этого этапа файлы, представленные именем-фай- ла-2 и именем-файла-3, не подвергаются никакой обработке;записи файла, представленного именем-файла-1, становятся доступными в отсортированном виде. Отсортированные записи либо записываются в файл, представленный именем-файла-3, либо становятся доступными для обработки в результате выполнения оператора RETURN (ВЕРНУТЬ) в процедуре вывода. В начале этой фазы файл, представленный именем-файла-3, не должен быть открыт. После окончания это файл, представленный именем- файла-3, не является открытым.