Действия оператора OPEN (ОТКРЫТЬ) не определены, когда записи меток специфицированы, но в файле отсутствуют, или не специфицированы, но присутствуют.

  1. Если во время выполнения оператора OPEN (ОТКРЫТЬ) возникает условие противоречия свойств файла, выполнение опе­ратора OPEN (ОТКРЫТЬ) считается неуспешным (см. п. L3.7 настоящей части).

  2. Фразы NO REWIND (БЕЗ ПЕРЕМОТКИ) и REVERSED (РЕВЕРСНО) должны использоваться:

  1. только для последовательных однокатушечных (однотом­ных) файлов (см. її. 4.2 настоящей части);

  2. только для последовательных файлов, целиком содержа­щихся на одной катушке ленты, в среде многофайловых лент (см. п. 2.11 настоящей части).

  1. Фразы REVERSED (РЕВЕРСНО) и NO REWIND (БЕЗ ПЕРЕМОТКИ) игнорируются, если они не применимы к внеш­нему носителю, на котором располагается файл.

(И) Если внешний носитель для файла допускает перемотку, то выполняются следующие действия:

  1. если ни одна из фраз REVERSED (РЕВЕРСНО), EXTEND ""(ДОПОЛНЯЕМЫЙ), NO REWIND (БЕЗ ПЕРЕМОТКИ) не указана, | ПрИ выполнении оператора OPEN (ОТКРЫТЬ) файл устанавливается в начало;

  2. если задана фраза NO REWIND (БЕЗ ПЕРЕМОТКИ), при выполнении оператора OPEN (ОТКРЫТЬ) переустановка файла не выполняется; файл уже должен быть установлен в на­чало перед выполнением оператора OPEN (ОТКРЫТЬ);

  3. если задана фраза REVERSED (РЕВЕРСНО), при выпол­нении оператора OPEN (ОТКРЫТЬ) файл устанавливается в конец.

  1. Если задана фраза REVERSED (РЕВЕРСНО), после­дующий оператор READ (ЧИТАТЬ) делает записи файла дос­тупными в обратном порядке, начиная с последней записи.

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

  3. Если файл открыт с фразами INPUT (ВХОДНОЙ) или 1-0 (ВХОДНОЙ-ВЫХОДНОЙ), указатель позиции файла устанав­ливается на единицу.

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

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

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

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

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

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

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

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

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

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

  1. Файл, содержащийся в среде многофайловой ленты, ло­гически эквивалентен последовательному файлу, содержащему­ся в однофайловой ленточной среде.

  2. Если совокупность файлов размещена на одной катуш­ке ленты и на один из этих файлов ссылаются в операторе OPEN (ОТКРЫТЬ), то применяются следующие правила:

  1. одновременно в открытом состоянии может находиться не более одного файла;

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

  3. если один из файлов, на который ссылается имя файла, является субъектом оператора OPEN (ОТКРЫТЬ) с фразой OUTPUT (ВЫХОДНОЙ), во время выполнения оператора OPEN (ОТКРЫТЬ) на соответствующей катушке должны уже существовать все файлы, номер позиций которых меньше, чем номер позиции данного файла. Кроме того, в это время на ка­тушке не могут существовать файлы, номер позиции которых больше, чем номер позиции данного файла;

  4. каждый файл должен быть последовательным.

  1. Для необязательного файла, являющегося недоступ­ным, успешное выполнение оператора OPEN (ОТКРЫТЬ) с фразами 1-0 (ВХОДНОЙ-ВЫХОДНОЙ) или EXTEND (ДО­ПОЛНЯЕМЫЙ) приводит к созданию файла. Это создание про­исходит так, как если бы в указанном порядке выполнялись сле­дующие операторы:

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

CLOSE имя-файла.

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

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

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

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

  1. После успешного выполнения оператора OPEN (ОТК­РЫТЬ) указатель текущего тома устанавливается на:

  1. первую или единственную катушку (том) для доступного входного или входного-выходного файла;

  2. катушку (том), содержащую последнюю логическую за­пись дополняемого файла;

  3. новую катушку (том) для недоступного выходного, входного- выходного I или дополняемого ( файла.

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

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

Минимальный и максимальный размеры записей файла

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

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

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

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

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

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

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

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

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

[END-READ]

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

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

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

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

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

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

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

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

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

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

  2. Фраза NEXT (СЛЕДУЮЩУЮ) не обязательна и не влияет на выполнение оператора OPEN (ОТКРЫТЬ).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. стандартная процедура конечных меток катушки (тома);

  2. смена катушек (томов). Значение указателя тома указывает на следующую существующую для файла катушку (том);

  3. стандартная процедура начальных меток катушки (тома).

  1. Если указатель позиции файла указывает, что не сущест­вует следующей логической записи [или что нет в наличии необя- I зательного входного файла, выполняются следующие действия в указанном порядке:

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

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

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

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

  1. Если во время выполнения оператора READ (ЧИТАТЬ) условие конца не возникает, фраза AT END (В КОНЦЕ) игнори­руется, если она указана, и выполняются следующие действия:

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

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

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