После неуспешного завершения выполнения оператора READ (ЧИТАТЬ) содержимое соответствующей области записи не определено; указателю позиции файла присвоено значение, указывающее, что правильная следующая запись не установлена.
Если число позиций литер прочитанной записи меньше чем минимальный размер, указанный в статьях описания записи для имени-файла-1, то часть области записи, находящаяся справа от последней прочитанной литеры, является неопределенной. Если число позиций литер в читаемой записи больше, чем максимальный размер, указанный в статьях описания записи для имени-файла-1, то запись усекается справа до максимального размера. В любом из этих случаев оператор READ (ЧИТАТЬ) выполняется успешно и состояние ввода-вывода устанавливается для указания, что произошло нарушение длины записи (см. п. 1.3 настоящей части).
Фраза END-READ (КОНЕЦ-ЧИТАТЬ) ограничивает область действия оператора READ (ЧИТАТЬ) (см. ч. 4, п. 4.6.3)
.4.5 Оператор REWRITE (ОБНОВИТЬ)
Назначение
Оператор REWRITE (ОБНОВИТЬ) логически заменяет запись в файле на устройстве массовой памяти.
Общий формат
REWRITE имя-записи-1 [FROM идентификатор-1]
ОБНОВИТЬ имя-записи-1 [ИЗ ПОЛЯ идентификатор-1]
Синтаксические правила
Имя-записи-1 и идентификатор-1 не должны относиться к одной и той же области памяти.
Имя-записи-1 — это имя логической записи в секции файлов раздела данных. Оно может быть уточнено.
Общие правила
Во время выполнения этого оператора файл, связанный с именем-записи-1, должен быть файлом массовой памяти и должен быть открыт как входной-выходной (см. п. 4.3 настоящей части).
Последним оператором ввода-вывода для соответствующего файла перед выполнением оператора REWRITE (ОБНОВИТЬ) должен быть успешно выполненный оператор READ (ЧИТАТЬ). Система управления массовой памятью (СУМП) логически заменяет запись, которая была извлечена оператором READ (ЧИТАТЬ).
Логическая запись, включенная в файл при успешном выполнении оператора REWRITE (ОБНОВИТЬ), становится недос- тупной в области записи, за исключением случая, когда имя-фай- ла, связанное с именем-записи-1, описано во фразе SAME RECORD AREA (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ). Логическая запись доступна программе и как запись файла, связанного с име- нем-записи-1, и как запись других файлов, указанных в той же фразе SAME RECORD AREA (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ), что и соответствующий выходной файл.
Выполнение оператора REWRITE (ОБНОВИТЬ) с фразой FROM (ИЗ ПОЛЯ) эквивалентно выполнению следующих операторов в указанном порядке:
Оператор
MOVE идентификатор-1 ТО имя-записи-1
(ПОМЕСТИТЬ идентификатор-1 В имя-записи-1) соответственно правилам, описанным для оператора MOVE (ПОМЕСТИТЬ);
тот же оператор REWRITE (ОБНОВИТЬ) без фразы FROM (ИЗ ПОЛЯ).
После завершения выполнения оператора REWRITE (ОБНОВИТЬ) информация в области, указанной идентификатором-1, остается доступной, даже если информация в области, указанной именем-записи-1, не является доступной кроме случая, опреде-
ленного фразой SAME RECORD AREA (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ).
Выполнение оператора REWRITE (ОБНОВИТЬ) не влияет на указатель позиции файла.
Выполнение оператора REWRITE (ОБНОВИТЬ) вызывает обновление состояния ввода-вывода для файла, связанного с име- нем-записи-1 (см. п. 1.3.5 настоящей части).
При выполнении оператора REWRITE (ОБНОВИТЬ) логическая запись передается операционной системе.
Если число позиций литер, описанное в записи, указанной именем-записи-1, не равно числу позиций литер в заменяемой за^ писи, то выполнение оператора REWRITE (ОБНОВИТЬ) будет неуспешным, операции обновления не произойдет, содержимое области записи не изменится и состояние вовда-вывода файла, связанного с именем-записи-1, примет значение, указывающее причину условия (особого состояния) (см. п. 1.3.5 настоящей части).
4 6. Оператор USE (ИСПОЛЬЗОВАТЬ)
Назначение
Оператор USE (ИСПОЛЬЗОВАТЬ) определяет процедуры обработки ошибок ввода-вывода дополнительно к стандартным процедурам, предоставляемым системой управления вводом-выводом.
О
PROCEDURE
J EXCEPTION (ERROR
USE AFTER STANDARD
І {имя-файла-1} ]
INPUT I
і OUTPUT
ON -
EXTEND
СТАНДАРТНОЙ ПРОЦЕДУРЫ
ЬО J
ИСПОЛЬЗОВАТЬ ПОСЛЕ
ОШИБКИ
{имя-файла-1} |- ■ -| ВХОДНЫХ выходных
ДЛЯ ВХОДИ ЫХ-ВЫХОДНЫХ
дополняемых
Синтаксические правила
Оператор USE (ИСПОЛЬЗОВАТЬ) должен непосредственно следовать за заголовком секции декларативной части раздела процедур и должен быть единственным в предложении. Остальная часть декларативной секции должна состоять из одного пли более процедурных параграфов, определяющих процедуры, которые должны использоваться.
Сам оператор USE (ИСПОЛЬЗОВАТЬ) никогда не выполняется; он только определяет условия, вызывающие выполнение указанных после него процедур.
Появление имени-файла-1 в операторе USE (ИСПОЛЬЗОВАТЬ) не должно требовать одновременного выполнения более чем одной декларативной секции.
Слова ERROR и EXCEPTION обозначают особую ситуацию и являются синонимами.
Файлы, к которым явно или неявно обращаются в операторе USE (ИСПОЛЬЗОВАТЬ), могут иметь различную организацию или доступ.
Каждая из фраз INPUT (ВХОДНЫХ), OUTPUT (ВЫХОДНЫХ), 1-0 (ВХОДНЫХ-ВЫХОДНЫХ) и EXTEND (Д0П0Л-1 I НЯЕМЫХ) может указываться лишь раз в декларативной части раздела процедур.
Общие правила
Декларативные процедуры могут быть включены в любую исходную Кобол-программу, независимо от того, содержит ли эта программа другую программу или сама содержится в другой программе. Декларатива вызывается тогда, когда во время выполнения программы выполняются условия, описанные в операторе USE (ИСПОЛЬЗОВАТЬ), предшествующем декларативе. Только одна декларатива внутри отдельно скомпилированной программы, содержащей оператор, который вызвал уточняющее условие, вызывается тогда, когда выполняется какое-либо из условий, описанных в операторе USE (ИСПОЛЬЗОВАТЬ), предшествующем декларативе, во время выполнения программы. Если не существует уточняющей декларативы в отдельно скомпилированной программе, то декларатива не выполняется.
Внутри декларативной процедуры не должно быть обращений к каким-либо процедурам вне декларативной части раздела процедур.
К именам процедур, связанных с оператором USE (ИСПОЛЬЗОВАТЬ), могут быть обращения в другой декларативной секции или в недекларативной процедуре только оператором PERFORM (ВЫПОЛНИТЬ)
.Когда имя-файла-1 описано явно, то к имени-файла-1 не применяется никаких других операторов USE (ИСПОЛЬЗОВАТЬ).
Процедуры, связанные с оператором USE (ИСПОЛЬЗОВАТЬ), выполняются системой управления вводом-выводом после завершения стандартной программы ошибки ввода-вывода при неудачном выполнении операции ввода-вывода, если только не сработает фраза AT END (В КОНЦЕ). При выполнении процедур соблюдаются следующие правила:
если указано имя-файла-1, то соответствующая процедура выполняется при выполнении условия, описанного в операторе USE (ИСПОЛЬЗОВАТЬ);
если указано INPUT (ВХОДНЫХ), то соответствующая процедура выполняется при выполнении условия, описанного в операторе USE (ИСПОЛЬЗОВАТЬ), для какого-либо файла, открытого для ввода, или же в процессе открытия для ввода, за исключением файлов, указываемых именем-файла-1 в другом операторе USE (ИСПОЛЬЗОВАТЬ), описывающем такое же условие;
если указано OUTPUT (ВЫХОДНЫХ), то соответствующая процедура выполняется при выполнении условия, описанного в операторе USE (ИСПОЛЬЗОВАТЬ), для какого-либо файла, отк-, рытого для вывода, или же в процессе открытия для вывода, за, исключением файлов, указываемых именем-файла-1 в другом one-, раторе USE (ИСПОЛЬЗОВАТЬ), описывающем такое же условие.,
если указано 1-0 (ВХОДНЫХ-ВЫХОДНЫХ), то соответ-, ствующая процедура выполняется при выполнении условия, опи-, санного в операторе USE (ИСПОЛЬЗОВАТЬ), для какого-либо файла, открытого для ввода-вывода или в процессе открытия для, ввода-вывода, за исключением файлов, указанных именем-файла-1 в другом операторе USE (ИСПОЛЬЗОВАТЬ), описывающем та-, кое же условие;
если указано EXTEND (ДОПОЛНЯЕМЫХ), то соответствующая процедура выполняется при выполнении условия, описанного в операторе USE (ИСПОЛЬЗОВАТЬ), для какого-либо файла, открытого для дополнения или процессе открытия для дополнения, за исключением файлов, указанных именем-файла-1 в другом операторе USE (ИСПОЛЬЗОВАТЬ), описывающем такое же условие.
После выполнения процедуры, связанной с оператором1 USE (ИСПОЛЬЗОВАТЬ), управление передается вызывающей программе в системе управления вводом-выводом. Если значение) состояния ввода-вывода не указывает на критическую ошибку вво-' да-вывода, то система управления вводом-выводом возвращает управление оператору, следующему за оператором ввода-вывода, выполнение которого вызвало ошибку. Если значение состояния вво
да-вывода указывает на критическую ошибку, то действие определяется реализацией.
В процедуре, связанной с оператором USE (ИСПОЛЬЗОВАТЬ), не должны выполняться никакие операторы, которые могут потребовать выполнения процедуры, связанной с другим оператором USE (ИСПОЛЬЗОВАТЬ), вызванной ранее и еще не вернувшей управление вызвавшей ее программе.
4.7. Оператор WRITE (ПИСАТЬ)
Назначение
Оператор WRITE (ПИСАТЬ) включает логическую запись в выходной файл. Он используется также для вертикального позиционирования строк на логической странице.
WRITE имя-записи-l [FROM идентификатор-1]
[
повелительный оператор-2]
END-OF-PAGE
EOP
повелительный оператор-1]
мнемоническое-имя-1
PAGE
I V
LINE
LINES
идентификатор-2 ]
целое-1 (
[NOT AT
I END-OF-PAGE lAT I EOP
ADVANCING
I BEFORE (AFTER
ПИСАТЬ имя-записи-1 [ИЗ ПОЛЯ идентификатор-1]
I
ПРОДВИЖЕНИЯ
I ПОСЛЕ ( ДО
1 идентификатор-2 1 СурОК- j [ целое-1 I1 мнемоническое-имя-1 I СТРАНИЦЫ
[В КОНЦЕ СТРАНИЦЫ повелительный-опер атор-1 ]
[НЕ В КОНЦЕ СТРАНИЦЫ повелительный-оператор-2]
[КОНЕЦ-ПИСАТЬ
]Синтаксические правила
Имя-записи-1 и идентификатор-1 не должны относиться к одной и той же области памяти.
Имя-записи-1 является именем логической записи в секции файлов раздела данных и может быть уточнено.
Фраза ADVINCING (ПРОДВИЖЕНИЯ) мнемониче- ское-имя-1 не может быть указана для файла, который связан со статьей описания файла, содержащей фразу LINAGE (ВЕРСТКА).
Идентификатор-2 должен относиться к элементарному целому данному.
Целое-1 может быть положительным числом или нулем, но не должно быть отрицательным.
Когда специфицируется мнемоническое-имя-1, то имя связывается с особым свойством, описанным реализацией. Мне- моническое-имя-1 определяется в параграфе SPECIAL-NAMES (СПЕЦИАЛЬНЫЕ-ИМЕНА) раздела оборудования.
Фразы ADVANCING (ПРОДВИЖЕНИЯ СТРАНИЦЫ) и END-OF-PAGE (В КОНЦЕ СТРАНИЦЫ) не долж- : ны быть специфицированы в одном операторе WRITE (ПИ- : САТЬ).
Если указана фраза END-OF-PAGE (В КОНЦЕ СТРА- ■ НИЦЫ) или NOT END-OF-PAGE (НЕ В КОНЦЕ СТРАНИЦЫ), то фраза LINAGE (ВЕРСТКА) должна быть указана в статье описания соответствующего файла.
Слова END-OF-PAGE и ЕОР являются эквивалентами.
О б щ и е правила
Файл, указанный именем-файла, связанным с именем-за- писи-1, должен быть открыт для вывода или дополнения I ко времени выполнения этого оператора (см. п. 4.3.1 настоящей части) .
Логическая запись, включаемая в файл при успешном выполнении оператора WRITE (ПИСАТЬ), становится недоступной в области записи. | Исключение представляют случаи, когда имя файла, связанное с именем-записи-1, указано в фразе SAME RECORD AREA (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ). Если имя от- • носится к имени-файла, указанному во фразе SAME RECORD AREA (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ), логическая запись доступна программе и как запись файла, связанного в именем-записи-1, и как запись других файлов, указанных в той же фразе і SAME RECORD AREA (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ), что и ; соответствующий выходной файл
.ЯЗЫК ПРОГРАММИРОВАНИЯ КОБОЛ
ГОСТ 22558—89
(СТ СЭВ 6184—88, ИСО 1989—85)
Части 1—7
Редактор В. П. Огурцов
Технический редактор О. И. Никитина
Корректор И. Д. Чехотина
Сдано в наб. ЗС.01.90 Подп. в печ. 29.04.91 28,0 усл. п. л. 28,25 усл. кр.-отт, 29,60 уч.-изд. л.
Тир. 11000 Цена 5 р. 90 к.
Ордена «Знак Почета» Издательство стандартов, 123557, Москва, ГСП,
Новопреспенсккй пер.. 3.
Калужская типография стандартов, ул. Московская, 236. Зак. 254
ГОСУДАРСТВЕННЫЙ СТАНДАРТ
СОЮЗА ССР
ЯЗЫК ПРОГРАММИРОВАНИЯ
КОБОЛ
ГОСТ 22558—89
(СТ СЭВ 6184-88, ИСО 1989-85)
ЧАСТИ 8—17
Издание официальное
10 р. 70 к.
КОМИТЕТ СТАНДАРТИЗАЦИИ И МЕТРОЛОГИИ СССР
МоскваРезультаты выполнения оператора WRITE (ПИСАТЬ) с фразой FROM. (ИЗ ПОЛЯ) эквивалентны выполнению следующих операторов в указанном порядке:
оператор MOVE идентификатор-1 ТО имя-записи-1
(ПОМЕСТИТЬ идентификатор-1 В имя-записи-1) соответственно правилам, специфицированным в операторе MOVE (ПОМЕСТИТЬ);