ГОСТ 22558-89 сторінка 56 з 116
ЛЭ, связанный с именем файла, является внешним, то существует единственная область записи, связанная с определителем файла для единицы исполнения.
Если файл не открыт, не может быть выполнен ни один оператор, явно или неявно относящийся к файлу, за исключением оператора MERGE (СЛИТЬ) с фразами USING (ИСПОЛЬЗУЯ) и GIVING (ПОЛУЧАЯ), оператора OPEN (ОТКРЫТЬ) или оператора SORT (СОРТИРОВАТЬ) с фразами USING (ИСПОЛЬЗУЯ) и GIVING (ПОЛУЧАЯ).
Оператор OPEN (ОТКРЫТЬ) должен быть успешно выполнен перед выполнением любого другого допустимого оператор» ввода-вывода.
В табл. 2 приведены допустимые операторы ввода-вывода.
Таблица 2
Оператор
Допустимость сочетаний операторов ввода-вьпода для вариантов оператора OPEN (ОТКРЫТЬ)
INPUT (ВХОДНОЙ)
OUTPUT (ВЫХОДНОЙ)
1-0 (В ход ной- ВЫХОДНОЙ)
EXTEND (ДОПОЛНЯЕ
МЫ Й)
READ (ЧИТАТЬ)
X
X
WRITE (ПИСАТЬ)
—
X
—
X
REWRITE (ОБНОВИТЬ)
—
—
X
—
Примечание. Знак «X» означает допустимые сочетания оператора ввода- вывода и варианта OPEN (ОТКРЫТЬ), «—» — недопустимые.
Файл может быть открыт как INPUT (ВХОДНОЙ), OUTPUT (ВЫХОДНОЙ) |, EXTEND (ДОПОЛНЯЕМЫЙ) | и 1-0 (ВХОДНОЙ-ВЫХОДНОЙ) в одной и той же программе. Каждому последующему оператору OPEN (ОТКРЫТЬ) для одного и того же файла должно предшествовать выполнение оператора CLO- SE (ЗАКРЫТЬ) без фраз REEL (КАТУШКУ), UNIT (ТОМ) или LOCK (С ЗАМКОМ) для данного файла.
Выполнение оператора OPEN (ОТКРЫТЬ) не извлекает и не записывает первую запись данных.
Если указаны записи меток для файла, начальные метки обрабатываются следующим образом:
когда указана фраза INPUT (ВХОДНОЙ), оператор OPEN (ОТКРЫТЬ) осуществляет проверку метой в соответствии с процедурами, определенными реализацией для проверки входных меток;
когда указана фраза OUTPUT (ВЫХОДНОЙ), выполнение оператора OPEN (ОТКРЫТЬ) вызывает запись меток в соответствии с процедурами, определенными реализацией для записи выходных меток.
Действия оператора 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 (ЧИТАТЬ) обнаруживается конец катушки или тома или катушка (том) не содержит логических записей, а логический конец файла не достигнут, выполняются следующие операции:
Побачили розбіжність з офіційним текстом?