б) если доступ произвольный I или динамический, относитель­ный номер, который должен быть связан с записью, находящейся в области записи, должен быть помещен перед выполнением опера­тора WRITE (ПИСАТЬ) в данное, определенное как относитель­ный ключ. При выполнении оператора WRITE (ПИСАТЬ) эта за­пись передается СУМП.

  1. Если относительный файл открыт как дополняемый, за­писи включаются в этот файл. Первая запись, переданная сис­темой управления массовой памятью, имеет относительный но­мер записи на единицу больший, чем наибольший относитель­ный номер записи, существующей в файле. Следующие записи, переданные СУМП, имеют соответственно большие относитель­ные номера записи. Если для файла, связанного' с именем-запи­си-1, указана фраза RELATIVE KEY (ОТНОСИТЕЛЬНЫЙ КЛЮЧ), во время выполнения оператора WRITE (ПИСАТЬ) относительный номер включаемой записи помещается СУМП в данное, являющееся относительным ключом, согласно правилам для оператора MOVE (ПОМЕСТИТЬ) (см. ч. 6, п. 6.19).

  2. Если файл открывается как входной-выходпой и доступ произвольный J или динамический, | по оператору WRITE (ПИ­САТЬ) запись вставляется в этот файл. Относительный номер, который должен быть связан с записью, находящейся в области записи, должен быть помещен перед выполнением оператора WRITE (ПИСАТЬ) в данное, определенное как относительный ключ. При выполнении оператора WRITE (ПИСАТЬ) эта запись передается СУМП.

  3. Условие ошибки ключа возникает в следующих случаях:

  1. когда при произвольном I или динамическом | доступе отно­сительный ключ определяет запись, которая уже имеется в файле;

  2. когда сделана попытка писать запись вне границ, определен­ных для файла.

  1. При обнаружении условия ошибки ключа выполнение опе­ратора WRITE (ПИСАТЬ) считается неуспешным. Содержимое об­ласти записи не изменяется, а состояние ввода-вывода имени фай­ла, связанного с именем-записи-1, устанавливается на значение, указывающее причину этого условия. Выполнение программы про­должается в соответствии с правилами для условия ошибки ключа (см. пп. 1.3.4, 1.3.5 настоящей части).

Часть 9. МОДУЛЬ ИНДЕКСНОГО ВВОДА ВЫВОДА

  1. ВВЕДЕНИЕ В МОДУЛЬ ИНДЕКСНОГО ВВОДА-ВЫВОДА

    1. Назначение

Модуль индексного ввода-вывода обеспечивает возможность произвольного или последовательного доступа к записям файлов массовой памяти. Каждая запись индексного файла однозначно идентифицируется значением одного или более ключей внутри за­писи.

  1. Характеристика уровней

Уровень 1 индексного ввода-вывода обеспечивает неполные воз­можности для статьи управления файлом, статьч описания файла и статей параграфа I-O-CONTROL (УПРАВЛЕНИЕ-ВВОДОМ- ВЫВОДОМ). в разделе процедур уровень 1 индексного ввода-вы­вода обеспечивает ограниченные возможности операторов CLOSE (ЗАКРЫТЬ), OPEN (ОТКРЫТЬ), READ (ЧИТАТЬ), USE (ИС­ПОЛЬЗОВАТЬ) и WRITE (ПИСАТЬ) и полные возможности опе­ратора DELETE (УДАЛИТЬ).

Уровень 2 индексного ввода-вывода обеспечивает полные воз­можности для статьи управления файлом, статьи описания фай­ла и статей параграфа I-O-CONTROL (УПРАВЛЕНИЕ-ВВО- ДОМ-ВЫВОДОМ). В разделе процедур уровень 2 индексного ввода-вывода обеспечивает полные возможности счера к р св CLOSE (ЗАКРЫТЬ), DELETE (УДАЛИТЬ), OPEN (ОТК­РЫТЬ), READ (ЧИТАТЬ), START (ПОДВЕСТИ), USE (ИС­ПОЛЬЗОВАТЬ) и WRITE (ПИСАТЬ).

  1. Понятия языка

    1. Организация

Файл с индексной организацией — это файл массовой памяти, доступ к записям которого может осуществляться с помощью ука­занного в записи ключа.

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

Каждый индексный файл имеет основной индекс, представляю­щий основной ключ каждой записи файла. Каждая запись вклю­чается в файл, изменяется или удаляется из файла в зависимости от значения основного ключа записи. Каждый основной ключ за­писи должен быть уникальным и неизменяемым при изменении за­писи.

Основной ключ записи описывается во фразе RECORD KEY (КЛЮЧ ЗАПИСИ) статьи управления файлом для данного файла.

Дополнительные ключи записи обеспечивают дополнитель­ные средства доступа к записям файла. Эти ключи именуются во фразе ALTERNATE RECORD KEY (ДОПОЛНИТЕЛЬНЫЙ КЛЮЧ ЗАПИСИ) статьи управления файлом. Значение допол­нительного ключа записи может дублироваться. Когда эти зна­чения не уникальны, во фразе ALTERNATE RECORD KEY (ДО­ПОЛНИТЕЛЬНЫЙ КЛЮЧ ЗАПИСИ) указывается фраза DUPLICATES (С ДУБЛИРОВАНИЕМ).

  1. Методы доступа

При индексной организации порядок последовательного досту­па является возрастающим на основе значения ключа ссылки сог­ласно основной последовательности файла. Любой ключ, соответ­ствующий файлу, может во время обработки файла устанавливать­ся как ключ ссылки. [Порядок доступа к множеству записей, име­ющих неуникальные значения ключей ссылки, является перво­начальным порядком помещения записей в множество. Для ус­тановки в индексном файле начальной точки для последователь­ности последовательных обращений может использоваться опе­ратор START (ПОДВЕСТИ).

При произвольном доступе к файлу операторы ввода-вывода применяются для доступа к записям в порядке, указанном прог­раммистом.

При индексной организации программист указывает требуемую запись, помещая значение одного из ее ключей записи в данное, представляющее ключ записи или дополнительный ключ записи.

При динамическом доступе программист может произвольно переходить от последовательного доступа к произвольному и наоборот, применяя соответствующие формы операторов1 ввода- вывода.

  1. У к а з а т е л ь позиции файла

Указатель позиции файла — это логическое понятие, использу­емое в этом документе для облегчения точной спецификации сле­дующей записи, к которой должен осуществляться доступ при вы­полнении заданной последовательности операций ввода-вывода.

На установку указателя позиции файла влияют только операторы CLOSE (ЗАКРЫТЬ), OPEN (ОТКРЫТЬ), READ (ЧИТАТЬ) Jh START (ПОДВЕСТИ) (. Понятие указателя позиции файла не имеет смысла для файла, открытого как выходной | или как до-| полняемый.

  1. С о с т о я н и е ввода-вы вода

Состояние ввода-вывода — это логическое понятие, характе­ризующееся двухсимвольным значением, которое устанавливает­ся для указания состояния операции ввода-вывода во время выпол­нения операторов 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 (ИС­ПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБ­КИ), или, если ни одна такая процедура не применима, после за­вершения стандартной системной процедуры обработки ошибок ввода-вывода.

Состояние ввода-вывода задает одно из следующих условий, возникающих после завершения операции ввода-вывода:

  1. Успешное завершение. Оператор ввода-вывода выполнил­ся успешно;В конце. Оператор последовательного чтения был выполнен неуспешно из-за того, что возникло условие конца файла;

  2. Ошибка ключа. Оператор ввода-вывода выполнен неуспеш­но из-за того, что возникло условие ошибки ключа;

  3. Постоянная ошибка. Оператор ввода-вывода выполнен не­успешно в результате ошибки, которая исключает дальнейшую об­работку файла. Выполняются все заданные процедуры обработки ошибочных ситуаций. Условие постоянной ошибки остается дейст­вующим на все последующие операции ввода-вывода файла до тех пор, пока не будут вызваны определенные реализацией средства для устранения условия постоянной ошибки;

  4. Логическая ошибка. Оператор ввода-вывода выполнен не­успешно из-за недопустимой последовательности операций ввода- вывода, выполняемых над файлом, или в результате нарушения ограничений, заданных пользователем;

  5. Ошибка, определяемая реализацией. Оператор ввода-вы­вода выполнен неуспешно в результате возникновения условия, оп­ределенного реализацией.

Ниже приводится список значений, помещаемых в состояние ввода-вывода для перечисленных выше условий, возникающих в результате выполнения операций ввода-вывода для индексного файла. Если применимо более одного значения, значение, которое помещается в состояние ввода-вывода, определяется реализацией.

  1. Успешное завершение

  1. Состояние ввода-вывода=00. Оператор ввода-вывода вы­полнился успешно и нет никакой другой доступной информации об операции ввода-вывода.

  2. Состояние ввода-вывода = 02. Оператор ввода-вывода успеш­но выполнился, но обнаружено дублирование ключа.

  1. Для оператора READ (ЧИТАТЬ) значение ключа для теку­щего ключа ссылки равно значению такого же ключа в следую­щей записи в текущем ключе ссылки.

  2. Для оператора REWRITE (ОБНОВИТЬ) или WRITE (ПИСАТЬ) только что записанная запись создает дублирующе­еся значение ключа хотя бы для одного дополнительного ключа записи, для которого дублирование разрешено.

  1. Состояние ввода-вывода = 04. Оператор READ (ЧИТАТЬ) выполнился успешно, но длина обрабатываемой записи не соответ­ствует фиксированным свойствам этого файла.

  2. Состояние ввода-вывода = 05. Оператор OPEN (ОТК­РЫТЬ) успешно выполнился, но указанный в нем необязатель­ный файл во время выполнения оператора OPEN (ОТКРЫТЬ) отсутствует. Если режим открытия для ввода-вывода или допол­нения, файл будет создаваться.

  1. Условие «в конце» с неуспешным завершением

а) Состояние ввода-вывода = 10. Делается попытка выполнять последовательный оператор READ (ЧИТАТЬ), а в файле не су­ществует следующей логической записи из-за того, что:

  1. достигнут конец файла;

  2. делается попытка выполнить последовательный оператор READ (ЧИТАТЬ) в первый раз для отсутствующего необяза­тельного входного файла.

  1. Условие ошибки ключа при неуспешном завершении

  1. Состояние ввода-вывода = 21. Ошибка в последовательности при последовательном доступе к индексному файлу. Нарушено требование возрастающей последовательности значений ключа записи или значение основного ключа записи изменилось между успешным выполнением оператора READ (ЧИТАТЬ) и выполне­нием следующего оператора REWRITE (ОБНОВИТЬ) для этого файла (п. 4.9 настоящей части).

  2. Состояние ввода-вывода = 22. Сделана попытка обновить или записать запись, которая создает дублирующийся основной ключ записи |или дублирующийся дополнительный ключ записи без I фразы DUPLICATES (С ДУБЛИРОВАНИЕМ) в индексном I файле.

  3. Состояние ввода-вывода = 23. Это условие возникает, если:

  1. сделана попытка произвольного доступа к записи, которой нет в файле; или ___

  2. сделана попытка выполнить оператор START (ПОДВЕС­ТИ) или READ (ЧИТАТЬ) с произвольным доступом для не­обязательного входного файла, который отсутствует.

  1. Состояние ввода-вывода = 24. Сделана попытка занесения за­писей в индексный файл вне его границ, определенных внешним об­разом. Способ определения границ указывается реализацией.

  1. Условие постоянной ошибки с неуспешным завершением

  1. Состояние ввода-вывода = 30. Возникла постоянная ошибка и нет никакой другой доступной информации об операции ввода- вывода.

  2. Состояние ввода-вывода = 35. Постоянная ошибка возникла из-за того, что делается попытка выполнить оператор OPEN (ОТ­КРЫТЬ) с фразой INPUT (ВХОДНОЙ), 1-0 (ВХОДНОЙ-ВЫ- ХОДНОЙ) |или EXTEND (ДОПОЛНЯЕМЫЙ)! для файла, ко­торый обязательно должен присутствовать, но не присутствует.Состояние ввода-вывода = 37. Постоянная ошибка возникла из-за того, что оператор OPEN (ОТКРЫТЬ) выдан для файла, ко­торый не поддерживает режим открытия, заданный в операторе OPEN (ОТКРЫТЬ). Возможны следующие нарушения:

  1. задана фраза | EXTEND"(ДОПОЛНЯЕМЫЙ) или | OUT­PUT (ВЫХОДНОЙ), а файл не допускает операций записи;

  2. задана фраза 1-0 (ВХОДНОЙ-ВЫХОДНОЙ), а файл не до­пускает операции ввода и вывода, которые разрешены для индекс­ного файла, открываемого в режиме ввода-вывода;

  3. задана фраза INPUT (ВХОДНОЙ), а файл не допускает операции чтения.

І


г) Состояние ввода-вывода = 38. Постоянная ошибка возник­ла из-за того, что выдан оператор OPEN (ОТКРЫТЬ) для фай­ла, ранее закрытого с замком.

д) Состояние ввода-вывода = 39. Оператор OPEN (ОТК­РЫТЬ) завершился неуспешно из-за обнаруженного для этого файла несоответствия фиксированных свойств файла и свойств, заданных в программе.

(5) Условие логической ошибки с неуспешным завершением