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

Если указана фраза EXTEND (ДОПОЛНЯЕМЫЙ), опе­ратор OPEN (ОТКРЫТЬ) устанавливает файл непосредственно после его последней логической записи.

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

Если задана фраза EXTEND (ДОПОЛНЯЕМЫЙ) и фраза LABEL (МЕТКИ) указывает, что записи меток присутст­вуют, выполнение оператора OPEN (ОТКРЫТЬ) включает сле­дующие действия:

начальные метки файла обрабатываются только для од­нокатушечных или однотомных файлов;

начальные метки катушки (тома) обрабатываются на последней катушке (томе), как если бы файл открывался как INPUT (ВХОДНОЙ);

имеющиеся конечные метки файла обрабатываются, как ' если бы файл открывался как INPUT (ВХОДНОЙ). Затем эти метки удаляются;

затем обработка продолжается, как если бы файл был открыт как OUTPUT (ВЫХОДНОЙ).

Оператор OPEN (ОТКРЫТЬ) с фразой 1-0 (ВХОДНОЙ- ВЫХОДНОЙ) должен относиться к файлу, поддерживающему операции ввода и вывода, допустимые для индексного файла, от­крытого для ввода-вывода. Выполнение оператора OPEN (ОТК­РЫТЬ) с фразой 1-0 (ВХОДНОЙ-ВЫХОДНОЙ) подготавливает файл, на который он ссылается, как для операций ввода, так и для операций вывода.

Если указана фраза 1-0 (ВХОДНОЙ-ВЫХОДНОЙ) и во фразе LABEL RECORDS (МЕТКИ) указано, что записи меток при­сутствуют, выполнение оператора OPEN (ОТКРЫТЬ) включает следующие шаги:

проверку меток в соответствии с процедурами, определенны­ми реализацией для проверки входных-выходных меток;

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

Для необязательного файла, являющегося недоступным, успешное выполнение оператора OPEN (ОТКРЫТЬ) с фразами 1-0 (ВХОДНОЙ-ВЫХОДНОЙ) І їїіїГ^хтешУТдополняе- 'ЖпдГ) приводит к созданию файла. Это создание происходит так, как если бы в указанном порядке выполнялись следующие операторы:

OPEN OUTPUT имя-файла.

CLOSE имя-файла.

ОТКРЫТЬ ВЫХОДНОЙ имя-файла.

ЗАКРЫТЬ имя-файла.

За этими операторами следует выполнение оператора OPEN (ОТКРЫТЬ), указанного в исходной программе.

Успешное выполнение оператора OPEN (ОТКРЫТЬ) с фразой OUTPUT (ВЫХОДНОЙ) приводит к созданию файла, после кото­рого этот файл не содержит записей.

Во время выполнения оператора OPEN (ОТКРЫТЬ) об­новляется значение состояния ввода-вывода, связанного с именем- файла (см. п. 1.3.4 настоящей части).

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

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

4.5. Оператор READ (ЧИТАТЬ)

Назначение

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

Общий формат

Формат 1

READ имя-файла-1 [NEXT] RECORD [INTO

идентификатор-1]

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

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

[END-READ]-

ЧИТАТЬ [СЛЕДУЮЩУЮ] [ ЗАПИСЬ имя-файла-1

[В идентификатор-1]

[В КОНЦЕ повелительный-оператор-1 ]

[НЕ В КОНЦЕ повелительный-оператор-2]

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

Формат 2

READ имя-файла-1 RECORD [INTO идентификатор-1

I [KEY IS имя-данного-1]

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

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

[ENDURE AD]

ЧИТАТЬ ЗАПИСЬ имя-файла-1 [В идентификатор-1]

[КЛЮЧ имя-данного-1]

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

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

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

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

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

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

Формат 1 должен использоваться для всех файлов с после­довательным доступом.

Фраза NEXT (СЛЕДУЮЩУЮ) должна быть указана для файлов с динамическим доступом, если записи файла долж­ны извлекаться последовательно.

Формат 2 используется для файлов с произвольным досту­пом или для файлов с динамическим доступом}, если записи дол­жны извлекаться произвольно.

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

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

Во время выполнения оператора READ (ЧИТАТЬ) файл, на который ссылается имя-файла-1, должен быть открыт как вход­ной или входной-выходной (см. п. 4.4 настоящей части).

Для файлов последовательного доступа фраза NEXT (СЛЕДУЮЩУЮ) является необязательной и не влияет на вы­полнение оператора READ (ЧИТАТЬ).

При выполнении оператора READ (ЧИТАТЬ) обновляется значение состояния ввода-вывода, связанного с именем-файла-1 (см. п. 1.3.4 настоящей части).

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

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

Если указатель позиции файла указывает, что не установле­на следующая запись, выполнение оператора READ (ЧИТАТЬ) является неуспешным..

Если указатель позиции файла указывает, что необяза­тельного входного файла нет, оператор выполняется согласно общему правилу (10).

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

Если указатель позиции файла был установлен предыдущим оператором READ (ЧИТАТЬ) и текущий ключ ссылки не допус­кает дублирование , выбирается первая имеющаяся запись в этом файле, значение ключа которой больше или равно указателю позиции файла.

д. Если указатель позиции файла был установлен преды­дущим оператором READ (ЧИТАТЬ) и текущий ключ ссылки допускает дублирование, выбирается первая запись в файле, значение ключа которой либо равно указателю позиции файла и логическая позиция которой во множестве дубликатов следует сразу после записи, которая стала доступной благодаря преды­дущему оператору READ (ЧИТАТЬ), либо значение ключа ко­торой больше чем указатель позиции файла.

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

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

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

Функционирование оператора READ (ЧИТАТЬ) не зависит от метода, используемого для согласования времени доступа со временем обработки; запись доступна объектной программе до выполнения повелительного-оператора-2 или повелительного-опе- ратора-4, если они указаны, или до выполнения любого.оператора, следующего за оператором READ (ЧИТАТЬ), если ни повелитель- ный-оператор-2, ни повелительный-оператор-4 не указаны.

Когда логические записи описаны более чем одной статьей описания записи, эти записи автоматически используют одну и ту же область памяти; это эквивалентно неявному переопределению области. По завершении оператора READ (ЧИТАТЬ) значения всех данных, находящихся вне диапазона текущей записи данных, не определены.

Фраза INTO (В) может быть указана в операторе READ (ЧИТАТЬ), если:

только одно описание записи подчиняется статье описания файла;

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

(8) Результат выполнения оператора READ (ЧИТАТЬ) с фра­зой INTO (В) эквивалентен применению следующих правил в ука­занном порядке:

выполняется тот же оператор READ (ЧИТАТЬ) без фразы INTO (В);

текущая запись пересылается из области записи в область, указываемую идентификатором-1, в соответствии с правилами для оператора MOVE (ПОМЕСТИТЬ) без фразы CORRESPON­DING (СООТВЕТСТВЕННО). Размер текущей записи определя­ется: правилами, указанными для фразы RECORD (В ЗАПИСИ). Если статья описания файла содержит фразу RECORD IS VARYING (В ЗАПИСИ ПЕРЕМЕННОЕ ЧИСЛО ЛИТЕР), не­явная пересылка является групповой. | Неявный оператор MOVE (ПОМЕСТИТЬ) не выполняется, если выполнение оператора READ (ЧИТАТЬ) было неуспешным. Индексы, связанные с иден­тификатором-1, вычисляются после того, к&к запись была прочита­на и непосредственно перед ее пересылкой в данное. Запись дос­тупна в области записи и в данном, на которое ссылается иденти­фикатор-1.

Если во время выполнения оператора READ (ЧИТАТЬ) формата 2 указатель позиции файла указывает, что нет необя­зательного входного файла, возникает условие ошибки ключа, а выполнение оператора READ (ЧИТАТЬ) является неуспешным (см. ч. 8, п. 1.3.5).

При использовании формата 1 оператора READ (ЧИ­ТАТЬ), если указатель позиции файла показывает, что не сущест- вует последующей логической записи, [ или что необязательный входной файл отсутствует, | имеет место в соответствии с указан­ной последовательностью следующее:

значение, полученное по указателю позиции файла, помеща­ется в состояние ввода-вывода, соответствующее имени-файла-1, и указывает на условие «в конце» (см. п. 1.3.4 настоящей части);

если в операторе, вызвавшем условие, задана фраза AT END (В КОНЦЕ), управление передается повелительному-оператору-1 фразы AT END (В КОНЦЕ).

Никакая процедура^ USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ), связанная с именем-файла-1 не выполняется;

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

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

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

устанавливается значение указателя позиции файла и об­новляется значение состояния ввода-вывода, связанного с именем- файла-1;

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

если условие особой ситуации не существует, запись стано­вится доступной в области записи и выполняются любые неявные пересылки, предопределенные фразой INTO (В). Управление пе­редается в точку выхода оператора READ (ЧИТАТЬ) или повели- тельному-оператору-2, если он указан. В последнем случае выпол­нение продолжается согласно правилам для операторов, указанных в повелительном-операторе-2. Если выполняется ветвление про­цедуры или условный оператор, вызывающие явную передачу уп­равления, оно передается в соответствии с правилами для этих операторов; в противном случае после завершения выполнения по- велительного-оператора-2 управление передается в точку выхода оператора READ (ЧИТАТЬ).

После неуспешного выполнения оператора READ (ЧИ­ТАТЬ) содержимое соответствующей области записи не определе­но, ключ ссылки для индексного файла не определен, а указатель позиции файла показывает, что правильная следующая запись не установлена.

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

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

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

тупом этот же ключ ссылки используется для всех последующих выполнений операторов HEAD (ЧИТАТЬ) формата 1 до тех пор, пока для этого файла не будет учрежден другой ключ ссылки.

Для индексного файла , если в операторе READ (ЧИ­ТАТЬ) формата'2 не указан вариант KEY (КЛЮЧ),/ в качестве ключа ссылки прй извлечении записи учреждается основной ключ записи. [ Для файла с динамическим доступом этот же ключ ссыл­ки используется для всех последующих выполнений оператора READ (ЧИТАТЬ) формата 1 до тех пор, пока для этого файла не будет учрежден другой ключ ссылки.

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

При использовании дополнительного ключа в случае дуб­лирующихся значений первой найденной записью будет первая запись в последовательности дубликатов, которые были переда­ны системе управления массовой памятью. | Найденная таким образом запись становится доступной в области записи, соответст­вующей имени-файла-1. Если таким образом не удается найти ни одной записи, возникает условие ошибки ключа, и выполнение опе­ратора READ (ЧИТАТЬ) считается неуспешным (см. п. 1.3.5 нас­тоящей части).

Если число позиций литер в прочитанной записи меньше минимального размера, указанного статьями описания записей для имени-файла-1, участок области записи, находящийся справа от последней прочитанной литеры, не определен. Если число пози­ций литер в прочитанной записи больше максимального размера, указанного статьями описания записей для имени-файла-1, запись усекается справа до максимального размера. В обоих случаях вы­полнение оператора. READ (ЧИТАТЬ) считается успешным, а сос­тояние ввода-вывода указывает, что возникло несоответствие дли­ны записи (см. п. 1.3.4 настоящей части).

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

4.6. Оператор REWRITE (ОБНОВИТЬ)

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

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

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

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

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

Весь розділ →