ГОСТ 22558-89 сторінка 57 з 116
стандартная процедура конечных меток катушки (тома);
смена катушек (томов). Значение указателя тома указывает на следующую существующую для файла катушку (том);
стандартная процедура начальных меток катушки (тома).
Если указатель позиции файла указывает, что не существует следующей логической записи [или что нет в наличии необя- I зательного входного файла, выполняются следующие действия в указанном порядке:
значение, полученное в результате установки указателя позиции файла, присваивается состоянию ввода-вывода, связанному с именем-файла-1, для обозначения условия конца (см. п. 1.3.5' настоящей части);
если фраза AT END (В КОНЦЕ) указана в операторе, выз4 вавшем это условие, управление передается повелительному-опе- ратору-1 во фразе AT END (В КОНЦЕ). Никакие процедуры USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ), связанные с именем- файла-1, не выполняются;
если фраза AT END (В КОНЦЕ) не указана, с именем-фай- ла-1 должна быть связана процедура USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ), которая в этом случае и выполняется. Возврат из этой процедуры осуществляется к следующему после оператора READ (ЧИТАТЬ) выполнимому оператору.
Если возникает условие конца, выполнение оператора READ (ЧИТАТЬ) является неуспешным.
Если во время выполнения оператора READ (ЧИТАТЬ) условие конца не возникает, фраза AT END (В КОНЦЕ) игнорируется, если она указана, и выполняются следующие действия:
устанавливается значение указателя позиции файла и изменяется значение состояния ввода-вывода, связанного с именем- файла-1;
если существует условие особой ситуации, но не условие конца, управление передается процедуре USE AFTER EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ ПРОЦЕДУРЫ ОШИБКИ) согласно правилам оператора USE (ИСПОЛЬЗОВАТЬ), применимого к имени-файла-1 (п. 4.6 настоящей части);
если условие особой ситуации не существует, запись становится доступной в области записи и выполняются любые неявные пересылки, предопределенные фразой INTO (В). Управление передается в точку выхода оператора READ( ЧИТАТЬ) или повели- тельному-оператору-2, если он указан. В последнем случае выполнение продолжается согласно правилам для операторов, указанных в повелительном-операторе-2. Если выполняется оператор ветвления или условный оператор, вызывающие явную передачу управления, оно передается в соответствии с правилами для этих операторов, в противном случае после завершения выполнения повели- тельного-оператора-2 управление передается в точку выхода оператора READ (ЧИТАТЬ).
После неуспешного завершения выполнения оператора 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
END-WRITE]
ПИСАТЬ имя-записи-1 [ИЗ ПОЛЯ идентификатор-1]
I ПРОДВИЖЕНИЯ
I ПОСЛЕ ( ДО
1 идентификатор-2 1 СурОК- j [ целое-1 I
1 мнемоническое-имя-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 (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ), что и ; соответствующий выходной файл.
Побачили розбіжність з офіційним текстом?