ЧИТАТЬ 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, и область записи, связанная с именем-файла-1, не должны быть одной п той же областью памяти.

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

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

  4. Формат 2 используется для файлов с произвольным досту- пом [йди для файлов с динамическим доступом, если записи дол- | |жны извлекаться произвольно’

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

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

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

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

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

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

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

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

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

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

Если найдена запись, удовлетворяющая вышеприведенным правилам, она становится доступной в области записи, связанной с именем-файла-1, если только не указана фраза RELATIVE KEY (ОТНОСИТЕЛЬНЫЙ КЛЮЧ) для имени-файла-1 и число знача­щих цифр в относительном номере выбранной записи не больше, чем размер самого относительного ключа. В последнем случае ука­затель позиции файла устанавливается для индикации этого усло­вия, а оператор выполняется согласно общему правилу (10).

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

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

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

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

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

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

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

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

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

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

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

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

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

  3. если фраза AT END (В КОНЦЕ) не указана, с именем-фай­ла-1 должна быть связана процедура USE AFTER STANDARD

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

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

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

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

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

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

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

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

  3. Для относительного файла, если фраза RELATIVE KEY (ОТНОСИТЕЛЬНЫЙ КЛЮЧ) указана для имени-файла-1, при выполнении оператора READ (ЧИТАТЬ) формата 1 относитель­ный номер записи, которая становится доступной, помещается в данное относительный ключ согласно правилам для оператора MOVE (ПОМЕСТИТЬ) (см. ч. 6, п. 6.19).

  4. Для относительного файла при выполнении оператора READ (ЧИТАТЬ) формата 2 указатель позиции файла устанавли­вается равным значению данного, на которое ссылается фраза RE­LATIVE KEY (ОТНОСИТЕЛЬНЫЙ КЛЮЧ) для файла, а запись, относительный номер записи которой равен указателю позиции файла, становится доступной в области записи, связанной с име- нем-файла-1. Если в файле нет такой записи, возникает условие ошибки ключа, и выполнение оператора READ (ЧИТАТЬ) явля­ется неуспешным (см. п. 1.3.5 настоящей части).

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

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

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

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

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

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

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

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

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

[END^REWRITEf

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. оператор

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

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

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

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

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

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

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

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

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

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