Действия оператора OPEN (ОТКРЫТЬ) не определены, когда записи меток специфицированы, но в файле отсутствуют, или не специфицированы, но присутствуют.
Если во время выполнения оператора OPEN (ОТКРЫТЬ) возникает условие противоречия свойств файла, выполнение оператора OPEN (ОТКРЫТЬ) считается неуспешным (см. п. L3.7 настоящей части).
Фразы NO REWIND (БЕЗ ПЕРЕМОТКИ) и REVERSED (РЕВЕРСНО) должны использоваться:
только для последовательных однокатушечных (однотомных) файлов (см. її. 4.2 настоящей части);
только для последовательных файлов, целиком содержащихся на одной катушке ленты, в среде многофайловых лент (см. п. 2.11 настоящей части).
Фразы REVERSED (РЕВЕРСНО) и NO REWIND (БЕЗ ПЕРЕМОТКИ) игнорируются, если они не применимы к внешнему носителю, на котором располагается файл.
(И) Если внешний носитель для файла допускает перемотку, то выполняются следующие действия:
если ни одна из фраз REVERSED (РЕВЕРСНО), EXTEND ""(ДОПОЛНЯЕМЫЙ), NO REWIND (БЕЗ ПЕРЕМОТКИ) не указана, | ПрИ выполнении оператора OPEN (ОТКРЫТЬ) файл устанавливается в начало;
если задана фраза NO REWIND (БЕЗ ПЕРЕМОТКИ), при выполнении оператора OPEN (ОТКРЫТЬ) переустановка файла не выполняется; файл уже должен быть установлен в начало перед выполнением оператора OPEN (ОТКРЫТЬ);
если задана фраза REVERSED (РЕВЕРСНО), при выполнении оператора OPEN (ОТКРЫТЬ) файл устанавливается в конец.
Если задана фраза REVERSED (РЕВЕРСНО), последующий оператор READ (ЧИТАТЬ) делает записи файла доступными в обратном порядке, начиная с последней записи.
Если файл, открытый с фразой INPUT (ВХОДНОЙ), является необязательным файлом, не имеющимся в наличии, оператор OPEN (ОТКРЫТЬ) устанавливает указатель позиции файла для указания того, что необязательный входной файл отсутствует.
Если файл открыт с фразами INPUT (ВХОДНОЙ) или 1-0 (ВХОДНОЙ-ВЫХОДНОЙ), указатель позиции файла устанавливается на единицу.
Если задана фраза EXTEND (ДОПОЛНЯЕМЫЙ), при выполнении оператора OPEN (ОТКРЫТЬ) файл устанавливается непосредственно за последней логической записью файла. Последней логической записью последовательного файла является последняя записанная в файл запись.
Если задана фраза EXTEND (ДОПОЛНЯЕМЫЙ) и фраза LABEL RECORD (МЕТКИ) указывает, что записи меток присутствуют, выполнение оператора OPEN (ОТКРЫТЬ) включает следующие действия:
начальные метки файла обрабатываются только для однокатушечных или однотомных файлов;
начальные метки катушки (тома) обрабатываются на последней катушке (томе), как если бы файл открывался как INPUT (ВХОДНОЙ);
имеющиеся конечные метки файла обрабатываются, как если бы файл открывался как INPUT (ВХОДНОЙ). Затем эти метки удаляются;
затем обработка продолжается, как если бы файл был открыт как OUTPUT (ВЫХОДНОЙ).
Оператор OPEN (ОТКРЫТЬ) с фразой 1-0 (ВХОДНОЙ- ВЫХОДНОЙ) должен относиться к файлу, поддерживающему операции ввода и вывода, допустимые для последовательного файла, открытого как 1-0 (ВХОДНОЙ-ВЫХОДНОЙ). Выполнение оператора OPEN (ОТКРЫТЬ) с фразой 1-0 (ВХОДНОЙ-ВЫХОДНОЙ) подготавливает файл, на который он ссылается, как! для операций ввода, так и для операций вывода.
Если указана фраза 1-0 (ВХОДНОЙ-ВЫХОДНОЙ) и во фразе LABEL RECORD (МЕТКИ) указано, что записи меток присутствуют, выполнение оператора OPEN (ОТКРЫТЬ) включает следующие шаги:
проверку меток в соответствии с процедурами, определенными реализацией для проверки входных-выходных меток;
запись новых меток в соответствии с процедурами, опреде- ленными реализацией для записи входных-выходных меток.
Файл, содержащийся в среде многофайловой ленты, логически эквивалентен последовательному файлу, содержащемуся в однофайловой ленточной среде.
Если совокупность файлов размещена на одной катушке ленты и на один из этих файлов ссылаются в операторе OPEN (ОТКРЫТЬ), то применяются следующие правила:
одновременно в открытом состоянии может находиться не более одного файла;
нет ограничений на порядок, в котором файлы могут быть открыты для ввода;
если один из файлов, на который ссылается имя файла, является субъектом оператора OPEN (ОТКРЫТЬ) с фразой OUTPUT (ВЫХОДНОЙ), во время выполнения оператора OPEN (ОТКРЫТЬ) на соответствующей катушке должны уже существовать все файлы, номер позиций которых меньше, чем номер позиции данного файла. Кроме того, в это время на катушке не могут существовать файлы, номер позиции которых больше, чем номер позиции данного файла;
каждый файл должен быть последовательным.
Для необязательного файла, являющегося недоступным, успешное выполнение оператора OPEN (ОТКРЫТЬ) с фразами 1-0 (ВХОДНОЙ-ВЫХОДНОЙ) или EXTEND (ДОПОЛНЯЕМЫЙ) приводит к созданию файла. Это создание происходит так, как если бы в указанном порядке выполнялись следующие операторы:
OPEN OUTPUT имя-файла.
CLOSE имя-файла.
ОТКРЫТЬ ВЫХОДНОЙ имя-файла.
ЗАКРЫТЬ имя-файла.
За этими операторами следует выполнение оператора OPEN (ОТКРЫТЬ), указанного в исходной программе.
Успешное выполнение оператора OPEN (ОТКРЫТЬ) с фразой OUTPUT (ВЫХОДНОЙ) приводит к созданию файла. После успешного создания такой файл не содержит записей данных.
После успешного выполнения оператора OPEN (ОТКРЫТЬ) указатель текущего тома устанавливается на:
первую или единственную катушку (том) для доступного входного или входного-выходного файла;
катушку (том), содержащую последнюю логическую запись дополняемого файла;
новую катушку (том) для недоступного выходного, входного- выходного I или дополняемого ( файла.
Во время выполнения оператора OPEN (ОТКРЫТЬ) обновляется значение состояния ввода-вывода, связанного с именем- файла.
Если в операторе OPEN (ОТКРЫТЬ) указано более чем одно имя-файла, результат выполнения этого оператора OPEN (ОТКРЫТЬ) такой, как если бы отдельный оператор OPEN (ОТКРЫТЬ) был написан для каждого имени-файла в том порядке, как они указаны в операторе OPEN (ОТКРЫТЬ).
Минимальный и максимальный размеры записей файла
устанавливаются во время создания файла и не должны изменяться впоследствии.
Оператор READ (ЧИТАТЬ)
Назначение
Оператор READ (ЧИТАТЬ) делает доступной следующую логическую запись файла.
Общий фо р м а т
READ имя-файла-1 [NEXT] RECORD [INTO
идентификатор-1]
[AT END повелительный-оператор-1]
[NOT AT END повелительный-оператор-2]
[END-READ]
ЧИТАТЬ [СЛЕДУЮЩУЮ] ЗАПИСЬ имя-файла-1
[В идентификатор-1]
[В КОНЦЕ повелительный-оператор-1]
[НЕ В КОНЦЕ повелительный-оператор-2]
[КОНЕЦ-ЧИТАТЬ]
Синтаксические правила
Область памяти, связанная с идентификатором-1, и область записи, связанная с именем-файла-1, не должны быть одной и той же областью памяти.
Фраза AT END (В КОНЦЕ) должна быть указана, еслц для имени-файла-1 не определена соответствующая процедура USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ).
О б щ и е правила
Во время выполнения оператора READ (ЧИТАТЬ) файл, на который ссылается имя-файла-1, должен быть открыт как входной или входной-выходяой (см. и. 4.3 настоящей части).
Фраза NEXT (СЛЕДУЮЩУЮ) не обязательна и не влияет на выполнение оператора OPEN (ОТКРЫТЬ).
Выполнение оператора READ (ЧИТАТЬ) вызывает обновление значения состояния ввода-вывода, связанного с именем-фай- ла-1.
В начале выполнения оператора READ (ЧИТАТЬ) установка указателя позиции файла используется для определения доступной записи согласно следующим правилам. Сравнения для записей в последовательных файлах относятся к номерам записей.
Если указатель позиции файла указывает, что нет правильной следующей записи, то выполнение оператора READ (ЧИТАТЬ) неуспешно.
Если указатель позиции файла указывает, что отсутствует необязательный входной файл, выполнение происходит так, как указано в общем правиле (10).
Если указатель позиции файла был установлен предыдущим оператором OPEN (ОТКРЫТЬ), выбирается первая существующая запись файла, номер записи которой больше или равен указателю позиции файла.
Если указатель позиции файла установлен предыдущим оператором READ (ЧИТАТЬ), выбирается первая существующая запись файла, номер записи которой больше указателя позиции файла.
Если обнаружена запись, удовлетворяющая приведенным выше правилам, она становится доступной в области записи, соответствующей имени-файла-1.
Если запись, удовлетворяющая приведенным выше правилам, не найдена, то указатель позиции файла устанавливается для указания того, что не существует следующей логической записи, и выполнение продолжается согласно общему правилу (10).
Если запись становится доступной, то указатель позиции файла устанавливается на номер записи, ставшей доступной.
Независимо От используемого способа совмещения времени выборки с временем обработки, концепция оператора READ (ЧИТАТЬ) остается неизменной в том, что запись становится доступной объектной программе до выполнения любого оператора, следующего за этим оператором READ (ЧИТАТЬ), если повелитель- ный-оператор-2 не указан, или до выполнения повелительного-опе- ратора-2, если он указан.
Когда логические записи описаны более чем одной статьей описания записи, эти записи автоматически используют одну и ту же область памяти; это эквивалентно неявному переопределению области. По завершении оператора READ (ЧИТАТЬ) значения всех данных, находящихся вне диапазона текущей записи данных, не определены.
Фраза INTO (В) может быть указана в операторе READ (ЧИТАТЬ), если:
только одно описание записи подчиняется статье описания файла;
все имена-записей, связанные с именем-файла-1, и данное, на которое ссылается идентификатор-1, описывают групповое данное или элементарное буквенно-цифровое данное.
Результат выполнения оператора READ (ЧИТАТЬ) с фразой INTO (В) эквивалентен применению следующих правил в указанном порядке:
выполняется тот же оператор READ (ЧИТАТЬ) без фразы INTO (В);
текущая запись пересылается из области записи в область, указываемую идентификатором-2, в соответствии с правилами для оператора MOVE (ПОМЕСТИТЬ) без фразы CORRESPONDING (СООТВЕТСТВЕННО). Размер текущей записи определяется пра- вилами, указанными для фразы RECORD (В ЗАПИСИ). | Если статья описания файла содержит фразу RECORD VARYING (В ЗАПИСИ ПЕРЕМЕННОЕ ЧИСЛО ЛИТЕР), неявная пересылка является групповой. | Неявный оператор MOVE (ПОМЕСТИТЬ) не выполняется, если выполнение оператора READ (ЧИТАТЬ) было неуспешным. Индексы, связанные с идентификатором-!, вычисляются после того, как запись была прочитана и непосредственно перед ее пересылкой в область идентификатора-1. Запись доступна в области записи и в данном, на которое ссылается идентификатор-1.
Если при выполнении оператора READ (ЧИТАТЬ) обнаруживается конец катушки или тома или катушка (том) не содержит логических записей, а логический конец файла не достигнут, выполняются следующие операции:
стандартная процедура конечных меток катушки (тома);
смена катушек (томов). Значение указателя тома указывает на следующую существующую для файла катушку (том);
стандартная процедура начальных меток катушки (тома).
Если указатель позиции файла указывает, что не существует следующей логической записи [или что нет в наличии необя- I зательного входного файла, выполняются следующие действия в указанном порядке:
значение, полученное в результате установки указателя позиции файла, присваивается состоянию ввода-вывода, связанному с именем-файла-1, для обозначения условия конца (см. п. 1.3.5' настоящей части);
если фраза AT END (В КОНЦЕ) указана в операторе, выз4 вавшем это условие, управление передается повелительному-опе- ратору-1 во фразе AT END (В КОНЦЕ). Никакие процедуры USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ), связанные с именем- файла-1, не выполняются;
если фраза AT END (В КОНЦЕ) не указана, с именем-фай- ла-1 должна быть связана процедура USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ), которая в этом случае и выполняется. Возврат из этой процедуры осуществляется к следующему после оператора READ (ЧИТАТЬ) выполнимому оператору.
Если возникает условие конца, выполнение оператора READ (ЧИТАТЬ) является неуспешным.
Если во время выполнения оператора READ (ЧИТАТЬ) условие конца не возникает, фраза AT END (В КОНЦЕ) игнорируется, если она указана, и выполняются следующие действия:
устанавливается значение указателя позиции файла и изменяется значение состояния ввода-вывода, связанного с именем- файла-1;
если существует условие особой ситуации, но не условие конца, управление передается процедуре USE AFTER EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ ПРОЦЕДУРЫ ОШИБКИ) согласно правилам оператора USE (ИСПОЛЬЗОВАТЬ), применимого к имени-файла-1 (п. 4.6 настоящей части);
если условие особой ситуации не существует, запись становится доступной в области записи и выполняются любые неявные пересылки, предопределенные фразой INTO (В). Управление передается в точку выхода оператора READ( ЧИТАТЬ) или повели- тельному-оператору-2, если он указан. В последнем случае выполнение продолжается согласно правилам для операторов, указанных в повелительном-операторе-2. Если выполняется оператор ветвления или условный оператор, вызывающие явную передачу управления, оно передается в соответствии с правилами для этих операторов, в противном случае после завершения выполнения повели- тельного-оператора-2 управление передается в точку выхода оператора READ (ЧИТАТЬ).