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

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

Оператор TERMINATE (ЗАКОНЧИТЬ) вызывает выполнение системой управления генератором отчетов всех автоматических функций, связанных с завершением отчета. Оператор TERMINA­TE (ЗАКОНЧИТЬ) должен быть выполнен до закрытия файла, со­держащего отчет.

Оператор 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 ИМЯ ...

В обоих случаях полному набору вхождений данного TABLE­ELEMENT (ТАБЛИЧНЫЙ-ЭЛЕМЕНТ) присвоено имя 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 (ПЕРЕОПРЕДЕЛЯЕТ) и связанных с ней подчи­ненных статей. Подчиненные статьи, следующие за статьей REDE­FINES (ПЕРЕОПРЕДЕЛЯЕТ) и повторяющиеся соответственно фразам 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 (ОБЩАЯ ОБЛАСТЬ) позволяет про­граммисту экономить память.

ОРГАНИЗАЦИЯ ПРОГРАММ И ПРОГРАММНЫХ СВЯЗЕЙ

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

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

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

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

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

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

Весь розділ →