Перейти до вмісту
ГОСТ 22558-89
/ 116

Сортировка и слияние

L Сортировка

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

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

К отсортированным записям сортируемого файла возможен j доступ посредством оператора RETURN (ВЕРНУТЬ) во время вы- : полнения процедуры вывода.

Для сортируемого файла нет процедур обработки меток, ко­торыми мог бы управлять программист, и правила блокирования л и распределения внутренней памяти определяются оператором • SORT (СОРТИРОВАТЬ). Операторы RELEASE (ПЕРЕДАТЬ) и RETURN (ВЕРНУТЬ) ничего не предполагают относительно бу- j ферных полей, блоков или катушек. Следовательно, сортируемый 1 файл можно рассматривать как внутренний файл, созданный (one- • €4

рятором RELEASE (ПЕРЕДАТЬ)) из входного файла, обработан­ной (оператором SORT (СОРТИРОВАТЬ)) и затем доступный (оператором RETURN (ВЕРНУТЬ)) выходному файлу. Обраще­ние и доступ к самому сортируемому файлу возможны только в операторе SORT (СОРТИРОВАТЬ). Описание сортируемого- сливаемого файла можно рассматривать как особый тип описания файла. То есть, сортируемый файл, как и любой файл, является набором записей.

2. Слияние

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

Для сливаемого файла нет процедур обработки меток, которы­ми мог бы управлять программист, и правила блокирования и рас­пределения внутренней памяти определяются оператором MERGE (СЛИТЬ). Оператор RETURN (ВЕРНУТЬ) ничего не предпола­гает относительно буферных полей, блоков или катушек.

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

О б р а б о т к а особых ситуаций

Во время выполнения любой операции ввода или вывода могут возникнуть особые условия, препятствующие нормальному завер­шению операции. Имеются три метода сообщения объектной прог­рамме об этих условиях: ключи состояния, декларативы ошибок и «обязательные фразы, связанные с повелительным оператором.

Состояние ввода-вывода

Состояние ввода-вывода — это логическое понятие, используе­мое в этом документе для облегчения точного определения состоя­ния выполнения операции ввода-вывода.

На установку состояния ввода-вывода влияют только операто­ры CLOSE (ЗАКРЫТЬ), DELETE (УДАЛИТЬ), OPEN (ОТК­РЫТЬ), READ (ЧИТАТЬ), REWRITE (ОБНОВИТЬ), START (ПОДВЕСТИ) и WRITE (ПИСАТЬ).

3 Зак. 254 Є5

Значение состояния ввода-вывода для данного файла доступно' программе только посредством имени-данного, указанного в фразе- FILE STATUS (СОСТОЯНИЕ ФАЙЛА) статьи управления фай­лом для этого файла. Значение состояния ввода-вывода помеща­ется в это данное во время выполнения оператора ввода-вывода и до выполнения любого повелительного оператора, связанного с этим оператором ввода-вывода, или до выполнения декларативні ошибки.

Декларативы ошибки

Если для файла указана процедура USE AFTER EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ ОШИБКИ), процедура выполняет­ся каждый раз, когда возникают условия ввода или вывода, приво­дящие к неуспешной операции ввода-вывода. Однако декларати- ва ошибки не выполняется, если имеется условие неверного ключа и указана фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА), или при наличии условия конца и указанной фразе AT END (В КОН­ЦЕ).

Необязательные фразы

Фразы INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) могут быть указаны в операторах DELETE (УДАЛИТЬ), READ (ЧИТАТЬ), REWRITE (ОБНОВИТЬ), START (ПОДВЕСТИ) или WRITE (ПИСАТЬ). Некоторые из условий, приводящие к условию ошиб­ки ключа, возникают, когда запрашиваемый ключ не существует в файле (операторы DELETE (УДАЛИТЬ), READ (ЧИТАТЬ) или START (ПОДВЕСТИ)); когда ключ уже есть в файле и дублиро­вания не разрешаются (оператор WRITE (ПИСАТЬ)); когда клю­ча в файле нет или когда ключ не является последним прочитан­ным ключом (оператор REWRITE (ОБНОВИТЬ)).

Если условие ошибки ключа возникает во время выполнения оператора, для которого указана фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА), выполняется оператор, определяемый этой фразой INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА).

В операторе READ (ЧИТАТЬ) может быть указана фраза АТ' END (В КОНЦЕ). Условие «в конце» возникает:

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

когда число значащих цифр в относительном номере записи больше размера данного — относительного ключа;

когда необязательный файл отсутствует;

при попытке выполнения оператора READ (ЧИТАТЬ) при уже существующем условии «в конце». Если во время выполнения опе­ратора, для которого указана фраза AT END (В КОНЦЕ), возни­кает условие «в конце», выполняется оператор, определенный фра­зой AT END (В КОНЦЕ).

ГЕНЕРАТОР ОТЧЕТОВ

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

Секция отчетов

Секция отчетов в разделе данных содержит одну или несколько статей описания отчета RD (ОО), каждая из которых представля­ет полное описание отчета.

Отчет, имя которого указано в статье описания отчета, не отно­сится прямо к выходному файлу. Вместо этого он связан с именем- файла в секции файлов и это имя-файла связывается с файлом, когда выполняется оператор OPEN (ОТКРЫТЬ), указывающий имя-файла. С одним и тем же именем файла может быть связано несколько отчетов и чтобы отличить отчеты друг от друга, исполь­зуется фраза CODE (С КОДОМ). Для внешнего определителя файла, соотнесенного имени-файла, отдельно компилируемые программы могут указывать различные отчеты для одного и того же имени-файла. Статья описания файла, к которому относится отчет, не может содержать статей описания записей, описывающих записи данных. Эта статья описания файла должна указывать имя статьи описания отчета для каждого отчета, связанного с этим именем-файла в данной программе.

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

За каждой статьей описания отчета следуют одна или не­сколько статей с номером уровня 01, за каждой из которых следу­ет иерархическая структура, подобная описаниям записи в Коболе. Каждая статья с номером уровня 01 и ее подчиненные статьи опи- ■сывают группу отчета. Каждая группа отчета состоит из нуля, од­ной или нескольких печатаемых строк, рассматриваемых как одно целое. Группа отчета, которую нужно напечатать, печатается це­ликом на одной логической странице; группа никогда не разбива­ется при переходе на следующую страницу.

Структура отчета

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

Вертикальное позиционирование

Средства генератора отчетов позволяют пользователю описы­вать группы отчета, содержащие множество строк. Вертикальное позиционирование строк на странице определяется фразой LINE NUMBER (НОМЕР СТРОКИ), связанной с каждой строкой. Фра­за NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА) указывает, сколько строк следует пропустить после представления последней строки группы. Первая фраза LINE NUMBER (НОМЕР СТРОКИ) сле­дующей группы определяет дополнительную информацию о про­пуске строк, которую нужно использовать при позиционировании этой группы.

Горизонтальное позиционирование

Генератор отчетов позволяет пользователю позиционировать поля данных в строке отчета посредством фразы COLUMN NUM­BER (НОМЕР СТОЛБЦА). Система управления генератором от­четов обеспечивает заполнение пробелами промежутка между все­ми определяемыми полями.

Манипулирование данными

При использовании средств генератора отчетов перемещением данных в группу отчета управляют фразы секции отчетов, а не операторы раздела процедур. Фразы секции отчетов, осуществля­ющие манипулирование данными, следующие: SOURCE (ИСТОЧ­НИК), SUM (СУММА) и VALUE (ЗНАЧЕНИЕ).

Фраза SOURCE (ИСТОЧНИК) определяет посылаемое дан­ное неявного оператора MOVE (ПОМЕСТИТЬ). Принимающее печатаемое данное определяется описанием данного группы отче­та, в котором появляется фраза SOURCE (ИСТОЧНИК).

Фраза SUM (СУММА) приводит к автоматическому учрежде­нию счетчика суммы. Объект фразы SUM (СУММА) называет данное (данные), которое прибавляется к счетчику суммы при вы­полнении оператора GENERATE (ГЕНЕРИРОВАТЬ). Пересылка содержимого счетчика суммы в принимающее печатаемое данное, определенное описание данного группы отчета, в которой имеется фраза SUM (СУММА), совершается автоматически при представ­лении этой группы отчета.

Фраза VALUE (ЗНАЧЕНИЕ) указывает литерал, который по­является в печатаемом данном группы отчета каждый раз при представлении группы отчета.

Итак, данное в группе отчета представляется, если оно сопро­вождается фразой COLUMN NUMBER (НОМЕР СТОЛБЦА), ука­зывающей, где оно должно быть представлено. Значение, помещаемое в печатаемое данное, определяется фразами VALUE (ЗНАЧЕНИЕ), SOURCE (ИСТОЧНИК) или SUM (СУММА), на­ходящимися в описании группы отчета. Ни при каких обстоятель­ствах печатаемое данное группы отчета не может получить значе­ние непосредственно от оператора раздела процедур.

Подразделения отчета

При определении того, что представляется на странице, учиты­ваются физическая и логическая организация отчета.

Физическое подразделение отчета

Длина страницы, размер полей заголовка и концовки, размер поля, в котором будут располагаться строки фрагментов, опреде­ляется фразой PAGE (РАЗМЕР СТРАНИЦЫ). Система управле­ния генератором отчетов использует фразы LINE NUMBER (НО­МЕР СТРОКИ) и NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА) для: размещения этих групп отчета, и, если необходимо, для перехода на новую страницу с автоматическим воспроизведением групп от­чета PAGE HEADING (ЗАГОЛОВОК СТРАНИЦЫ) и PAGE FOOTING (КОНЦОВКА СТРАНИЦЫ).

Логическое подразделение отчета

Группы отчета типа фрагмент могут быть выстроены во вложен­ный набор управляемых групп. Каждая управляемая группа может начинаться группой отчета управляемый заголовок и за­канчиваться группой отчета управляемая концовка.

Если определены вложенные управляемые группы, распозна­вание изменения значения управляющего данного в иерархии уп­равления называется прерыванием управления, а строки заголов­ков и концовок, связанных с управляющим именем-данного, назы­ваются группами отчета управляемый заголовок и управляемая концовка.

Во время выполнения оператора GENERATE (ГЕНЕРИРО­ВАТЬ) система управления генератором отчетов использует иерар­хию управления для автоматической проверки прерывания уп­равления. Если имеет место прерывание управления, считается, что для всех младших управляющих данных в иерархии управле­ния также имеет место прерывание управления, даже если в дей­ствительности их значения не изменились. Распознавание преры­вания управления вызывает следующую последовательность дейст­вий:

представляются все группы управляемой концовки от млад­шей до уровня, на котором произошло прерывание управления, включая его;

представляются все группы управляемого заголовка от

уровня, соответствующего прерыванию управления, до самого младшего;

представляется группа фрагмента отчета, имя которого ука­зано в операторе GENERATE (ГЕНЕРИРОВАТЬ).

Операторы раздела процедур генератора отчетов

Операторы раздела процедур генератора отчетов следующие: INITIATE (НАЧАТЬ), GENERATE (ГЕНЕРИРОВАТЬ), TERMI­NATE (ЗАКОНЧИТЬ), SUPPRESS (ПОДАВИТЬ) и USE BEFORE REPORTING (ИСПОЛЬЗОВАТЬ ДО ВЫДАЧИ).

Оператор INITIATE (НАЧАТЬ) приводит к автоматическому выполнению ряда инициирующих действий системой управления генератором отчетов. Отчет должен быть инициирован прежде, чем можно будет выполнять для него детальную обработку.

Оператор GENERATE (ГЕНЕРИРОВАТЬ) с операндом имя- данного приводит к форматизации и записи на устройство вывода указанной группы отчета типа DETAIL (ФРАГМЕНТ). Кроме то­го, система управления генератором отчетов настраивается на вы­полнение ряда неявных действий, описанных в п. 3.2 настоящей -части.

Побачили розбіжність з офіційним текстом?

Повідомити про неточність

Напишіть, що саме розходиться з офіційною публікацією. Код документа вкажіть у повідомленні — так ми швидше знайдемо потрібне місце.

Перейти до форми зворотного зв'язку

Дивіться також

Весь розділ →