тот же оператор WRITE (ПИСАТЬ) без фразы FROM (ИЗ ПОЛЯ).
После завершения выполнения оператора WRITE (ПИСАТЬ) информация в области, указанной идентификатором-1, остается доступной, даже если информация в области, указанной именем-записи-1, не является доступной, [за исключением случая, определяемого фразой SAME RECORD AREA (ОБЩАЯ ОБ- ЛАСТЬ ЗАПИСИ).
Выполнение оператора WRITE (ПИСАТЬ) не влияет на указатель позиции файла.
Выполнение оператора WRITE (ПИСАТЬ) вызывает обновление состояния ввода-вывода имени-файла, связанного с име- чем-записи-1 (см. п. 1.3.5 настоящей части).
При выполнении оператора WRITE (ПИСАТЬ) логическая запись передается операционной системе.
Количество позиций литер в записи, указанной именем- записи-1, не должно быть больше наибольшего или меньше наименьшего числа-литер, допустимого фразой RECORD IS VARYING (В ЗАПИСИ ПЕРЕМЕННОЕ ЧИСЛО), связанной с именем-файла, связанного с именем-записи-1. В любом случае выполнение оператора WRITE (ПИСАТЬ) неуспешно, операция записи не происходит, содержимое области записи не меняется, и состояние ввода-вывода файла, связанного с именем-записи-1, принимает значение, указывающее на причину условия (см. п. 1.3.5 настоящей части).
Если во время выполнения оператора WRITE (ПИСАТЬ) с фразой NOT END-OF-PAGE (НЕ В КОНЦЕ СТРАНИЦЫ) не наступает условие конца страницы, то управление передается повелительному-оператору-2 следующим образом:
если выполнение оператора WRITE (ПИСАТЬ) успешно, то управление передается после того, как запись записана, и после изменения состояния ввода-вывода имени-файла, связанного с именем-записи-1;
если выполнение оператора WRITE (ПИСАТЬ) закончилось неуспешно, то управление передается после изменения состояния ввода-вывода имени-файла, связанного с именем-записи-1, и после выполнения какой-либо процедуры, специфицированной оператором USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ), применимым к имени-файла, связанного с именем- записи-1.
Фраза END-WRITE (КОНЕЦ-ПИСАТЬ) ограничивает область действия оператора WRITE (ПИСАТЬ) (см. ч. 4, п. 6,4.3).
Отношение следования последовательного файла устанавливается порядком выполнения операторов WRITE (ПИСАТЬ) при создании файла. Отношение не изменяется, | за исклю-1 |чением случая, когда записи добавляются в конец файла'Д
Когда последовательный файл открыт как EXTEND (ДОПОЛНЯЕМЫЙ), то в результате выполнения оператора WRITE (ПИСАТЬ) записи будут добавляться в конец файла так, как если бы файл был открыт как OUTPUT (ВЫХОДНОЙ), Если в файле есть записи, то первая запись, записанная после выполнения оператора OPEN (ОТКРЫТЬ) с фразой EXTEND (ДОПОЛНЯЕМЫЙ), является следующей после последней записи в файле.
Когда делается попытка записать запись за внешне определенными границами последовательного файла, то возникает условие ошибки и содержимое области записи остается неизменным. Происходят следующие действия:
значение состояния ввода-вывода для имени-файла, связанного с именем-записи-1, устанавливается в значение, указывающее на нарушение границ;
если для имени-файла, связанного с именем-записи-1, явно или неявно специфицирована декларатива USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТ- НОЙ ПРОЦЕДУРЫ ОШИБКИ), то будет выполняться эта декларативная процедура;
если декларатива USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ) не специфицирована явно или неявно для имени файла, связанного с именем-записи-1, то результат будет неопределенным.
Если распознается конец катушки/тома и внешне определенные границы файла не превышены, то выполняются следующие операции:
стандартная процедура конечных меток катушки/тома;
смена катушки/тома. Указатель текущего тома изменяется для указания на следующую катушку/том, существующую для файла;
стандартная процедура начальных меток катушки/тома.
Фразы ADVANCING (ПРОДВИЖЕНИЯ) | и END-OF- PAGE (В КОНЦЕ СТРАНИЦЫ) | позволяют управлять вертикальным позиционированием строки на печатаемой странице. Если фраза ADVANCING (ПРОДВИЖЕНИЯ) не используется, реализацией будет обеспечиваться автоматическое продвижение, как если бы пользователь указал фразу AFTER ADVANCING 1 LINE (ПОСЛЕ ПРОДВИЖЕНИЯ 1 СТРОК). Если фраза ADVANCING (ПРОДВИЖЕНИЯ) используется, продвижение обеспечивается следующим образом:
если целое-1 или данное, указанное идентификатором-2, положительно, то печатаемая страница продвигается на число строк, равное этому значению;
если значение данного, указанного идентификатором-2, отрицательно, то результаты будут неопределенными;
если целое-1 или значение данного, указанного идентификатором-2, равно нулю, то перемещение печатаемой страницы не происходит;
если указано мнемоническое-имя-1, печатаемая страница продвигается в соответствии с правилами, установленными реализацией для данного устройства;
если используется фраза BEFORE (ДО), строка выводится до продвижения печатаемой страницы в соответствии с приведенными выше правилами;
если используется фраза AFTER (ПОСЛЕ), строка выводится после продвижения печатаемой страницы в соответствии с приведенными выше правилами;
если во фразе ADVANCING (ПРОДВИЖЕНИЯ) указано слово PAGE (СТРАНИЦЫ) и в статье описания файла, связанного с выводимой записью, указана фраза LINAGE (ВЕРСТКА), то запись выводится до или после (в зависимости от используемой фразы) позиционирования устройства на следующую логическую страницу. Позиционирование устройства производится на первую строку, которая может быть записана на следующей логической странице в соответствии со спецификацией фразы LINAGE (ВЕРСТКА);
если во фразе ADVANCING (ПРОДВИЖЕНИЯ) указано слово PAGE (СТРАНИЦЫ) ( и в статье описания файла, указанного с выводимой записью, не указана фраза LINAGE (ВЕРСТКА)! ; запись выводится до или после (в зависимости от используемой фразы) позиционирования устройства на следующую физическую страницу. Позиционирование на следующую физическую
страницу выполняется в соответствии с правилами, определенными реализацией. Если понятие физической страницы не применимо к указанному устройству, реализацией обеспечивается такое продвижение, как если бы пользователь указал фразу BEFORE (ДО) или AFTER ADVANCING 1 LINE (ПОСЛЕ ПРОДВИЖЕНИЯ 1 СТРОК). ___
Если во время выполнения оператора WRITE (ПИСАТЬ) с фразой END-OF-PAGE (В КОНЦЕ СТРАНИЦЫ) достигается логический конец печатаемой страницы, выполняется повелительный-оператор-1, указанный во фразе END-OF-PAGE (В КОНЦЕ СТРАНИЦЫ). Логический конец специфицируется фразой LINAGE (ВЕРСТКА), связанной с именем-записп.
Условие конца страницы возникает всякий раз, когда выполнение оператора WRITE (ПИСАТЬ) с фразой END-OF- PAGE (В КОНЦЕ СТРАНИЦЫ) вызывает печать или протяжку в области концовки тела страницы. Это происходит тогда, когда при выполнении оператора WRITE (ПИСАТЬ) LINAGE-COUNTER (СЧЕТЧИК-ВЕРСТКИ) становится равным или большим, чем значение целого-2 или данного, представленного именем-данного-2 во фразе LINAGE (ВЕРСТКА), если они указаны. В этом случае выполняется оператор WRITE (ПИСАТЬ), а затем повелительный-оператор-1, указанный во фразе END-OF-PAGE (В КОНЦЕ СТРАНИЦЫ).
Всякий раз, когда выполнение оператора WRITE (ПИСАТЬ) (с фразой END-OF-PAGE (В КОНЦЕ СТРАНИЦЫ) или без нее) не может быть удовлетворено полностью в границах тела текущей страницы, возникает условие переполнения страницы. Это происходит тогда, когда оператор WRITE (ПИСАТЬ), если бы он был выполнен, вызвал бы установку LINAGE-COUNTER (СЧЕТЧИК-ВЕРСТКИ) на значение, превышающее значение целого-1 или данного, представленного именем-данного-1, во фразе LINAGE (ВЕРСТКА). В этом случае запись выводится на логической странице до или после (в зависимости от используемой фразы) позиционирования устройства на первую строку, которая может быть записана на следующей логической странице, в соответствии со спецификацией фразы LINAGE (ВЕРСТКА). После вывода записи и позиционирования устройства выполняется повелительный-оператор-1 фразы END-OF- PAGE (В КОНЦЕ СТРАНИЦЫ), если она указана.
Условие переполнения страницы возникает в том случае, когда в результате выполнения данного оператора WRITE (ПИСАТЬ) значение LINAGE-COUNTER (СЧЕТЧИК-ВЕРСТКИ) одновременно превысит значение целого-2 или данного, указанного именем-данного-2 фразы LINAGE (ВЕРСТКА), и целого-1 или данного, указанного именем-данного-1 фразы LINAGE (ВЕРСТКА).Часть 8. МОДУЛЬ ОТНОСИТЕЛЬНОГО ВВОДА-ВЫВОДА
ВВЕДЕНИЕ В МОДУЛЬ ОТНОСИТЕЛЬНОГО ВВОДА-ВЫВОДА
Назначение
Модуль относительного ввода-вывода обеспечивает возможность произвольного или последовательного доступа к записям файла массовой памяти. Каждая запись относительного файла однозначно идентифицируется целой положительной величиной, указывающей относительную позицию логической записи в файле.
Характеристика уровней
Уровень 1 относительного ввода—вывода обеспечивает ограниченные возможности для статьи управления файлом, статьи описания файла и статей в параграфе I-O-CONTROL (УПРАВЛЕ- НИЕ-ВВОДОМ-ВЫВОДОМ). В разделе процедур уровень 1 относительного ввода-вывода обеспечивает ограниченные возможности операторов CLOSE (ЗАКРЫТЬ), OPEN (ОТКРЫТЬ), READ (ЧИТАТЬ), REWRITE (ОБНОВИТЬ), USE (ИСПОЛЬЗОВАТЬ), WRITE (ПИСАТЬ) и полные возможности оператора DELETE (УДАЛИТЬ).
Уровень 2 относительного ввода-вывода обеспечивает полные возможности для статьи управления файлом и статей в параграфе I-O-CONTROL (УПРАВЛЕНИЕ-ВВОДОМ-ВЫВО- ДОМ). В разделе процедур уровень 2 относительного ввода- вывода обеспечивает полные возможности операторов CLOSE (ЗАКРЫТЬ), DELETE (УДАЛИТЬ), OPEN (ОТКРЫТЬ), READ (ЧИТАТЬ), REWRITE (ОБНОВИТЬ), START (ПОДВЕСТИ), USE (ИСПОЛЬЗОВАТЬ) и WRITE (ПИСАТЬ).
Понятия языка
1.3.1.Организация
Файл с относительной организацией является файлом массовой памяти, любая запись которого может быть запомнена или извлечена по значению относительного номера записи.
Концептуально файл с относительной организацией состоит из последовательной цепочки областей, каждая из которых может содержать логическую запись. Каждой из этих областей назначается относительный номер записи. Каждая логическая запись относительного файла идентифицируется относительным номером записи ее о'бласти памяти. Например, десятая запись — это запись, адресуемая относительным номером записи 10 и находящаяся в десятой области записи, независимо от того, были заполнены первые девять областей или нет.
Для получения более эффективного доступа к записям в относительном файле число позиций литер, резервируемое в запоминающей среде для хранения логической записи, может отличаться от числа позиций литер в описании этой записи в программе.
Методы доступа
При относительной организации последовательный доступ осуществляется в возрастающем порядке значений относительного номера записи. Доступными являются только записи, находящие- ся в данное время в файле. | Для установки исходной точки для последовательного извлечения записей может быть использован оператор START (ПОДВЕСТИ).
При произвольном доступе к файлу операторы ввода-вывода применяются для доступа к записям в порядке, указанном программистом. В случае файла с относительной организацией программист указывает требуемую запись, помещая ее относительный номер в данное, определенное как относительный ключ.
При динамическом доступе программист может произвольно переходить от последовательного доступа к произвольному и наоборот, применяя соответствующие формы операторов ввода-вывода. *
У к а з а т е л ь позиции файла
Указатель позиции файла — это логическое понятие, используемое в этом документе для облегчения точной спецификации следующей записи, к которой должен осуществляться доступ при выполнении заданных операций ввода-вывода. На установку указателя позиции файла влияют только операторы CLOSE (ЗАК- РЫТЬ), OPEN (ОТКРЫТЬ), READ (ЧИТАТЬ) и START | J (ПОДВЕСТИ). J Понятие указателя позиции файла не имеет смысла для файла, открытого для вывода или дополнения ’.
С о с т о я н и е ввода-вывода
Состояние ввода-вывода — это логическое понятие, характеризующееся двухсимвольным значением, которое устанавливается для указания состояния операции ввода-вывода во время выполнения операторов CLOSE (ЗАКРЫТЬ), DELETE (УДАЛИТЬ), OPEN (ОТКРЫТЬ), READ (ЧИТАТЬ), REWRITE (ОБНОВИТЬ), [START (ПОДВЕСТИ)1 или WRITE (ПИСАТЬ) перед выполнением любого повелительного оператора, связанного с этим оператором ввода-вывода, и перед выполнением любой применимой процедуры USE AFTER EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ). Значение состояния ввода-вывода доступно Кобол-программе посредством фразы FILE STATUS (СОСТОЯНИЕ ФАЙЛА) в статье управления файлом
.Состояние ввода-вывода определяет также, будет ли выполняться процедура USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ). Если возникает любое условие, отличное от тех, которые определены ниже как «успешное завершение», может выполняться указанная процедура по правилам, заданным для оператора USE (ИСПОЛЬЗОВАТЬ). Если возникает одно из условий «успешное завершение», никакая процедура такого типа не будет выполняться (п. 4.8. настоящей части).
Некоторые классы значений состояния ввода-вывода задают критические условия ошибки. К таким значениям относятся значения, которые начинаются с цифры 3 или 4, а также значения, начинающиеся с цифры 9, которые определяются реализацией как критические. Если значение состояния ввода—вывода для операции ввода—вывода задает такое условие ошибки, реализацией определяются действия, которые предпринимаются после выполнения применимой процедуры USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ), или, если ни одна такая процедура не применима, после завершения стандартной системной процедуры обработки ошибок ввода-вывода. Состояние ввода-вывода задает одно из следующих условий, возникающих после завершения операции ввода-вывода: