Перейти до вмісту
ГОСТ 22558-89
/ 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 (ВХОДНОЙ), OUT­PUT (ВЫХОДНОЙ) |, 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 (ОТКРЫТЬ) включает следующие действия:

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

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

имеющиеся конечные метки файла обрабатываются, как если бы файл открывался как 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 (ЧИТАТЬ) обнару­живается конец катушки или тома или катушка (том) не содержит логических записей, а логический конец файла не достигнут, вы­полняются следующие операции:

Побачили розбіжність з офіційним текстом?

Повідомити про неточність

Напишіть, що саме розходиться з офіційною публікацією. Код документа вкажіть у повідомленні — так ми швидше знайдемо потрібне місце.

Перейти до форми зворотного зв'язку

Дивіться також

Весь розділ →