б) если доступ произвольный I или динамический, относительный номер, который должен быть связан с записью, находящейся в области записи, должен быть помещен перед выполнением оператора WRITE (ПИСАТЬ) в данное, определенное как относительный ключ. При выполнении оператора WRITE (ПИСАТЬ) эта запись передается СУМП.
Если относительный файл открыт как дополняемый, записи включаются в этот файл. Первая запись, переданная системой управления массовой памятью, имеет относительный номер записи на единицу больший, чем наибольший относительный номер записи, существующей в файле. Следующие записи, переданные СУМП, имеют соответственно большие относительные номера записи. Если для файла, связанного' с именем-записи-1, указана фраза RELATIVE KEY (ОТНОСИТЕЛЬНЫЙ КЛЮЧ), во время выполнения оператора WRITE (ПИСАТЬ) относительный номер включаемой записи помещается СУМП в данное, являющееся относительным ключом, согласно правилам для оператора MOVE (ПОМЕСТИТЬ) (см. ч. 6, п. 6.19).
Если файл открывается как входной-выходпой и доступ произвольный J или динамический, | по оператору WRITE (ПИСАТЬ) запись вставляется в этот файл. Относительный номер, который должен быть связан с записью, находящейся в области записи, должен быть помещен перед выполнением оператора WRITE (ПИСАТЬ) в данное, определенное как относительный ключ. При выполнении оператора WRITE (ПИСАТЬ) эта запись передается СУМП.
Условие ошибки ключа возникает в следующих случаях:
когда при произвольном I или динамическом | доступе относительный ключ определяет запись, которая уже имеется в файле;
когда сделана попытка писать запись вне границ, определенных для файла.
При обнаружении условия ошибки ключа выполнение оператора WRITE (ПИСАТЬ) считается неуспешным. Содержимое области записи не изменяется, а состояние ввода-вывода имени файла, связанного с именем-записи-1, устанавливается на значение, указывающее причину этого условия. Выполнение программы продолжается в соответствии с правилами для условия ошибки ключа (см. пп. 1.3.4, 1.3.5 настоящей части).
Часть 9. МОДУЛЬ ИНДЕКСНОГО ВВОДА ВЫВОДА
ВВЕДЕНИЕ В МОДУЛЬ ИНДЕКСНОГО ВВОДА-ВЫВОДА
Назначение
Модуль индексного ввода-вывода обеспечивает возможность произвольного или последовательного доступа к записям файлов массовой памяти. Каждая запись индексного файла однозначно идентифицируется значением одного или более ключей внутри записи.
Характеристика уровней
Уровень 1 индексного ввода-вывода обеспечивает неполные возможности для статьи управления файлом, статьч описания файла и статей параграфа I-O-CONTROL (УПРАВЛЕНИЕ-ВВОДОМ- ВЫВОДОМ). в разделе процедур уровень 1 индексного ввода-вывода обеспечивает ограниченные возможности операторов CLOSE (ЗАКРЫТЬ), OPEN (ОТКРЫТЬ), READ (ЧИТАТЬ), USE (ИСПОЛЬЗОВАТЬ) и WRITE (ПИСАТЬ) и полные возможности оператора DELETE (УДАЛИТЬ).
Уровень 2 индексного ввода-вывода обеспечивает полные возможности для статьи управления файлом, статьи описания файла и статей параграфа I-O-CONTROL (УПРАВЛЕНИЕ-ВВО- ДОМ-ВЫВОДОМ). В разделе процедур уровень 2 индексного ввода-вывода обеспечивает полные возможности счера к р св CLOSE (ЗАКРЫТЬ), DELETE (УДАЛИТЬ), OPEN (ОТКРЫТЬ), READ (ЧИТАТЬ), START (ПОДВЕСТИ), USE (ИСПОЛЬЗОВАТЬ) и WRITE (ПИСАТЬ).
Понятия языка
Организация
Файл с индексной организацией — это файл массовой памяти, доступ к записям которого может осуществляться с помощью указанного в записи ключа.
Для каждого данного, являющегося ключом, определенным для записей файла, поддерживается индекс. Каждый индекс представляет собой множество значений соответствующего ключевого данного в каждой записи. Каждый индекс, следовательно, является механизмом, обеспечивающим доступ к любой записи файла.
Каждый индексный файл имеет основной индекс, представляющий основной ключ каждой записи файла. Каждая запись включается в файл, изменяется или удаляется из файла в зависимости от значения основного ключа записи. Каждый основной ключ записи должен быть уникальным и неизменяемым при изменении записи.
Основной ключ записи описывается во фразе RECORD KEY (КЛЮЧ ЗАПИСИ) статьи управления файлом для данного файла.
Дополнительные ключи записи обеспечивают дополнительные средства доступа к записям файла. Эти ключи именуются во фразе ALTERNATE RECORD KEY (ДОПОЛНИТЕЛЬНЫЙ КЛЮЧ ЗАПИСИ) статьи управления файлом. Значение дополнительного ключа записи может дублироваться. Когда эти значения не уникальны, во фразе ALTERNATE RECORD KEY (ДОПОЛНИТЕЛЬНЫЙ КЛЮЧ ЗАПИСИ) указывается фраза DUPLICATES (С ДУБЛИРОВАНИЕМ).
Методы доступа
При индексной организации порядок последовательного доступа является возрастающим на основе значения ключа ссылки согласно основной последовательности файла. Любой ключ, соответствующий файлу, может во время обработки файла устанавливаться как ключ ссылки. [Порядок доступа к множеству записей, имеющих неуникальные значения ключей ссылки, является первоначальным порядком помещения записей в множество. Для установки в индексном файле начальной точки для последовательности последовательных обращений может использоваться оператор START (ПОДВЕСТИ).
При произвольном доступе к файлу операторы ввода-вывода применяются для доступа к записям в порядке, указанном программистом.
При индексной организации программист указывает требуемую запись, помещая значение одного из ее ключей записи в данное, представляющее ключ записи или дополнительный ключ записи.
При динамическом доступе программист может произвольно переходить от последовательного доступа к произвольному и наоборот, применяя соответствующие формы операторов1 ввода- вывода.
У к а з а т е л ь позиции файла
Указатель позиции файла — это логическое понятие, используемое в этом документе для облегчения точной спецификации следующей записи, к которой должен осуществляться доступ при выполнении заданной последовательности операций ввода-вывода.
На установку указателя позиции файла влияют только операторы CLOSE (ЗАКРЫТЬ), OPEN (ОТКРЫТЬ), READ (ЧИТАТЬ) Jh START (ПОДВЕСТИ) (. Понятие указателя позиции файла не имеет смысла для файла, открытого как выходной | или как до-| полняемый.
С о с т о я н и е ввода-вы вода
Состояние ввода-вывода — это логическое понятие, характеризующееся двухсимвольным значением, которое устанавливается для указания состояния операции ввода-вывода во время выполнения операторов CLOSE (ЗАКРЫТЬ), OPEN (ОТКРЫТЬ), READ (ЧИТАТЬ), REWRITE (ОБНОВИТЬ) , | START (ПОД- | I ВЕСТИ) или WRITE (ПИСАТЬ) перед выполнением любого повелительного оператора, связанного с этим оператором ввода- вывода, и перед выполнением любой применимой процедуры USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ). Значение состояния ввода-вывода доступно Кобол-программе посредством фразы FILE STATUS (СОСТОЯНИЕ ФАЙЛА) в статье управления файлом.
Состояние ввода-вывода определяет также, будет ли выполняться процедура USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ). Если возникает любое условие, отличное от тех, которые определены ниже как «успешное завершение», может выполняться указанная процедура по правилам, заданным для оператора USE (ИСПОЛЬЗОВАТЬ). Если возникает одно из условий «успешное завершение», никакая процедура такого типа не будет выполняться (п. 4.8 настоящей части).
Некоторые классы значений состояния ввода-вывода задают критические условия ошибки. К таким значениям относятся значения, которые начинаются с цифры 3 или 4, а также значения, начинающиеся с цифры 9, которые определяются как критические реализацией. Если значение состояния ввода-вывода для операции ввода-вывода задает такое условие ошибки, реализацией определяются действия, которые предпринимаются после выполнения применимой процедуры USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ), или, если ни одна такая процедура не применима, после завершения стандартной системной процедуры обработки ошибок ввода-вывода.
Состояние ввода-вывода задает одно из следующих условий, возникающих после завершения операции ввода-вывода:
Успешное завершение. Оператор ввода-вывода выполнился успешно;В конце. Оператор последовательного чтения был выполнен неуспешно из-за того, что возникло условие конца файла;
Ошибка ключа. Оператор ввода-вывода выполнен неуспешно из-за того, что возникло условие ошибки ключа;
Постоянная ошибка. Оператор ввода-вывода выполнен неуспешно в результате ошибки, которая исключает дальнейшую обработку файла. Выполняются все заданные процедуры обработки ошибочных ситуаций. Условие постоянной ошибки остается действующим на все последующие операции ввода-вывода файла до тех пор, пока не будут вызваны определенные реализацией средства для устранения условия постоянной ошибки;
Логическая ошибка. Оператор ввода-вывода выполнен неуспешно из-за недопустимой последовательности операций ввода- вывода, выполняемых над файлом, или в результате нарушения ограничений, заданных пользователем;
Ошибка, определяемая реализацией. Оператор ввода-вывода выполнен неуспешно в результате возникновения условия, определенного реализацией.
Ниже приводится список значений, помещаемых в состояние ввода-вывода для перечисленных выше условий, возникающих в результате выполнения операций ввода-вывода для индексного файла. Если применимо более одного значения, значение, которое помещается в состояние ввода-вывода, определяется реализацией.
Успешное завершение
Состояние ввода-вывода=00. Оператор ввода-вывода выполнился успешно и нет никакой другой доступной информации об операции ввода-вывода.
Состояние ввода-вывода = 02. Оператор ввода-вывода успешно выполнился, но обнаружено дублирование ключа.
Для оператора READ (ЧИТАТЬ) значение ключа для текущего ключа ссылки равно значению такого же ключа в следующей записи в текущем ключе ссылки.
Для оператора REWRITE (ОБНОВИТЬ) или WRITE (ПИСАТЬ) только что записанная запись создает дублирующееся значение ключа хотя бы для одного дополнительного ключа записи, для которого дублирование разрешено.
Состояние ввода-вывода = 04. Оператор READ (ЧИТАТЬ) выполнился успешно, но длина обрабатываемой записи не соответствует фиксированным свойствам этого файла.
Состояние ввода-вывода = 05. Оператор OPEN (ОТКРЫТЬ) успешно выполнился, но указанный в нем необязательный файл во время выполнения оператора OPEN (ОТКРЫТЬ) отсутствует. Если режим открытия для ввода-вывода или дополнения, файл будет создаваться.
Условие «в конце» с неуспешным завершением
а) Состояние ввода-вывода = 10. Делается попытка выполнять последовательный оператор READ (ЧИТАТЬ), а в файле не существует следующей логической записи из-за того, что:
достигнут конец файла;
делается попытка выполнить последовательный оператор READ (ЧИТАТЬ) в первый раз для отсутствующего необязательного входного файла.
Условие ошибки ключа при неуспешном завершении
Состояние ввода-вывода = 21. Ошибка в последовательности при последовательном доступе к индексному файлу. Нарушено требование возрастающей последовательности значений ключа записи или значение основного ключа записи изменилось между успешным выполнением оператора READ (ЧИТАТЬ) и выполнением следующего оператора REWRITE (ОБНОВИТЬ) для этого файла (п. 4.9 настоящей части).
Состояние ввода-вывода = 22. Сделана попытка обновить или записать запись, которая создает дублирующийся основной ключ записи |или дублирующийся дополнительный ключ записи без I фразы DUPLICATES (С ДУБЛИРОВАНИЕМ) в индексном I файле.
Состояние ввода-вывода = 23. Это условие возникает, если:
сделана попытка произвольного доступа к записи, которой нет в файле; или ___
сделана попытка выполнить оператор START (ПОДВЕСТИ) или READ (ЧИТАТЬ) с произвольным доступом для необязательного входного файла, который отсутствует.
Состояние ввода-вывода = 24. Сделана попытка занесения записей в индексный файл вне его границ, определенных внешним образом. Способ определения границ указывается реализацией.
Условие постоянной ошибки с неуспешным завершением
Состояние ввода-вывода = 30. Возникла постоянная ошибка и нет никакой другой доступной информации об операции ввода- вывода.
Состояние ввода-вывода = 35. Постоянная ошибка возникла из-за того, что делается попытка выполнить оператор OPEN (ОТКРЫТЬ) с фразой INPUT (ВХОДНОЙ), 1-0 (ВХОДНОЙ-ВЫ- ХОДНОЙ) |или EXTEND (ДОПОЛНЯЕМЫЙ)! для файла, который обязательно должен присутствовать, но не присутствует.Состояние ввода-вывода = 37. Постоянная ошибка возникла из-за того, что оператор OPEN (ОТКРЫТЬ) выдан для файла, который не поддерживает режим открытия, заданный в операторе OPEN (ОТКРЫТЬ). Возможны следующие нарушения:
задана фраза | EXTEND"(ДОПОЛНЯЕМЫЙ) или | OUTPUT (ВЫХОДНОЙ), а файл не допускает операций записи;
задана фраза 1-0 (ВХОДНОЙ-ВЫХОДНОЙ), а файл не допускает операции ввода и вывода, которые разрешены для индексного файла, открываемого в режиме ввода-вывода;
задана фраза INPUT (ВХОДНОЙ), а файл не допускает операции чтения.
І
д) Состояние ввода-вывода = 39. Оператор OPEN (ОТКРЫТЬ) завершился неуспешно из-за обнаруженного для этого файла несоответствия фиксированных свойств файла и свойств, заданных в программе.
(5) Условие логической ошибки с неуспешным завершением