ГОСТ 22558-89 сторінка 9 з 116
фраза NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА)
1 ОТД
фраза END-WRITE (КОНЕЦ-ПИСАТЬ)
1 ипд
2 ПОД
2 ОТД
2 ИПД
Сегментация
Номера-сегментов от 0 до 49 для постоянных сегментов
1 СЕГ +
Номера-сегментов от 50 до 99 для независимых сегментов
1 СЕГ +
Все секции, имеющие одинаковый номер-сегмента, должны быть
смежными в исходной программе
1 СЕГ +
Секции, имеющие одинаковый номер-сегмента, могут быть не-
смежными в исходной программе
2 СЕГ 4-
Обработка исходных текстов в разделе процедур
Оператор COPY (КОПИРОВАТЬ)
1 ОИТ
фраза OF/IN имя-библиотеки (ИЗ имя-библиотеки) 2 ОИТ
фраза.REPLACING (ЗАМЕНЯЯ) 2 ОИТ
псевдотекст 2 ОИТ
идентификатор 2 ОИТ
литерал 2 ОИТ
слово 2; ОИТ
Оператор REPLACE (ЗАМЕНИТЬ) 2 ОИТ
псевдотекст BY псевдотекст (псевдотекст НА псевдотекст) 2 ОИТ
OFF (ОТКЛЮЧИТЬ) 2 ОИТ
Часть 2. КОНЦЕПЦИИ И СРЕДСТВА ЯЗЫКА
ВВЕДЕНИЕ
Кобол предлагает множество средств, позволяющих пользователю применять необходимую функцию, не программируя ее в деталях. Ниже обсуждается каждое из этих средств, рассматриваются доводы для включения его в язык и смысл его использования и организации.
ФАЙЛЫ
Файл — это совокупность записей, которые могут быть помещены в, запоминающую среду или извлечены из нее. Пользователь выбирает не только организацию файла, но выбирает также метод и последовательность обработки. Для последовательной запоминающей среды организация файла и метод обработки ограничены, для массовой памяти таких ограничений нет.
Используются следующие соглашения при описании возможностей. Кобол-программ для манипулирования файлами. Термин «имя-файла» обозначает определенное пользователем слово, используемое в исходной Кобол-программе для ссылки на файл. Термины «файл, на который ссылается имя-файла» и «файл» обозначают физический файл независимо от имени-файла, используемого в Кобол-программе. Термин «определитель файла» обозначает объект^ содержащий информацию относительно файла. Все доступы к,.физическим файлам осуществляются через определитель файла. В различных реализациях определитель файла может быть таблицей информации о файле, блоком управления файлом и т. п.
Свойства файла
Файл имеет несколько свойств, которые придаются файлу при его создании и не могут изменяться за время существования файла. Оснойным свойством является организация файла, описыва-
тощая его логическую структуру. Имеются три организации: последовательная, относительная и индексная. Другими фиксированными свойствами файла, обеспечиваемыми Кобол-программой, являются основной ключ записи, дополнительные ключи записи, набор кодов, минимальный и максимальный размер логической записи, тип записи (фиксированной или переменной длины), основная последовательность для ключей индексных файлов, фактор блокирования, литера заполнитель и ограничитель записи.
Последовательная организация
Последовательные файлы организованы так, что каждая запись, за исключением последней, имеет единственную последующую запись; каждая запись, за исключением первой, имеет единственную предшествующую запись. Отношение «предшественник-преемник» устанавливается порядком выполнения оператора WRITE (ПИСАТЬ) при создании файла. Установленный порядок предшествования не изменяется за исключением случая, когда записи добавляются в конец файла.
Последовательно организованный файл массовой памяти имеет такую же логическую структуру, как и файл любой последовательной запоминающей среды; тем не менее последовательный файл массовой памяти может быть обновлен на месте. При использовании этой техники новые записи не могут быть добавлены в файл и каждая обновленная запись должна быть одного размера с записью-оригиналом.
О т н о с и т е л ь н а я организация
Файл с относительной организацией — это файл массовой памяти, доступ к записям которого осуществляется по значению относительного номера записи.
Концептуально файл с относительной организацией состоит из последовательной цепочки областей, каждая из которых может содержать логическую запись. Каждая из этих областей обозначена относительным номером записи. Каждая логическая запись в относительном файле идентифицируется относительным номером записи для ее области памяти. Например, десятая запись — это запись, адресованная относительным номером записи 10 и находящаяся в десятой области записи независимо от того, занесены или не занесены записи в области записи от первой до девятой.
С целью более эффективного доступа к записям в относительном файле количество позиций литер, резервируемых в запоминающей среде для хранения отдельной логической записи, может отличаться от количества позиций литер, указанного в описании этой записи в программе.
'2.1.3. Индексная организация
Файл с индексной организацией — это файл массовой памяти, доступ к записям которого осуществляется заданием значения определенного ключа в этой записи. Для каждого ключа, определенного для записей файла, поддерживается индекс. Каждый такой индекс представляет набор значений соответствующего ключа в каждой записи. Кроме того, каждый индекс является механизмом, обеспечивающим доступ к любой записи файла.
Каждый индексный файл имеет основной индекс, представляющий основной ключ записи каждой записи в файле. Каждая запись помещается в файл, изменяется или удаляется из файла только на основании значения ее основного ключа записи. Основной ключ каждой записи в файле должен быть однозначным (уникальным) и не должен изменяться при обновлении записи. Основной ключ записи объявляется в фразе RECORD KEY (КЛЮЧ ЗАПИСИ) статьи управления файлом для данного файла.
Дополнительные ключи записи обеспечивают дополнительные способы извлечения записей файла. Такие ключи называются в фразах ALTERNATE RECORD KEY (ДОПОЛНИТЕЛЬНЫЙ КЛЮЧ ЗАПИСИ) статьи управления файлом. Значение отдельного дополнительного ключа в каждой записи не обязательно должно быть однозначным. В случае, когда значения могут быть неоднозначными, в фразе ALTERNATE RECORD KEY (ДОПОЛНИТЕЛЬНЫЙ КЛЮЧ ЗАПИСИ) должен быть указан вариант DUPLICATES (С ДУБЛИРОВАНИЕМ).
Логические записи
Логическая запись — это порция данных, которую можно поместить в файл или извлечь из него. Количество записей, содержащихся в файле, ограничивается только возможностью запоминающей среды. Имеются два типа записей: запись фиксированной длины и запись переменной длины. При создании файла объявляется, какой тип записей он будет содержать. В любом случае содержимое области записи не отражает никакой информации, которую реализация может добавлять к записи в физической памяти (например, заголовок длины записи); длина записи, используемая программистом в Коболе, также не отражает таких добавлений.
Записи фиксированной длины
Записи фиксированной длины должны содержать одно и то же количество позиций литер во всех записях файла. Все операции ввода-вывода могут обрабатывать записи только такого размера. Записи фиксированной длины можно определить явно форматом 1 фразы RECORD (В ЗАПИСИ) статьи описания файла независимо от индивидуальных описаний записи.
Записи переменной длины
Записи переменной длины могут содержать различное количество позиций литер в записях файла. Для явного определения записей переменной длины можно указать вариант VARYING (ПЕРЕМЕННОЕ ЧИСЛО ЛИТЕР) фразы RECORD (В ЗАПИСИ) 60
статьи описания файла. Длина записи зависит от данного, на которое имеется ссылка в варианте DEPENDING ON (В ЗАВИСИМОСТИ ОТ) фразы RECORD (В ЗАПИСИ) или в варианте DEPENDING ON (В ЗАВИСИМОСТИ ОТ) фразы OCCURS (ПОВТОРЯЕТСЯ), или от длины записи статьи описания записи в файле.
Типы записей, определяемые реализацией
Если в статье описания файла не указана фраза RECORD (В ЗАПИСИ) для файла или если фраза RECORD (В ЗАПИСИ) определяет диапазон позиций литер, реализация определяет, какой получается тип записей — переменной длины или фиксированной длины.
Обработка файлов
Файл может обрабатываться выполнением операций как над отдельными записями, так и над файлом как целым. Особые условия, которые встречаются во время обработки, сообщаются программе.
О п е р а ц и и над записями
Фраза ACCESS (ДОСТУП) статьи описания файла указывает способ, которым объектная программа оперирует записями в файле. Доступ может быть последовательным, произвольным и динамическим.
К файлам с относительной и индексной организацией возможен любой из методов доступа к файлу независимо от метода доступа, используемого при создании файла. К файлу с последовательной организацией возможен только последовательный доступ.
Для выходного отчета его содержимое, организация и формат могут быть определены при использовании средств генератора отчетов (ч. 2, п. 3.1).
Последовательный доступ
Последовательный доступ возможен для любых файлов, безотносительно к организации файла.
При последовательной организации порядок последовательного доступа является порядком, в котором записи заносились в файл.
При относительной организации порядок последовательного доступа возрастающий по значению относительных номеров записи. Доступны только записи, существующие в текущий момент в файле. Для установления начальной точки следующих друг за другом последовательных извлечений может быть использован оператор. START (ПОДВЕСТИ).
При индексной организации порядок последовательного доступа возрастающий по значению ключа ссылки в соответствии с основной последовательностью, связанной с внутренним набором литер. Каждый из ключей, связанных с файлом, может быть уста-
новлен в качестве ключа ссылки во время обработки файла. Порядок извлечения из набора записей, имеющих дублирующиеся значения ключа ссылки, является первоначальным порядком занесения этих записей в набор. Для установления начальной точки в индексном файле для ряда следующих друг за другом последовательных извлечений может быть использован оператор START (ПОДВЕСТИ).
Произвольный доступ
При произвольном доступе к файлу операторы ввода-вывода используются для доступа к записям в порядке, определенном пользователем. Произвольный доступ может применяться только к файлам с относительной или индексной организацией.
Для файла с относительной организацией программист указывает требуемую запись, помещая ее относительный номер записи в поле данного относительного ключа. При индексной организации программист указывает требуемую запись, помещая значение одного из ключей записи в поле данного основного ключа записи или дополнительного ключа записи.
Динамический доступ
При динамическом доступе программист может переходить от последовательного доступа к произвольному, используя соответствующие формы операторов ввода-вывода. Динамический доступ может использоваться только для файлов с относительной и индексной организацией.
Режим открытия
Режим открытия файла связан с действиями, которые должны быть выполнены для записей файла. Режимы открытия и их назначение следующие:
для ввода — для извлечения записей;
для вывода — для занесения записей в файл;
для дополнения — для добавления записей к существующему файлу;
для ввода-вывода — для извлечения и обновления записей.
Режим открытия определяется оператором OPEN (ОТКРЫТЬ).
Если файл открыт для ввода, возможен доступ к файлу по оператору READ (ЧИТАТЬ). Для файлов с индексной или относительной организацией, для которых указан последовательный или динамический доступ, может быть также использован оператор START (ПОДВЕСТИ).
Если файл открыт для вывода, записи помещаются в файл выполнением операторов GENERATE (ГЕНЕРИРОВАТЬ), TERMINATE (ЗАКОНЧИТЬ) или WRITE (ПИСАТЬ).
Если файл открыт для дополнения, новые записи добавляются в логический конец файла выполнением операторов GENERATE 62
(ГЕНЕРИРОВАТЬ), TERMINATE (ЗАКОНЧИТЬ) или WRITE (ПИСАТЬ).
В режиме открытия для ввода-вывода можно обращаться только к файлам массовой памяти. Дополнительные возможности устройств массовой памяти позволяют обновление записей на месте, таким образом, всегда могут быть использованы операторы READ (ЧИТАТЬ) и REWRITE (ОБНОВИТЬ). Файлы массовой памяти могут быть обновлены таким же образом, как и файлы в последовательной запоминающей среде, перезаписыванием файла полностью в другой файл (возможно в другой участок массовой памяти), используя операторы READ (ЧИТАТЬ) и WRITE (ПИСАТЬ). Тем не менее, иногда более эффективно обновлять файлы массовой памяти на месте. При такой методике обработки файла массовой памяти оператор REWRITE (ОБНОВИТЬ) используется для возврата на то же место запоминающей среды только тех записей, которые были изменены. Операторы READ (ЧИТАТЬ) и REWRITE (ОБНОВИТЬ) являются единственными операторами, использование которых допускается во время обновления па месте последовательных файлов. Для индексных и относительных файлов применяются следующие дополнительные функции: оператор START (ПОДВЕСТИ) может быть использован при последовательном или динамическом доступе для изменения последовательности извлечения записей; оператор DELETE (УДАЛИТЬ) может быть использован при любом доступе для логического удаления записи из файла; оператор WRITE (ПИСАТЬ) может быть использован при произвольном или динамическом доступе для вставки новой записи в файл.
Указатель текущего тома
Указатель текущего тома — логическое понятие, используемое в этом документе для облегчения точного определения текущего физического тома последовательного файла. На состояние указателя текущего тома влияют операторы CLOSE (ЗАКРЫТЬ), OPEN (ОТКРЫТЬ), WRITE (ПИСАТЬ) и READ (ЧИТАТЬ)
Индикатор позиции файла
Индикатор позиции файла — логическое понятие, используемое в этом документе для облегчения точного определения следующей записи в данном файле, которая станет доступной в конкретной последовательности операций ввода-вывода. На установку индикатора позиции файла влияют только операторы START (ПОДВЕСТИ), OPEN (ОТКРЫТЬ) ц READ (ЧИТАТЬ). Понятие индикатора позиции файла не имеет смысла для файлов, открытых для вывода или дополнения.
Понятие верстки
При определении выходного отчета может быть использована фраза LINAGE (ВЕРСТКА). Она облегчает определение логиче-
ской страницы и размещение на логической странице верхнего г нижнего полей и области концовки. Использование фразы LINAGE (ВЕРСТКА) неявно определяет соответствующий специальны! регистр LINAGE-COUNTER (СЧЕТЧИК-ВЕРСТКИ), которыі действует как указатель строки в теле страницы.
О п е р а ц и и над файлами
Несколько операторов Кобола обрабатывают файлы как единое целое или как набор записей. Это операторы CLOSE (ЗАКРЫТЬ), OPEN (ОТКРЫТЬ), MERGE (СЛИТЬ) и SORT (СОРТИРОВАТЬ).
Побачили розбіжність з офіційним текстом?