ГОСТ 22558-89 сторінка 68 з 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, должно быть не больше, чем наибольшее, и не меньше, чем наименьшее число позиций литер, определенное фразой RECORD 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 (ПОДВЕСТИ) не изменяет ни содержимое области записи, ни содержимое данного, представленного именем-данного, указанным во фразе DEPENDING 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 (ИСПОЛЬЗОВАТЬ) должен непосредственно следовать за заголовком секции декларативной части раздела процедур и должен быть единственным в предложении. Остальная часть декларативной секции должна состоять из одного или более процедурных параграфов, определяющих процедуры, которые должны использоваться.
Побачили розбіжність з офіційним текстом?