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

Назначение

Оператор REWRITE (ОБНОВИТЬ) логически заменяет запись в файле на устройстве массовой памяти.

Общий формат

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

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

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

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

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

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

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

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

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

4.6;4. Общие правила

Файл, связанный с именем-записи-1, должен быть файлом массовой памяти и должен быть открыт как входной-выходной во время выполнения этого оператора (см. п. 4.4 настоящей части).

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

На. уровне 1 число позиций литер в записи, представленной именем-записи-1, должно быть равно числу позиций литер в обнов­ляемой записи. На уровне 2 число позиций литер в записи, пред­ставленной именем-записи-1, может совпадать, а может и не сов- падать с числом позиций литер в обновляемой записи.

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

Выполнение оператора REWRITE (ОБНОВИТЬ) с фразой FROM (ИЗ ПОЛЯ) эквивалентно выполнению следующих опера­торов в указанном порядке:

оператор

MOVE идентификатор-1 ТО имя-записи-1.

ПОМЕСТИТЬ идентификатор-1 В имя-записи-1 соответственно 'правилам, описанным для оператора MOVE (ПОМЕСТИТЬ);

тот же оператор REWRITE (ОБНОВИТЬ) без фразы FROM (ИЗ ПОЛЯ).

После завершения выполнения оператора REWRITE (ОБ­НОВИТЬ) информация в области, указанной идентификатором-1, остается доступной, Даже если информация в области, указанной именем-записи-1, не является доступной), за исключением слу- I чая, определенного фразой SAME RECORD AREA (ОБЩАЯ [ОБЛАСТЬ ЗАПИСИ)'-;

Выполнение оператора REWRITE (ОБНОВИТЬ) не влияет на указатель позиции файла.

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

При выполнении оператора REWRITE (ОБНОВИТЬ) логи­ческая запись передается операционной системе.

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

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

Число позиций литер в записи, представленной именем- записи-1, должно быть не больше, чем наибольшее, и не меньше, чем наименьшее число позиций литер, определенное фразой RE­CORD IS VARYING (В ЗАПИСИ ПЕРЕМЕННОЕ ЧИСЛО ЛИ­ТЕР), относящейся к имени-файла, связанного с именем-запи­си-1. В обоих случаях выполнение оператора REWRITE (ОБ­НОВИТЬ) является неуспешным, обновление не происходит, со­держимое области записи не изменяется, а состояние ввода-вы­вода файла, связанного с именем-записи-1, становится равным значению, указывающему на причину возникновения ситуации (см. п. 1.3.4 настоящей части).

Для файла с последовательным доступом запись, которая должна быть заменена, определяется значением основного ключа. При выполнении оператора REWRITE (ОБНОВИТЬ), значение основного ключа заменяющей записи должно быть равно значению •основного ключа последней прочитанной из этого файла записи.

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

Выполнение оператора REWRITE (ОБНОВИТЬ) для записи, которая имеет дополнительный ключ, производится сле­дующим образом:

если значение конкретного дополнительного ключа не из­менилось, порядок чтения в случае, когда этот ключ является ключом ссылки, остается неизменным;

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

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

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

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

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

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

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

Назначение

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

Если задана фраза KEY (КЛЮЧ), имя-данного-1 долж­но ссылаться:

либо на данное, описанное как ключ записи имени-фай- ла-1 (см. пи. 2.5, 2.7 настоящей части);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Назначение

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

Общий формат

USE AFTER STANDARD J } PROCEDURE ON

( ERROR I

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

INPUT

OUTPUT

1-0

EXTEND

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

ОШИБКИ

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

ДОПОЛНЯЕМЫХ

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

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

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

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

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

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

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

Весь розділ →