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

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

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

Основной ключ записи описывается во фразе 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"(ДОПОЛНЯЕМЫЙ) или | OUT­PUT (ВЫХОДНОЙ), а файл не допускает операций записи;

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

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

І


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

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

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

Состояние ввода-вывода = 41. Оператор OPEN (ОТКРЫТЬ) выдан для открытого файла.

Состояние ввода-вывода = 42. Оператор CLOSE (ЗАКРЫТЬ) выдан для неоткрытого файла.

Состояние ввода-вывода = 43. При последовательном дос­тупе последний оператор ввода-вывода, выполненный для файла до выполнения оператора DELETE (УДАЛИТЬ) или REWRITE (ОБ­НОВИТЬ), не является успешно выполненным оператором READ (ЧИТАТЬ).

Состояние ввода-вывода = 44. Нарушение границ возникает по следующим причинам:

совершена попытка записать или обновить запись, которая длиннее максимально допустимой или короче минимально до­пустимой в соответствии с фразой RECORD IS VARYING (В ЗАПИСИ ПЕРЕМЕННОЕ ЧИСЛО), связанной с именем фай­ла;

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

Состояние ввода-вывода = 46. Выдан оператор последова­тельного чтения для файла, открытого в режиме ввода или ввода- вывода и не была установлена правильная следующая запись по одной из следующих причин:

предыдущий оператор START (ПОДВЕСТИ) закончился неуспешно, или

предыдущий оператор READ (ЧИТАТЬ) закончился неус­пешно, но не вызвал условие «в конце»;

предыдущий оператор READ (ЧИТАТЬ) вызвал условие «в конце».

Состояние ввода-вывода = 47, Был выдан оператор READ (ЧИТАТЬ) или START (ПОДВЕСТИ) | для файла, не открытого в режиме ввода или ввода-вывода.

Состояние ввода-вывода = 48. Был выдан оператор WRITE (ПИСАТЬ) для файла, не открытого в режиме ввода-вывода, вы­вода |_или дополнения I

Состояние ввода-вывода = 49. Был выдан оператор DELETE (УДАЛИТЬ) или REWRITE (ОБНОВИТЬ) для файла, не откры­того в режиме ввода-вывода.

(6) Определяемое реализацией условие с неуспешным завер­шением

а) Состояние ввода-вывода = 9х. Существуют определяемые реализацией условия. Эти условия не должны дублировать ника­кие условия, определенные для значений от 00 до 49 состояния ввода-вывода. Значение х определяется реализацией.

1.3.5. У с л о в и е ошибки ключа

Условие ошибки ключа может возникнуть в результате выпол­нения операторов DELETE (УДАЛИТЬ), READ (ЧИТАТЬ), REWRITE (ОБНОВИТЬ) j, START (ПОДВЕСТИ) | или WRITE (ПИСАТЬ). Когда возникает условие ошибки ключа, оператор вво­да-вывода, вызвавший эту ситуацию, является неуспешным и файл не изменяется (пп. 4.3, 4.5—4.7, 4.9 настоящей части).

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

(1) состояние ввода-вывода определителя файла, связанного с оператором, устанавливается в значение, определяющее условие ошибки ключа (см. п. 1.3.4 настоящей части);

1 (2) если в операторе ввода-вывода указана фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА), то никакая процедура USE AFTER EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ ПРОЦЕДУРЫ ОШИБКИ), связанная с определителем файла, не выполняется, и управление передается повелительному оператору, указанному во фразе INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА). Выполнение продолжается в соответствии с правилами для каждого оператора, указанного в этом повелительном операторе. Если выполняется оператор ветвления процедуры или условный оператор, который вызывает явную передачу управления, то управление передается в

соответствии с правилами для этого оператора; в противном слу­чае после завершения выполнения повелительного оператора, ука­занного во фразе INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА), уп­равление передается в конец оператора ввода-вывода, а фраза NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА), если она указана, игнорируется;

(3) если в операторе ввода-вывода фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) не указана, то с определителем файла долж­на быть связана процедура USE AFTER EXCEPTION (ИСПОЛЬ­ЗОВАТЬ ПОСЛЕ ПРОЦЕДУРЫ ОШИБКИ), и эта процедура вы­полняется, а управление передается в соответствии ,с правилами оператора USE (ИСПОЛЬЗОВАТЬ). Если указана фраза NOT NIVALID KEY (БЕЗ ОШИБКИ КЛЮЧА), то она игнорируется (п. 4.8 настоящей части).

Если после выполнения операции ввода-вывода, указанной в операторе ввода-вывода, условия ошибки ключа нет, то фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА), если она указана, иг­норируется. Состояние ввода-вывода определителя файла, связан­ного с оператором, обновляется, и выполняются следующие дейст­вия:

если возникает условие ошибки, которое не является усло­вием ошибки ключа, то управление передается в соответствии с правилами оператора USE (ИСПОЛЬЗОВАТЬ), а затем выпол­няется процедура USE AFTER EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ ПРОЦЕДУРЫ ОШИБКИ), связанная с определителем файла (п. 4.8 настоящей части);

если условие ошибки не возникает, то управление передает­ся в конец оператора ввода-вывода или повелительному оператору, указанному во фразе NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮ­ЧА). В последнем случае выполнение продолжается в соответст­вии с правилами для каждого оператора, указанного в повелитель­ном операторе. Если это оператор ветвления процедуры или ус­ловный оператор, который вызывает явную передачу управления, то управление передается в соответствии с правилами для этого оператора; в противном случае, после завершения выполнения по­велительного оператора, указанного во фразе NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА), управление передается в конец опера­тора ввода-вывода.

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

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

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

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

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

Весь розділ →