1. тот же оператор WRITE (ПИСАТЬ) без фразы FROM (ИЗ ПОЛЯ).

  1. После завершения выполнения оператора WRITE (ПИ­САТЬ) информация в области, указанной идентификатором-1, ос­тается доступной, даже если информация в области, указанной именем-записи-1, не является доступной, [за исключением случая, определяемого фразой SAME RECORD AREA (ОБЩАЯ ОБ- ЛАСТЬ ЗАПИСИ).

  2. Выполнение оператора WRITE (ПИСАТЬ) не влияет на указатель позиции файла.

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

  4. При выполнении оператора WRITE (ПИСАТЬ) логическая запись передается операционной системе.

  5. Количество позиций литер в записи, указанной именем- записи-1, не должно быть больше наибольшего или меньше наи­меньшего числа-литер, допустимого фразой RECORD IS VA­RYING (В ЗАПИСИ ПЕРЕМЕННОЕ ЧИСЛО), связанной с именем-файла, связанного с именем-записи-1. В любом случае выполнение оператора WRITE (ПИСАТЬ) неуспешно, операция записи не происходит, содержимое области записи не меняется, и состояние ввода-вывода файла, связанного с именем-записи-1, принимает значение, указывающее на причину условия (см. п. 1.3.5 настоящей части).

  6. Если во время выполнения оператора WRITE (ПИСАТЬ) с фразой NOT END-OF-PAGE (НЕ В КОНЦЕ СТРАНИЦЫ) не наступает условие конца страницы, то управление передается повелительному-оператору-2 следующим образом:

  1. если выполнение оператора WRITE (ПИСАТЬ) успешно, то управление передается после того, как запись записана, и после изменения состояния ввода-вывода имени-файла, связан­ного с именем-записи-1;

  2. если выполнение оператора WRITE (ПИСАТЬ) закончи­лось неуспешно, то управление передается после изменения сос­тояния ввода-вывода имени-файла, связанного с именем-запи­си-1, и после выполнения какой-либо процедуры, специфициро­ванной оператором USE AFTER STANDARD EXCEPTION (ИС­ПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ), применимым к имени-файла, связанного с именем- записи-1.

  1. Фраза END-WRITE (КОНЕЦ-ПИСАТЬ) ограничивает область действия оператора WRITE (ПИСАТЬ) (см. ч. 4, п. 6,4.3).

  2. Отношение следования последовательного файла уста­навливается порядком выполнения операторов WRITE (ПИ­САТЬ) при создании файла. Отношение не изменяется, | за исклю-1 |чением случая, когда записи добавляются в конец файла'Д

  3. Когда последовательный файл открыт как EXTEND (ДОПОЛНЯЕМЫЙ), то в результате выполнения оператора WRITE (ПИСАТЬ) записи будут добавляться в конец файла так, как если бы файл был открыт как OUTPUT (ВЫХОДНОЙ), Если в файле есть записи, то первая запись, записанная после выполнения оператора OPEN (ОТКРЫТЬ) с фразой EXTEND (ДОПОЛНЯЕМЫЙ), является следующей после последней за­писи в файле.

  4. Когда делается попытка записать запись за внешне опреде­ленными границами последовательного файла, то возникает усло­вие ошибки и содержимое области записи остается неизменным. Происходят следующие действия:

  1. значение состояния ввода-вывода для имени-файла, связан­ного с именем-записи-1, устанавливается в значение, указывающее на нарушение границ;

  2. если для имени-файла, связанного с именем-записи-1, явно или неявно специфицирована декларатива USE AFTER STAN­DARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТ- НОЙ ПРОЦЕДУРЫ ОШИБКИ), то будет выполняться эта декла­ративная процедура;

  3. если декларатива USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ) не специфицирована явно или неявно для имени фай­ла, связанного с именем-записи-1, то результат будет неопределен­ным.

  1. Если распознается конец катушки/тома и внешне опреде­ленные границы файла не превышены, то выполняются следующие операции:

  1. стандартная процедура конечных меток катушки/тома;

  2. смена катушки/тома. Указатель текущего тома изменяется для указания на следующую катушку/том, существующую для файла;

  3. стандартная процедура начальных меток катушки/тома.

  1. Фразы ADVANCING (ПРОДВИЖЕНИЯ) | и END-OF- PAGE (В КОНЦЕ СТРАНИЦЫ) | позволяют управлять верти­кальным позиционированием строки на печатаемой странице. Ес­ли фраза ADVANCING (ПРОДВИЖЕНИЯ) не используется, реа­лизацией будет обеспечиваться автоматическое продвижение, как если бы пользователь указал фразу AFTER ADVANCING 1 LINE (ПОСЛЕ ПРОДВИЖЕНИЯ 1 СТРОК). Если фраза ADVANCING (ПРОДВИЖЕНИЯ) используется, продвижение обеспечивается следующим образом:

  1. если целое-1 или данное, указанное идентификатором-2, по­ложительно, то печатаемая страница продвигается на число строк, равное этому значению;

  2. если значение данного, указанного идентификатором-2, от­рицательно, то результаты будут неопределенными;

  3. если целое-1 или значение данного, указанного идентифика­тором-2, равно нулю, то перемещение печатаемой страницы не происходит;

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

  5. если используется фраза BEFORE (ДО), строка выводится до продвижения печатаемой страницы в соответствии с приведен­ными выше правилами;

  6. если используется фраза AFTER (ПОСЛЕ), строка выводит­ся после продвижения печатаемой страницы в соответствии с при­веденными выше правилами;

  7. если во фразе ADVANCING (ПРОДВИЖЕНИЯ) указа­но слово PAGE (СТРАНИЦЫ) и в статье описания файла, свя­занного с выводимой записью, указана фраза LINAGE (ВЕР­СТКА), то запись выводится до или после (в зависимости от ис­пользуемой фразы) позиционирования устройства на следую­щую логическую страницу. Позиционирование устройства про­изводится на первую строку, которая может быть записана на следующей логической странице в соответствии со спецификаци­ей фразы LINAGE (ВЕРСТКА);

  8. если во фразе ADVANCING (ПРОДВИЖЕНИЯ) указано слово PAGE (СТРАНИЦЫ) ( и в статье описания файла, указан­ного с выводимой записью, не указана фраза LINAGE (ВЕРСТ­КА)! ; запись выводится до или после (в зависимости от исполь­зуемой фразы) позиционирования устройства на следующую физи­ческую страницу. Позиционирование на следующую физическую

страницу выполняется в соответствии с правилами, определенны­ми реализацией. Если понятие физической страницы не примени­мо к указанному устройству, реализацией обеспечивается такое продвижение, как если бы пользователь указал фразу BEFORE (ДО) или AFTER ADVANCING 1 LINE (ПОСЛЕ ПРОДВИЖЕ­НИЯ 1 СТРОК). ___

  1. Если во время выполнения оператора WRITE (ПИ­САТЬ) с фразой END-OF-PAGE (В КОНЦЕ СТРАНИЦЫ) дос­тигается логический конец печатаемой страницы, выполняется повелительный-оператор-1, указанный во фразе END-OF-PAGE (В КОНЦЕ СТРАНИЦЫ). Логический конец специфицирует­ся фразой LINAGE (ВЕРСТКА), связанной с именем-записп.

  2. Условие конца страницы возникает всякий раз, когда выполнение оператора WRITE (ПИСАТЬ) с фразой END-OF- PAGE (В КОНЦЕ СТРАНИЦЫ) вызывает печать или про­тяжку в области концовки тела страницы. Это происходит тог­да, когда при выполнении оператора WRITE (ПИСАТЬ) LINA­GE-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. ВВЕДЕНИЕ В МОДУЛЬ ОТНОСИТЕЛЬНОГО ВВОДА-ВЫВОДА

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

Модуль относительного ввода-вывода обеспечивает возмож­ность произвольного или последовательного доступа к записям файла массовой памяти. Каждая запись относительного файла од­нозначно идентифицируется целой положительной величиной, ука­зывающей относительную позицию логической записи в файле.

  1. Характеристика уровней

Уровень 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. Понятия языка

1.3.1.Организация

Файл с относительной организацией является файлом массо­вой памяти, любая запись которого может быть запомнена или из­влечена по значению относительного номера записи.

Концептуально файл с относительной организацией состоит из последовательной цепочки областей, каждая из которых может содержать логическую запись. Каждой из этих областей назнача­ется относительный номер записи. Каждая логическая запись от­носительного файла идентифицируется относительным номером записи ее о'бласти памяти. Например, десятая запись — это за­пись, адресуемая относительным номером записи 10 и находящая­ся в десятой области записи, независимо от того, были заполнены первые девять областей или нет.

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

  1. Методы доступа

При относительной организации последовательный доступ осуществляется в возрастающем порядке значений относительного номера записи. Доступными являются только записи, находящие- ся в данное время в файле. | Для установки исходной точки для последовательного извлечения записей может быть использо­ван оператор START (ПОДВЕСТИ).

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

При динамическом доступе программист может произволь­но переходить от последовательного доступа к произвольному и наоборот, применяя соответствующие формы операторов вво­да-вывода. *

  1. У к а з а т е л ь позиции файла

Указатель позиции файла — это логическое понятие, исполь­зуемое в этом документе для облегчения точной спецификации следующей записи, к которой должен осуществляться доступ при выполнении заданных операций ввода-вывода. На установку ука­зателя позиции файла влияют только операторы CLOSE (ЗАК- РЫТЬ), OPEN (ОТКРЫТЬ), READ (ЧИТАТЬ) и START | J (ПОДВЕСТИ). J Понятие указателя позиции файла не имеет смысла для файла, открытого для вывода или дополнения ’.

  1. С о с т о я н и е ввода-вывода

Состояние ввода-вывода — это логическое понятие, характери­зующееся двухсимвольным значением, которое устанавливается для указания состояния операции ввода-вывода во время выполне­ния операторов 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 EXCEP­TION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУ­РЫ ОШИБКИ), или, если ни одна такая процедура не примени­ма, после завершения стандартной системной процедуры обработ­ки ошибок ввода-вывода. Состояние ввода-вывода задает одно из следующих условий, возникающих после завершения операции ввода-вывода: