ГОСТ 22558-89 сторінка 11 з 116
Оператор GENERATE (ГЕНЕРИРОВАТЬ) с операндом имя- отчета обеспечивает средства генерации итогов. В отчете, производимом оператором данного типа, автоматически подавляется печать всех строк фрагментов и отчет состоит только из суммарных итогов, накопленных во время обработки групп отчета типа DETAIL (ФРАГМЕНТ). Действия, производимые системой управления генератором отчетов по оператору GENERATE имя-от- чета (ГЕНЕРИРОВАТЬ имя-отчета), аналогичны действиям, производимым по оператору GENERATE имя-данного (ГЕНЕРИРОВАТЬ имя-данного), за исключением того, что в первом случае подавляется печать строк фрагмента.
Оператор TERMINATE (ЗАКОНЧИТЬ) вызывает выполнение системой управления генератором отчетов всех автоматических функций, связанных с завершением отчета. Оператор TERMINATE (ЗАКОНЧИТЬ) должен быть выполнен до закрытия файла, содержащего отчет.
Оператор SUPPRESS (ПОДАВИТЬ) обеспечивает средства подавления печати целой группы отчета во время выполнения программы.
Вариант BEFORE REPORTING (ДО ВЫДАЧИ) оператора USE (ИСПОЛЬЗОВАТЬ) обеспечивает механизм, при помощи которого в автоматических процедурах, выполняемых системой управления генератором отчетов, в отдельных случаях могут быть выполнены операторы раздела процедур. Операторы процедуры USE BEFORE REPORTING (ИСПОЛЬЗОВАТЬ ДО ВЫДАЧИ) могут изменять содержимое данных, имена которых указаны во 70
фразах SOURCE (ИСТОЧНИК). Таким образом, имеется возможность управления содержимым данных, которые производятся автоматически в группах отчета.
ОБРАБОТКА ТАБЛИЦ
Таблицы данных являются наиболее общим компонентом задач обработки данных. Хотя повторяющиеся данные, составляющие таблицу, могут быть описаны рядом статей описания данных,, имеющих один и тот же номер уровня и подчиненных одному и тому же групповому данному, существуют две причины, почему та-- кой подход не может быть удовлетворительным. Во-первых, с точки зрения документации однородность таких данных не очевидна и, во-вторых, доступ во время выполнения к отдельным элементам при таком подходе затрудняется.
Таблицы данных определяются в Коболе включением фразы OCCURS (ПОВТОРЯЕТСЯ) в статьи описания данных. Эта фраза указывает, что данное должно быть повторено установленное число раз. Данное рассматривается как элемент таблицы, и его имя и описание применяются к каждому повторению или вхождению. Так как каждое вхождение табличного элемента не имеет приписанного ему особого имени данного, ссылка на конкретное вхождение может быть сделана только указанием имени данного табличного элемента вместе с номером вхождения этого элемента. Номер вхождения называется индексом.
Число вхождений табличного элемента может быть фиксированным или переменным.
Определение таблиц
Чтобы определить одномерную таблицу, программист использует фразу OCCURS (ПОВТОРЯЕТСЯ) как часть описания табличного элемента, но фраза OCCURS (ПОВТОРЯЕТСЯ) не должна появляться в описании групповых данных, которые содержат табличный элемент. Пример 1 показывает одномерную таблицу, определяемую данным TABLE-ELEMENT (ТАБЛИЧНЫИ-ЭЛЕ- МЕНТ).
Пример 1
01 TABLE-1.
02 TABLE-ELEMENT OCCURS 20 TIMES.
03 FAM ...
03 NAME . ..
01 ТАБЛИЦА-1.
02 ТАБЛИЧНЫЙ-ЭЛЕМЕНТ ПОВТОРЯЕТСЯ 20 РАЗ.
03 ФАМИЛИЯ...
03 ИМЯ ...
В примере 2 TABLE-ELEMENT (ТАБЛИЧНЫЙ-ЭЛЕМЕНТ) определяет одномерную таблицу, но FIO (ФИО) не определяет одномерную таблицу, поскольку в описании группового данного TABLE-ELEMENT (ТАБЛИЧНЫЙ-ЭЛЕМЕНТ), содержащего FIO (ФИО), имеется фраза OCCURS (ПОВТОРЯЕТСЯ).
Пример 2
102 TABLE-1.
03 TABLE-ELEMENT OCCURS 20 TIMES.
04 FIO OCCURS 5 TIMES.
05 FAM ...
05 NAME ...
02 ТАБЛИЦА-1.
03 ТАБЛИЧНЫЙ-ЭЛЕМЕНТ ПОВТОРЯЕТСЯ 20 РАЗ.
04 ФИО ПОВТОРЯЕТСЯ 5 РАЗ.
05 ФАМИЛИЯ ...
05 ИМЯ ...
В обоих случаях полному набору вхождений данного TABLEELEMENT (ТАБЛИЧНЫЙ-ЭЛЕМЕНТ) присвоено имя TABLE-1 (ТАБЛИЦА-1). Тем не менее, нет необходимости давать таблице имя группы, если не требуется ссылка на всю таблицу как на групповое данное.
Ни одна из трех одномерных таблиц, приведенных в двух следующих примерах, не имеет имени группы.
Пример 3
01 INFORMATION.
02 OTDEL . ..
02 FIO OCCURS 20 TIMES . . .
02 N-ROOM ...
01 СВЕДЕНИЯ.
02 ОТДЕЛ . ..
02 ФИО ПОВТОРЯЕТСЯ 20 РАЗ . . .
02 N-КОМНАТЫ . ..
Пример 4
01 INFORMATION.
02 DEPARTMENT OCCURS 20 TIMES .. .
02 FIO . ..
02 N-ROOM OCCURS 5 TIMES . . .
01 СВЕДЕНИЯ.
02 ЦЕХ ПОВТОРЯЕТСЯ 20 РАЗ .. .
02 ФИО ...
02 N-КОМНАТЫ ПОВТОРЯЕТСЯ 5 РАЗ ...
Определение одномерной таблицы внутри каждого вхождения элемента другой одномерной таблицы приводит к образованию .двумерной таблицы. Для определения двумерной таблицы фраза •OCCURS (ПОВТОРЯЕТСЯ) должна появиться в описании данных 72
табличного элемента и в описании только одного группового элемента данных, который содержит этот табличный элемент. Так, в примере 5 N-ROOM (N-КОМНАТЫ) является элементом двумерной таблицы — он входит 5 раз в каждый элемент данного DEPARTMENT (ЦЕХ), который сам повторяется 20 раз.
FIO (ФИО) является элементом одномерной таблицы.
Пример 5
02 DEPARTMENT OCCURS 20 TIMES . . .
03 FIO ...
03 N-ROOM OCCURS 5 TIMES . . .
02 ЦЕХ ПОВТОРЯЕТСЯ 20 РАЗ ...
03 ФИО . ..
03 N-КОМНАТЫ ПОВТОРЯЕТСЯ 5 РАЗ ...
В общем случае для определения п-мерной таблицы фраза OCCURS (ПОВТОРЯЕТСЯ) должна появиться в описании данного элемента таблицы и в описаниях (n— 1) групповых данных, содержащих этот элемент.
Начальные значения таблиц
Начальные значения элементов таблиц определяются в секции, рабочей памяти одним из следующих способов:
таблица может быть описана как ряд отдельных статей описания данных, подчиненных одному и тому же групповому данному, каждая из которых определяет значение элемента или части элемента таблицы. При определении записи и ее элементов можно использовать любую фразу описания данного (фраза USAGE (об использовании), PICTURE (ШАБЛОН), и т. п.), если это необходимо для полноты определения. Иерархическая структура таблицы затем показывается использованием статьи REDEFINES (ПЕРЕОПРЕДЕЛЯЕТ) и связанных с ней подчиненных статей. Подчиненные статьи, следующие за статьей REDEFINES (ПЕРЕОПРЕДЕЛЯЕТ) и повторяющиеся соответственно фразам OCCURS (ПОВТОРЯЕТСЯ), не могут содержать фразу VALUE (ЗНАЧЕНИЕ);
величины всех размерностей таблицы могут быть инициированы фразой VALUE (ЗНАЧЕНИЕ), относящейся к описанию статьи, определяющей таблицу в целом. Статьи самого низкого уровня покажут иерархическую структуру таблицы; статьи самого низкого уровня не могут содержать фразы VALUE (ЗНАЧЕНИЕ);
значения отдельных элементов таблицы могут быть опре.- делены использованием фразы VALUE (ЗНАЧЕНИЕ).
Ссылки на табличные элементы
Всякий раз, когда пользователь ссылается на табличный' элемент или имя-условия, связанное с табличным элементом, за исключением операторов USE FOR DEBUGGING (ИСПОЛЬЗОВАТЬ ДЛЯ ОТЛАДКИ) и SEARCH (ИСКАТЬ), ссылка должна указывать, какое именно вхождение предполагается. Для доступа к одномерной таблице достаточно одного номера вхождения требуемого элемента. Для таблиц размерности больше единицы номер вхождения должен быть указан для каждой размерности таблицы. Таким образом, в примере 5 ссылка на четвертый DEPARTMENT (ЦЕХ) или четвертый FIO (ФИО) будет полной, в то время как ссылка на четвертый N-ROOM (N-КОМНАТЫ) полной не будет. Для ссылки на N-ROOM (N-КОМНАТЫ), который является элементом двумерной таблицы, пользователь должен указать, например, четвертый элемент N-ROOM (N-КОМНАТЫ) в пятом элементе DEPARTMENT (ЦЕХ).
Индексирование
Номера вхождений указываются добавлением одного или нескольких индексов к имени-данного.
Индексом может быть либо целое, либо имя-данного, относящееся к целому числовому элементарному данному, либо имя-ин- декса, связанное с таблицей. За именем-данного или именем-ин- декса может следовать знак операции + или — и целое, используемое соответственно как приращение или уменьшение. Допустимо одновременное использование целых, имен-данных и имен-индексов.
Индексы, заключенные в круглые скобки, записываются непосредственно за уточнением имени элемента таблицы. Количество индексов в такой ссылке должно равняться размерности таблицы, в которую входит данный элемент. Таким образом, каждой фразе OCCURS (ПОВТОРЯЕТСЯ) в иерархии, содержащей имя-дан- ного, включая и само имя-данного, должен быть соотнесен индекс.
Когда требуется более одного индекса, они записываются в порядке последовательного снижения уровня вложенности размерностей организации данных. Если многомерную таблицу рассматривать как последовательность вложенных таблиц и наиболее объемлющую или внешнюю таблицу рассматривать как старший уровень, а самую внутреннюю или наименее объемлющую таблицу — как младший уровень, индексы записываются слева направо в порядке: старший уровень, промежуточный, младший.
В ссылке на данное нельзя использовать индексирование, если данное не является табличным элементом или данным или име- нем-условия в табличном элементе.
Наименьший допустимый номер вхождения равняется единице. Наибольший допустимый номер вхождения в каждом отдельном случае равняется максимальному числу вхождений данного, определяемому фразой OCCURS (ПОВТОРЯЕТСЯ).
Индексирование с помощью целого или имен и-д энного
Если для представления индекса используется целое или имя- данного, они могут использоваться для ссылки на данные в разных таблицах. Элементы таблиц не обязательно должны быть одного и того же размера для всех таблиц. Одно и то же целое или имя- данного может появляться как единственный индекс одного данного и как один из двух и более индексов другого данного.
Индексирование с помощью имени-индекса
Для облегчения операций поиска в таблице и манипулирования отдельными данными допускается индексирование с помощью имени-индекса. Чтобы использовать это средство, программист соотносит одно или несколько имен-индексов данному, в статье описания которого имеется фраза OCCURS (ПОВТОРЯЕТСЯ). Значение имени-индекса соответствует номеру вхождения для данного, с которым связано имя-индекса.
Фраза INDEXED BY (ИНДЕКСИРУЕТСЯ), посредством которой идентифицируется имя-индекса и соотносится определенной таблице, является необязательной частью фразы OCCURS (ПОВТОРЯЕТСЯ). В Коболе нет отдельной статьи для описания имени- индекса, поскольку его определение полностью зависит от оборудования. Во время выполнения значение имени-индекса будет соответствовать номеру вхождения для той конкретной размерности таблицы, с которой было связано имя-индекса; способ соответствия определяется реализацией. Начальное значение имени-индекса во время выполнения не определено, то есть начальное значение нужно установить перед использованием.
Начальное значение имени-индекса присваивается оператором' PERFORM (ВЫПОЛНИТЬ) с фразой VARYING (МЕНЯЯ), оператором SEARCH ALL (ИСКАТЬ ОСОБО) или оператором SET (УСТАНОВИТЬ).
Использование целого или имени-данного в качестве индекса для ссылки на табличный элемент или данное в табличном элементе не вызывает изменений значения имени-индекса, связанного с этой таблицей.
Имя-индекса может быть использовано для ссылки только на ту таблицу, которой оно соотнесено фразой INDEXED BY (ИНДЕКСИРУЕТСЯ).
Операции поиска данных, организованных в таблицы, обеспечиваются в Коболе оператором SEARCH (ИСКАТЬ), позволяющим осуществлять последовательный или непоследовательный (например, бинарный) поиск. Оператор используется для поиска в таблице элемента, удовлетворяющего определенному условию, и для установки значения соответствующего имени-индекса для указания этого табличного элемента.
Относительное индексирование является дополнительным вариантом для ссылок на табличные элементы или на данное в табличном элементе. Когда за именем табличного элемента следует индекс в виде (имя-индекса + или — целое), номер вхождения, требуемый для завершенной (полной) ссылки, такой же, как если бы перед ссылкой имя-индекса было увеличено или уменьшено на целое посредством оператора SET (УСТАНОВИТЬ). Использование относительного индексирования не изменяет значения имени-индекса.
Значение имени-индекса может быть сделано доступным объектной программе путем его запоминания в индексном данном. Индексные данные описываются в программе статьей описания данного, содержащей фразу USAGE IS INDEX (ДЛЯ ИНДЕКСА). Значение имени-индекса помещается в индексное данное выполнением оператора SET (УСТАНОВИТЬ).
П р и м е р ы индексирования
Предполагая следующее описание данных:
02 ANK ...
02 Al OCCURS 20 TIMES INDEXED BY Al-INDEX ...
03 Bl ...
03 B2 OCCURS 5 TIMES . . .
04 Cl ...
88 MAX VALUE IS ...
04 C2 ...
05 DI OCCURS 10 TIMES...
06 El . . .
06 E2 ...
02 AHK ...
02 Al ПОВТОРЯЕТСЯ 20 РАЗ ИНДЕКСИРУЕТСЯ AI-ИНДЕКС...
03 Bl ...
03 B2 ПОВТОРЯЕТСЯ 5 РАЗ . ..
04 Cl ...
88 МАХ ЗНАЧЕНИЕ . . .
04 С2...
05 D1 ПОВТОРЯЕТСЯ 10 РАЗ ...
06 Е1 ...
06 Е2 ...
в ссылках на А1 и В1 требуется только один индекс, в ссылках на В2, Cl, МАХ и С2 требуются два индекса, и в ссылках на D1, Е1 и Е2 требуются три индекса.
Проиллюстрируем требования указания индексов в порядке от старшего к младшим:
Е1 (18, 2, 7) значит Е1 в седьмом D1, во втором В2 и в восемнадцатом А1.
Возможность одновременного использования целых, имен-дан- ных и имен-индексов проиллюстрирована на следующем примере:
EI (A1-INDEX, 4, ANK+5).
(ЕІ (АІ-ИНДЕКС, 4, АНК+5)).
ОБЩАЯ ОБЛАСТЬ ПАМЯТИ
Это средство в основном ориентировано на экономию памяти в объектной программе, так как позволяет нескольким файлам иметь одну и ту же область файла и области ввода-вывода.
Если использована фраза SAME RECORD (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ), общей является только область записи, а области ввода-вывода для каждого файла остаются независимыми. В этом случае любое количество файлов, имеющих общей одну и ту же область записи, могут быть активными одновременно. Этот фактор может дать экономию времени при выполнении объектной программы.
Проиллюстрируем это. Если программист назначил одну и ту же область записи и старому, и новому файлам, он не только сэкономил память в объектной программе, но поскольку эта техника исключает пересылку каждой записи из области ввода в область вывода, получит в результате экономию и во времени. Кроме того, при использовании этой техники программисту нет необходимости определять в деталях запись и старого, и нового файлов. Вместо этого он полностью определяет запись в одном случае, и просто включает статью с номером уровня 01 в другом. Поскольку эти области записей фактически являются одной и той же областью, один набор имен достаточен для всех потребностей обработки без необходимости уточнения.
Если используется фраза SAME (ОБЩАЯ ОБЛАСТЬ) без варианта RECORD (ЗАПИСИ), общими являются не только области файла, но и области ввода-вывода.
В результате только один из файлов, разделяющих один и тот же набор общих областей, может быть активным в определенное время. Эта форма фразы предназначена для применения, когда ряд файлов используется на разных фазах объектной программы. В этих случаях фраза SAME (ОБЩАЯ ОБЛАСТЬ) позволяет программисту экономить память.
ОРГАНИЗАЦИЯ ПРОГРАММ И ПРОГРАММНЫХ СВЯЗЕЙ
Довольно часто полные проблемы обработки данных решаются разработкой отдельно компилируемых, но логически скоординированных программ, которые на некотором этапе до выполнения можно компилировать отдельно и затем собрать для полного решения проблемы. Организация программ на Коболе и единицы исполнения поддерживает такой подход разделения решения больших проблем на малые, более управляемые порции, которые можно программировать и тестировать независимо.
Побачили розбіжність з офіційним текстом?