ГОСТ 22558-89 сторінка 10 з 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 NUMBER (НОМЕР СТОЛБЦА). Система управления генератором отчетов обеспечивает заполнение пробелами промежутка между всеми определяемыми полями.
Манипулирование данными
При использовании средств генератора отчетов перемещением данных в группу отчета управляют фразы секции отчетов, а не операторы раздела процедур. Фразы секции отчетов, осуществляющие манипулирование данными, следующие: 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 (ГЕНЕРИРОВАТЬ), TERMINATE (ЗАКОНЧИТЬ), SUPPRESS (ПОДАВИТЬ) и USE BEFORE REPORTING (ИСПОЛЬЗОВАТЬ ДО ВЫДАЧИ).
Оператор INITIATE (НАЧАТЬ) приводит к автоматическому выполнению ряда инициирующих действий системой управления генератором отчетов. Отчет должен быть инициирован прежде, чем можно будет выполнять для него детальную обработку.
Оператор GENERATE (ГЕНЕРИРОВАТЬ) с операндом имя- данного приводит к форматизации и записи на устройство вывода указанной группы отчета типа DETAIL (ФРАГМЕНТ). Кроме того, система управления генератором отчетов настраивается на выполнение ряда неявных действий, описанных в п. 3.2 настоящей -части.
Побачили розбіжність з офіційним текстом?