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

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

  2. при I динамическом или j произвольном доступе значение ос­новного ключа заменяемой записи не равно значению основного ключа ни для одной существующей записи файла;

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

  1. Если возникает условие ошибки ключа, выполнение опе­ратора REWRITE (ОБНОВИТЬ) неуспешное, операция обновле­ния не производится, данные в области записи не изменяются, а состоянию ввода-вывода для имени-файла, соответствующего име- ни-записи-1, присваивается значение, указывающее на причину возникновения ситуации (см. п. 1.3.4 настоящей части)

4.7. Оператор START (ПОДВЕСТИ)

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

Оператор START (ПОДВЕСТИ) предоставляет возможность логического позиционирования индексного файла для дальней­шего последовательного извлечения записей.



ST

4.7.2. (

ART и

KEY

Эбщий формат ия-файла-1

IS EQUAL ТО

IS =

IS GREATER THAN

IS >

IS NOT LESS THAN

имя-данного-1



IS NOT <

IS GREATER THAN OR EQUAL TO

IS > =




[INVALID KEY повелительный-оператор-1] [NOT INVALID KEY повелительный-оператор-2] [END-START]

ПОДВЕСТИ ЗАПИСЬ имя-файла-1


РАВЕН >


ключ

БОЛЬШЕ

НЕ МЕНЬШЕ

имя-данного-1



НЕ <

БОЛЬШЕ ИЛИ РАВЕН



[ПРИ ОШИБКЕ КЛЮЧА повелительный-оператор-1] [БЕЗ ОШИБКИ КЛЮЧА повелительный-оператор-2] [ КОНЁЦЛТО ДВЕСТИ ]

  1. Синтаксические правила

  1. Имя-файла-1 должно быть именем файла с последова­тельным или динамическим доступом.

  2. Имя-данного-1 может уточняться.

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

  1. Если задана фраза KEY (КЛЮЧ), имя-данного-1 долж­но ссылаться:либо на данное, описанное как ключ записи имени-фай- ла-1 (см. пи. 2.5, 2.7 настоящей части);

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

  1. Общие правила

  1. Файл, представленный именем-файла-1, ко времени вы­полнения оператора START (ПОДВЕСТИ) должен быть открыт для ввода или ввода-вывода (см. п. 4.4 настоящей части).

  2. Если фраза KEY (КЛЮЧ) не указана, подразумевается знак отношения EQUAL (РАВЕН).

  3. Выполнение оператора START (ПОДВЕСТИ) не изме­няет ни содержимое области записи, ни содержимое данного, представленного именем-данного, указанным во фразе DEPEN­DING ON (В ЗАВИСИМОСТИ ОТ) фразы RECORD (В ЗАПИ­СИ), относящейся к имени-файла-1.

  4. Сравнение, определяемое знаком отношения во фразе KEY (КЛЮЧ), проводится между ключом записи файла, пред­ставленного именем-файла-1, и данным, как указано в общих правилах (И) и (12).

Сравнение производится относительно возрастания ключей ссылки в соответствии с основной последовательностью для фай­ла. Если операнды сравнения неодинакового размера, сравне­ние производится так, как если бы более длинный операнд усе­кался справа до размера более короткого. .Все другие правила нечислового сравнения остаются в силе (см. ч. 4, п. 6.3.1.1.2).

  1. Указателю позиции файла присваивается значение ключа ссылки первой из логических записей, ключ которых удовлетво­ряет сравнению.

  2. Если сравнение не удовлетворяется ни для одной записи файла, возникает условие ошибки ключа, и выполнение опера­тора START (ПОДВЕСТИ) считается неуспешным.

  1. При выполнении оператора START (ПОДВЕСТИ) об­новляется значение состояния ввода-вывода, относящегося к имени-файла-1 (см. п. 1.3.4 настоящей части).

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

  3. Передача управления после успешного или неуспешного выполнения оператора START (ПОДВЕСТИ) зависит от нали­чия или отсутствия необязательных фраз INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) и NOT INVALID KEY (БЕЗ ОШИБКИ

КЛЮЧА) в операторе START (ПОДВЕСТИ) (см. п. 1.3.5 нас­тоящей части).

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

  2. Фраза END-START (КОНЕЦ-ПОДВЕСТИ) ограничи­вает область действия оператора START (ПОДВЕСТИ) (см. ч. 4, п. 6.4.3).

  3. Ключ ссылки устанавливается следующим образом:

  1. если фраза KEY (КЛЮЧ) не задана, основной ключ, за­данный для имени-файла-1, становится ключом ссылки;

  2. если фраза KEY (КЛЮЧ) задана и имя-данного-1 задано в качестве ключа для имени-файла-1, этот ключ записи стано­вится ключом ссылки;

  3. если фраза KEY (КЛЮЧ) задана, а имя-данного-1 не за­дано в качестве ключа для имени-файла-1, ключом ссылки ста­новится ключ записи, самая левая литера которого соответству­ет самой левой литере данного, заданного именем-данного-1.

Этот ключ ссылки используется для установления упорядо­чивания записей для этого оператора START (ПОДВЕСТИ), см. общее правило (4); и если выполнение оператора START (ПОДВЕСТИ) успешное, ключ ссылки используется для пос­ледующих операторов READ (ЧИТАТЬ) последовательного чте­ния (см. п. 4.5 настоящей части).

  1. Если фраза KEY (КЛЮЧ) задана, сравнение, описан­ное в общем правиле (4), использует данное, заданное именем- данного-1.

  2. Если фраза KEY (КЛЮЧ) не задана, сравнение, опи­санное в общем правиле (4), использует данное, заданное во фразе RECORD KEY (КЛЮЧ ЗАПИСИ), соответствующей имени-файла-1.

  1. Оператор USE (ИСПОЛЬЗОВАТЬ)

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

Оператор USE (ИСПОЛЬЗОВАТЬ) определяет процедуры об­работки ошибок ввода-вывода дополнительно к стандартным про­цедурам, предоставляемым системой управления вводом-выводом.

  1. Общий формат

USE AFTER STANDARD J } PROCEDURE ON

( ERROR I

1 {имя-файла-1} | ...]

INPUT

OUTPUT

1-0

EXTEND

ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ

ОШИБКИ

{имя-файла-1} . . . ВХОДНЫХ ВЫХОДНЫХ ВХОДНЫХ-ВЫХОДНЫХ

ДОПОЛНЯЕМЫХ

  1. С и н т а к с и ч е с к и е правила

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

  2. Сам оператор USE (ИСПОЛЬЗОВАТЬ) никогда не выпол­няется; он только определяет условия, вызывающие выполнение указанных после него процедур.

  3. Появление имени-файла-1 в операторе USE (ИСПОЛЬЗО­ВАТЬ) не должно требовать одновременного выполнения более чем одной декларативной секции.

  4. Слова ERROR и EXCEPTION являются синонимами и взаи­мозаменяемы.

  5. Файлы, к которым явно или неявно обращаются в операто­ре USE (ИСПОЛЬЗОВАТЬ), могут иметь различную организацию или доступ.

  6. Каждая из фраз INPUT (ВХОДНЫХ), OUTPUT (ВЫХОД­НЫХ), 1-0 (ВХОДНЫХ-ВЫХОДНЫХ) и EXTEND (ДОПОЛНЯ- ЕМЫХ)| может указываться лишь раз в декларативной части раз­дела процедур.

  1. Общие правила

Декларативные процедуры могут быть включены в любую

исходную Кобол-программу, независимо от того, содержит ли эта программа другую программу или сама содержится в другой про­грамме. Декларатива вызывается тогда, когда во время выполне­ния программы выполняются условия, описанные в операторе USE (ИСПОЛЬЗОВАТЬ), предшествующем декларативе. Только одна декларатива внутри отдельно скомпилированной программы, со­держащей оператор, который вызвал уточняющее условие, вызы­вается тогда, когда выполняется какое-либо из условий, описанных в операторе USE (ИСПОЛЬЗОВАТЬ), предшествующем деклара­тиве, во время выполнения программы. Если не существует уточ­няющей декларативы в отдельно скомпилированной программе, то декларатива не выполняется.

  1. Внутри декларативной процедуры не должно быть обраще­ний к каким-либо процедурам в недекларативной части раздела процедур.

  2. К именам процедур, связанных с оператором USE (ИС­ПОЛЬЗОВАТЬ), могут быть обращения в другой декларативной секции или в недекларативной процедуре только оператором PE­RFORM (ВЫПОЛНИТЬ).

  3. Когда имя-файла-1 описано явно, то к имени-файла-1 не применяется никаких других операторов USE (ИСПОЛЬЗО­ВАТЬ).

  4. Процедуры, связанные с оператором USE (ИСПОЛЬЗО­ВАТЬ), выполняются системой управления вводом-выводом после завершения стандартной программы ошибки ввода-вывода при-не- успешном выполнении операции ввода-вывода, если не сработают фразы AT END (В КОНЦЕ) или INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА).

При выполнении процедуры соблюдаются следующие правила: а) если указано имя-файла-1, то соответствующая процедура выполняется при выполнении условия, описанного в операторе USE (ИСПОЛЬЗОВАТЬ);

  1. если указано INPUT (ВХОДНЫХ), то соответствующая про­цедура выполняется при выполнении условия, описанного в опера­торе USE (ИСПОЛЬЗОВАТЬ), для какого-либо файла, открытого для ввода, или в процессе открытия для ввода, за исключением файлов, указанных именем-файла-1 в другом операторе USE (ИС­ПОЛЬЗОВАТЬ), описывающем такое же условие;

  2. если указано OUTPUT (ВЫХОДНЫХ), то соответствующая процедура выполняется при выполнении условия, описанного в операторе USE (ИСПОЛЬЗОВАТЬ), для какого-либо файла, от­крытого для вывода, или в процессе открытия для вывода за исклю­чением файлов, указываемых именем-файла-1 в другом операторе USE (ИСПОЛЬЗОВАТЬ), описывающем такое же условие;

  3. если указано 1-0 (ВХОДНЫХ-ВЫХОДНЫХ), то соответст­вующая процедура выполняется при выполнении условия, описан- ного в операторе USE (ИСПОЛЬЗОВАТЬ), для какого-либо фай­ла, открытого для ввода-вывода, или в процессе открытия для вво­да-вывода, за исключением файлов, указанных именем-файла-1 в другом операторе USE (ИСПОЛЬЗОВАТЬ), описывающем такое же условие;

  4. если указано EXTEND (ДОПОЛНЯЕМЫХ), то соответ­ствующая процедура выполняется при выполнении условия, опи­санного в операторе USE (ИСПОЛЬЗОВАТЬ), для какого-либо файла, открытого для дополнения, за исключением файлов, ука­занных именем-файла-1 в другом операторе USE (ИСПОЛЬ­ЗОВАТЬ), описывающем такое же условие.

  1. После выполнения процедуры, связанной с оператором USE (ИСПОЛЬЗОВАТЬ), управление передается вызывающей прог­рамме в системе управления вводом-выводом. Если значение сос­тояния ввода-вывода не указывает на критическую ошибку ввода- вывода, то система управления вводом-выводом возвращает управ­ление оператору, следующему за оператором ввода-вывода, вы­полнение которого вызвало ошибку. Если значение состояния вво­да-вывода указывает на критическую ошибку, то действие опреде­ляется реализацией (см. п. 1.3.4 настоящей части).

  2. В процедуре, связанной с оператором USE (ИСПОЛЬЗО­ВАТЬ), не должны выполняться никакие операторы, которые мо­гут потребовать выполнения процедуры USE (ИСПОЛЬЗОВАТЬ), вызванной ранее и еще не вернувшей управление вызвавшей ее программе.

  1. Оператор WRITE (ПИСАТЬ)

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

Оператор WRITE (ПИСАТЬ) включает логическую запись в выходной или входной-выходной файл.

  1. Общий формат

WRITE имя-записи-1 (FROM идентификатор-1]

[INVALID KEY повелительный-оператор-1]

[NOT INVALID KEY повелительный-оператор-2]

[END^WRITE]~

ПИСАТЬ имя-записи-1 [ИЗ ПОЛЯ идентификатор-1]

[ПРИ ОШИБКЕ КЛЮЧА повелительный-оператор-1]

[БЕЗ ОШИБКИ КЛЮЧА повелительный-оператор-2]

[КОНЕЦ-ПИСАТЬ]

  1. Синтаксические правила

  1. Имя-записи-1 и идентификатор-1 не должны относиться к одной и той же области памяти.

  2. Имя-записи-1 является именем логической записи в секции файлов раздела данных и может быть уточнено.

  3. Фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) должна указываться в операторе WRITE (ПИСАТЬ) для файлов, для ко­торых не определена соответствующая процедура USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАН­ДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ).

4.9:4. О б щ и е правила

  1. Файл, указанный именем-файла, связанным с именем-запи- СИ-1, должен быть открыт как ВЫХОДНОЙ, ВХОДНОЙ-ВЫХОДНОЙ ] или дополняемый ко времени выполнения этого оператора (см. п. 4.4 настоящей части).

  2. Логическая запись, включаемая в файл при успешном вы­полнении оператора WRITE (ПИСАТЬ), становится недоступной в области записи. | Исключение представляют случаи, когда имя- файла, связанное с именем-записи-1, указано в фразе SAME RECORD AREA (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ). Если имя от­носится к имени-файла, указанному во фразе SAME RECORD AREA (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ), логическая запись дос­тупна программе и как запись файла, связанного с именем-за­писи-1, и как запись других файлов, указанных в той же фразе SAME RECORD AREA (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ), что и соответствующий выходной файл.

  3. Результат выполнения оператора WRITE (ПИСАТЬ) с фразой FROM (ИЗ ПОЛЯ) эквивалентен выполнению следующих операторов в указанном порядке: