ЧИТАТЬ j [СЛЕДУЮЩУЮ] ЗАПИСЬ имя-файла-1
[В идентификатор-1]
[В КОНЦЕ повелительный-оператор-1]
[НЕ В КОНЦЕ повелительный-оператор-2]
[КОНЕЦ-ЧИТАТЬ]
Формат 2
READ имя-файла-1 RECORD [INTO идентификатор-1]
[INVALID KEY повелительный-оператор-3]
[NOT INVALID KEY повелительный-оператор-4] [END-READ]
ЧИТАТЬ ЗАПИСЬ имя-файла-1 [В идентификатор-1]
[ПРИ ОШИБКЕ КЛЮЧА повелительный-оператор-3] [БЕЗ ОШИБКИ КЛЮЧА повелительный-оператор-4] [КОНЕЦ-ЧЙТАТЬ]
Синтаксические правила
Область памяти, связанная с идентификатором-1, и область записи, связанная с именем-файла-1, не должны быть одной п той же областью памяти.
Формат 1 должен использоваться для всех файлов с последовательным доступом.
Фраза NEXT (СЛЕДУЮЩУЮ) должна быть указана для файлов с динамическим доступом, если записи файла должны извлекаться последовательно.
Формат 2 используется для файлов с произвольным досту- пом [йди для файлов с динамическим доступом, если записи дол- | |жны извлекаться произвольно’
Фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) или фраза AT END (В КОНЦЕ) должна быть указана, если для имени- файла-1 не указана никакая применимая процедура USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ).
Общие правила
Во время выполнения оператора READ (ЧИТАТЬ) файл, на который ссылается имя-файла-1, должен быть открыт как входной или входной-выходной (см. п. 4.4 настоящей части).
Для файлов с последовательным доступом фраза NEXT (СЛЕДУЮЩУЮ) является необязательной и не оказывает влияния на выполнение оператора READ (ЧИТАТЬ).
При выполнении оператора READ (ЧИТАТЬ) обновляется значение состояния ввода-вывода, связанного с именем-файла-1 (см. п. 1.3.4 настоящей части).
Установка указателя позиции файла в начале выполнения оператора READ (ЧИТАТЬ) формата 1 используется для определения записи, которая может быть доступной согласно следующим правилам. Сравнения для записей в относительных файлах относятся к относительному номеру ключа.
Если указатель позиции файла указывает, что не установлена следующая запись, выполнение оператора READ (ЧИТАТЬ) является неуспешным.
Если указатель позиции файла указывает, | что необяза- j тельного входного файла нет, оператор выполняется согласно общему правилу (10).
Если указатель позиции файла был установлен предыдущими операторами OPEN (ОТКРЫТЬ) или START (ПОДВЕСТИ), выбирается первая существующая запись файла, относительный номер которой больше или равен указателю позиции файла.
Если указатель позиции файла установлен предыдущим оператором READ (ЧИТАТЬ), выбирается первая существующая запись файла, номер записи которой больше указателя позиции файла.
Если найдена запись, удовлетворяющая вышеприведенным правилам, она становится доступной в области записи, связанной с именем-файла-1, если только не указана фраза RELATIVE KEY (ОТНОСИТЕЛЬНЫЙ КЛЮЧ) для имени-файла-1 и число значащих цифр в относительном номере выбранной записи не больше, чем размер самого относительного ключа. В последнем случае указатель позиции файла устанавливается для индикации этого условия, а оператор выполняется согласно общему правилу (10).
Если запись, удовлетворяющая приведенным выше правилам, не найдена, то указатель позиции файла устанавливается для указания того, что не существует следующей логической записи, и выполнение продолжается согласно общему правилу (10).
Если запись доступна, указатель позиции файла устанавливается на относительный номер доступной записи.
Функционирование оператора READ (ЧИТАТЬ) не зави- сйт от метода, используемого для согласования времени доступа со временем обработки; запись доступна объектной программе до выполнения повелптельйого-оператора-2 или повелительного-опе- ратбра-4, если онй указаны, Или до выполнения любого оператора, ■следующего за оператором READ (ЧИТАТЬ), если ни повелитель- ный-оператор-2, ни повелительный-оператор-4 не указаны....
Когда логические записи описаны более чем одной статьей описания записи, эти записи автоматически используют одну и ту же область памяти; это эквивалентно неявному переопределению области. По завершении оператора READ (ЧИТАТЬ) значения всех данных, находящихся вне диапазона текущей записи данных, не определены.
Фраза INTO (В) может быть указана в операторе READ (ЧИТАТЬ), если:
только одно описание записи подчиняется статье описания ■файла;все имена-записей, связанные с именем-файла-1, и данное, на которое ссылается идентификатор-1, описывают групповое данное или элементарное буквенно-цифровое данное.
Результат выполнения оператора READ (ЧИТАТЬ) с фразой INTO (В) эквивалентен применению следующих правил в указанном порядке:
выполняется тот же оператор READ (ЧИТАТЬ) без фразы INTO (В);
текущая запись пересылается из области записи в область, указываемую идентификатором-1, в соответствии с правилами для оператора MOVE (ПОМЕСТИТЬ) без фразы CORRESPONDING (СООТВЕТСТВЕННО). Размер текущей записи определяется правилами, указанными для фразы RECORD (В ЗАПИСИ). 'Ёсли~ статья описания файла содержит фразу RECORD IS VARYING (В ЗАПИСИ ПЕРЕМЕННОЕ ЧИСЛО ЛИТЕР), неявная пересыл- ка является групповой. ! Неявный оператор MOVE (ПОМЕСТИТЬ) не выполняется, если выполнение оператора READ (ЧИ- ' ТАТЬ) было неуспешным. Индексы, связанные с идентификатором-1, вычисляются после того, как запись была прочитана и непосредственно перед ее пересылкой в данное. Запись доступна в области записи и в данном, на которое ссылается идентификатор-1,
Если во время выполнения оператора READ (ЧИТАТЬ) формата 2 указатель позиции файла указывает, что нет необязательного входного файла, возникает условие ошибки ключа, а выполнение оператора READ (ЧИТАТЬ) является неуспешным (см. п. 1.3.5 настоящей части).
Для оператора READ (ЧИТАТЬ) формата 1, если указатель позиции файла указывает, что не существует следующей логической записи или что число значащих цифр в относительном номере записибольше, чем размер самого относительного ключа, Iили что нет необязательного файла,' выполняются следующие действия в указанном порядке:
значение, полученное в результате установки указателя позиции файла, присваивается состоянию ввода-вывода, связанному с именем-файла-1, для обозначения условия конца (см. п: 1.3.4 настоящей части);
если фраза AT END (В КОНЦЕ) указана в операторе, вызвавшем это условие, управление передается повелительному-опе- ратору-1 во фразе AT END (В КОНЦЕ). Никакие процедуры USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ), связанные с именем- файла-1, не выполняются;
если фраза AT END (В КОНЦЕ) не указана, с именем-файла-1 должна быть связана процедура USE AFTER STANDARD
EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ), которая в этом случае и выполняется. Возврат из этой процедуры осуществляется к следующему после оператора READ (ЧИТАТЬ) выполнимому оператору.
Если возникает условие конца, выполнение оператора READ (ЧИТАТЬ) является неуспешным.
(И) Если во время выполнения оператора READ (ЧИТАТЬ) не возникают ни условие конца, ни условие ошибки ключа, фразы AT END (В КОНЦЕ) и INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) игнорируются, если они указаны, и выполняются следующие действия:
устанавливается значение указателя позиции файла и обновляется значение состояния ввода-вывода, связанного с именем- файла-1;
если возникает условие особой ситуации, не являющееся ни условием конца, ни условием ошибки ключа, управление передается процедуре USE AFTER EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ) согласно правилам для оператора USE (ИСПОЛЬЗОВАТЬ), применимого к имени-файла-1 (п. 4.8 настоящей части);
если условие особой ситуации не существует, запись становится доступной в области записи и выполняются любые неявные пересылки, предопределенные фразой INTO (В). Управление передается в точку выхода оператора READ (ЧИТАТЬ) или повели- тельному-оператору-2, если он указан. В последнем случае выполнение продолжается согласно правилам для операторов, указанных в повелительном-операторе-2. Если выполняется ветвление процедуры или условный оператор, вызывающий явную передачу управления, оно передается в соответствии с правилами для этих операторов, в противном случае после завершения выполнения по- велительного-оператора-2 управление передается в точку выхода оператора READ (ЧИТАТЬ).
После неуспешного завершения выполнения оператора READ (ЧИТАТЬ) содержимое соответствующей области записи не определено; указателю позиции файла присвоено значение, указывающее, что правильная следующая запись не установлена.
Для относительного файла, для которого указан динамический метод доступа, формат 1 оператора READ (ЧИТАТЬ) с фразой NEXT (СЛЕДУЮЩУЮ) указывает, что из файла будет извлекаться следующая логическая запись.
Для относительного файла, если фраза RELATIVE KEY (ОТНОСИТЕЛЬНЫЙ КЛЮЧ) указана для имени-файла-1, при выполнении оператора READ (ЧИТАТЬ) формата 1 относительный номер записи, которая становится доступной, помещается в данное относительный ключ согласно правилам для оператора MOVE (ПОМЕСТИТЬ) (см. ч. 6, п. 6.19).
Для относительного файла при выполнении оператора READ (ЧИТАТЬ) формата 2 указатель позиции файла устанавливается равным значению данного, на которое ссылается фраза RELATIVE KEY (ОТНОСИТЕЛЬНЫЙ КЛЮЧ) для файла, а запись, относительный номер записи которой равен указателю позиции файла, становится доступной в области записи, связанной с име- нем-файла-1. Если в файле нет такой записи, возникает условие ошибки ключа, и выполнение оператора READ (ЧИТАТЬ) является неуспешным (см. п. 1.3.5 настоящей части).
Если число позиций литер в прочитанной записи меньше минимального размера, указанного статьями описания записей для имени-файла-1, участок области записи, находящийся справа от последней прочитанной литеры, не определен. Если число позиций литер в прочитанной записи больше максимального размера, указанного статьями описания записей для име- нп-файла-1, запись усекается справа до максимального размера. В обоих случаях выполнение оператора READ (ЧИТАТЬ) считается успешным, а состояние ввода-вывода указывает, что возникло несоответствие длины записи (см. п. 1.3.4 настоящей части) .
Фраза END-READ (КОНЕЦ-ЧИТАТЬ) ограничивает область действия оператора READ (ЧИТАТЬ) (см. ч. 4, п. 6.4.3).
4.6. Оператор REWRITE (ОБНОВИТЬ)
Назначение
Оператор REWRITE (ОБНОВИТЬ) логически заменяет запись в файле на устройстве массовой памяти.
О б щ и й формат
REWRITE имя-записи-1 [FROM идентификатор-1 ]
[INVALID KEY повелительный-оператор-1]
[NOT INVALID KEY повелительный-оператор-2]
[END^REWRITEf
ОБНОВИТЬ имя-записи-1 [ИЗ ПОЛЯ идентификатор-1]
[ПРИ ОШИБКЕ КЛЮЧА повелительный-оператор-1]
[БЕЗ ОШИБКИ КЛЮЧА повелительный-оператор-2] [КОНЁЦ-ОБНОВИТЬ]
С и н т а к с и ч е с к и е правила
Имя-записи-1 и идентификатор-1 не должны относиться к одной и той же области памяти.
Имя-записи-1 — это имя логической записи в секции файлов раздела данных. Оно может быть уточнено.
фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) и NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА) не должна указываться в операторе REWRITE (ОБНОВИТЬ) для файлов с последовательным доступом.
Фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) должна быть указана в операторе REWRITE (ОБНОВИТЬ) для файлов с произвольным или динамическим I доступом, для которых не определена соответствующая процедура USE AFTER EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ).
О б щ и е правила
Во время выполнения этого оператора файл, связанный с именем-записи-1, должен быть файлом массовой памяти и должен быть открыт как входной-выходной (см. ч. 7, п. 4.3).
Для файлов с последовательным доступом последним оператором ввода-вывода для соответствующего файла перед выполнением оператора REWRITE (ОБНОВИТЬ) должен быть успешно выполненный оператор READ (ЧИТАТЬ). СУМП логически заменяет запись, которая была извлечена оператором READ (ЧИТАТЬ).
На уровне 1 число позиций литер в записи, представленной именем-записи-1, должно быть равно числу позиций литер в- обновляемой записи. | На уровне 2 число позиций литер в записи, I представленной именем-записи-1, может совпадать, а может и I не совпадать с числом позиций литер в обновляемой записи.
Логическая запись, включенная в файл при успешном выполнении оператора REWRITE (ОБНОВИТЬ), становится недрс- тупной в области записи, | за исключением случая, когда имя- ' файла, связанное с именем-записи-1, описано во фразе SAME RECORD AREA (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ). Логическая запись доступна программе и как запись файла, связанного с именем-записи-1, и как запись других файлов, указанных в той : же фразе SAME RECORD AREA (ОБЩАЯ ОБЛАСТЬ ЗАПИ- СИ), что и соответствующий выходной файл].
Выполнение оператора REWRITE (ОБНОВИТЬ) с фразой FROM (ИЗ ПОЛЯ) эквивалентно выполнению следующих операторов в указанном порядке:
оператор
MOVE идентификатор-1 INTO имя-записи-1
ПОМЕСТИТЬ идентификатор-1 В имя-записи-1 соответственно правилам, описанным для оператора MOVE (ПОМЕСТИТЬ);
тот же оператор REWRITE (ОБНОВИТЬ) без фразы FROM (ИЗ ПОЛЯ).После завершения выполнения оператора REWRITE (ОБНОВИТЬ) информация в области, указанной идентификатором-1, ■остается доступной, даже если информация в области, указанной им.енем-записи-1, не является доступной I ; кроме случая, опреце- I ляемого фразой SAME RECORD AREA (ОБЩАЯ ОБЛАСТЬ 1 ЗАПИСИ);; ; ’
Выполнение оператора REWRITE (ОБНОВИТЬ) не влияет на указатель позиции файла.
Выполнение оператора REWRITE (ОБНОВИТЬ) вызывает ■обновление состояния ввода-вывода для файла, связанного с именем-записи-1 (см. п. 1.3.4 настоящей части).
При выполнении оператора REWRITE (ОБНОВИТЬ) логическая запись передается операционной системе.
Передача управления после успешного или неуспешного выполнения оператора REWRITE (ОБНОВИТЬ) зависит от наличия или отсутствия в операторе REWRITE (ОБНОВИТЬ) необязательных фраз INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) и NOT INVALID KEY (БЕЗ ОШИБКИ КЛЮЧА) (см. п. 1.3.5 настоящей части).
Фраза END-REWRITE (КОНЕЦ-ОБНОВИТЬ) ограничивает область действия оператора REWRITE (ОБНОВИТЬ) (см. я. 4, п. 6.4.3).
Число позиций литер в записи, представленной именем- записи-1, должно быть не больше, чем наибольшее, и не меньше, чем наименьшее число позиций литер, определенное фразой RECORD IS VARYING (В ЗАПИСИ ПЕРЕМЕННОЕ ЧИСЛО ЛИТЕР), относящейся к имени-файла, связанного с именем-за- писи-1. В обоих случаях выполнение оператора REWRITE (ОБНОВИТЬ) является неуспешным, обновление не происходит, содержимое области записи не изменяется, а состояние ввода- вывода файла, связанного с именем-записи-1, становится равным значению, указывающему на причину возникновения ситуации (см. п. 1.3.4 настоящей части).
Для файла с произвольным или динамическим доступом система управления массовой памятью логически заменяет запись, которая указывается значением данного относительный ключ имени-файла, связанного с именем-записи-1. Если в файле нет указанной ключом записи, возникает условие ошибки ключа. Если опознано условие .ошибки ключа, выполнение оператора REWRITE (ОБНОВИТЬ) является неуспешным, обновление не происходит, содержимое области записи не изменяется, а состояние ввода-вывода, относящееся к имени-файла, связанному с именем-записи-1, становится равным значению, указывающему на причину возникновения ситуаций (см. п. 1.3.4 настоящей части).