1. Оператор OPEN (ОТКРЫТЬ)

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

Оператор OPEN (ОТКРЫТЬ) подготавливает файл к обработ­ке.

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

{INPUT {имя-файла-1}...

І OUTPUT {имя-файла-2}...

OPEN І ЕО {имя-файла-3} ...

І EXTEND {имя-файла-4} ... |

ВХОДНОЙ {имя-файла-1}...

ВЫХОДНОЙ {имя-файла-2}...

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

J [ДОПОЛНЯЕМЫЙ {имя-файла-4} ... |

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

  1. Фраза EXTEND (ДОПОЛНЯЕМЫЙ) должна использо­ваться только для файлов с последовательным доступом.

  2. Файлы, перечисленные в операторе OPEN (ОТКРЫТЬ), могут иметь различную организацию и доступ.

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

  1. Успешное выполнение оператора OPEN (ОТКРЫТЬ) дела­ет файл доступным для обработки и файл находится в режиме от­

  2. крытия. Успешное выполнение оператора OPEN (ОТКРЫТЬ) свя­зывает файл с именем-файла посредством определителя файла.

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

В табл. 1 показаны результаты открытия доступных и недоступ­ных файлов.

Таблица I

Фраза оператора

Файл доступен

Файл недоступен

INPUT (ВХОДНОЙ)

Нормальное открытие

Открытие неуспешное

INPUT (ВХОДНОЙ) (необязательный файл)

Нормальное открытие

Нормальное открытие; при первом чтении воз­никает условие конца или условие ошибки ключа

1-0 (ВХОДНОЙ-ВЫ- ХОДНОЙ)

Нормальное открытие

Открытие неуспешное

1-0 (ВХОДНОИ-ВЫ- ХОДНОП) (необязательный файл)

Нормальное открытие

Открытие приводит к созданию файла

OUTPUT (ВЫХОДНОЙ)

Нормальное открытие; файл не содержит за­писей

Открытие приводит к созданию файла

EXTEND (ДОПОЛНЯЕ­

МЫЙ)

Нормальное открытие

Открытие неуспешное

EXTEND (ДОПОЛНЯЕ­

МЫЙ) (необязательный файл)

Нормальное открытие

Открытие приводит к созданию файла



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

  1. Если файл не открыт, не может быть выполнен ни один опе­ратор, явно или неявно относящийся к файлу, за исключением опе­ратора MERGE (СЛИТЬ) с фразами USING (ИСПОЛЬЗУЯ) и GIVING (ПОЛУЧАЯ), оператора OPEN (ОТКРЫТЬ) или опера­тора SORT (СОРТИРОВАТЬ) с фразами USING (ИСПОЛЬЗУЯ) и GIVING (ПОЛУЧАЯ).

Оператор OPEN (ОТКРЫТЬ) должен быть успешно вы­полнен перед выполнением любого другого допустимого оператора ввода-вывода. В табл. 2 «X» означает, что указанный оператор, 514используемый при указанном в строке методе доступа, может ис­пользоваться в режиме открытия, заданном в заголовке столбца.

  1. Файл может быть открыт с фразами INPUT (ВХОДНОЙ), OUTPUT (ВЫХОДНОЙ) |; EXTEND (ДОПОЛНЯЕМЫЙ) | и 1-0 (ВХОДНОЙ-ВЫХОДНОЙ) в одной и той же единице испол­нения. После первоначального выполнения оператора OPEN (ОТКРЫТЬ) для файла каждому последующему выполнению опе­ратора OPEN (ОТКРЫТЬ) для этого же файла должно предшест- вовать выполнение для него оператора CLOSE (ЗАКРЫТЬ) без | фразы LOCK ТС ЗАМКОМ)', •

  2. Выполнение оператора OPEN (ОТКРЫТЬ) не извлекает и не записывает первую запись данных.

Таблица 2

Меіод доступа файла

Оператор

Режим открытия

для ввода

■ ДЛЯ вывода

ДЛЯ ввода-вы­вода

для дополнения

Последова­тельный

READ (ЧИТАТЬ)

X


X


WRITE (ПИСАТЬ)


X


X

REWRITE (ОБНОВИТЬ)



X


START (ПОДВЕСТИ)

X


X


DELETE (УДАЛИТЬ)



X


Произвольный

READ (ЧИТАТЬ)

X


X


WRITE (ПИСАТЬ)


X

X


REWRITE (ОБНОВИТЬ)



X


START (ПОДВЕСТИ)





DELETE (УДАЛИТЬ)



X


Динамический

READ (ЧИТАТЬ)

X


X


WRITE (ПИСАТЬ)


X

X


REWRITE (ОБНОВИТЬ)



X


START (ПОДВЕСТИ)



X


DELETE (УДАЛИТЬ)



X




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

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

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

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

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

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

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

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

Последней логической записью для индексного файла явля­ется существующая в данный момент запись с наибольшим зна­чением основного ключа.

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

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

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

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

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

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

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

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

  1. Для необязательного файла, являющегося недоступным, успешное выполнение оператора OPEN (ОТКРЫТЬ) с фразами 1-0 (ВХОДНОЙ-ВЫХОДНОЙ) І їїіїГ^хтешУТдополняе- 'ЖпдГ) приводит к созданию файла. Это создание происходит так, как если бы в указанном порядке выполнялись следующие операторы:

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

CLOSE имя-файла.

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

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

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

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

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

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

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

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

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

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

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

Формат 1

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

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

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

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

[END-READ]-

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

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

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

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

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

Формат 2

READ имя-файла-1 RECORD [INTO идентификатор-1

I [KEY IS имя-данного-1]

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

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

[ENDURE AD]

ЧИТАТЬ ЗАПИСЬ имя-файла-1 [В идентификатор-1]

[КЛЮЧ имя-данного-1]

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

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

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

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

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

  3. Имя-данного-1 может уточняться.

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

  5. Формат 2 используется для файлов с произвольным досту­пом или для файлов с динамическим доступом}, если записи дол­жны извлекаться произвольно.

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

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

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

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

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

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

В индексных файлах сравнения записей производится по значе­ниям текущего ключа ссылки. Для индексных файлов сравнения производятся в соответствии с основной последовательностью для файла.

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

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

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

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