Если задана фраза ALL (ВСЕМИ), одно или несколько последовательных вхождений литерала-1 или значения данного, представленного идентификатором-2, обрабатываются так же, как одно вхождение, которое помещается в принимающее поле согласно общему правилу 13 г.
Когда при просмотре данного, представленного идентификатором-!, обнаруживаются два последовательных вхождения ограничителя, текущее принимающее поле заполняется пробелами, если оно описано как буквенное или буквенно-цифровое, или нулями, если оно описано как числовое.
Литерал-1 или значение данного, представленного идентификатором-2, может содержать любые литеры из множества литер машины.
Каждый литер ал-1 или данное, представленное идентификатором-2, представляет один ограничитель. Когда ограничитель содержит две или более литеры, эти литеры должны находиться в указанном ограничителем порядке в последовательных позициях пересылаемого данного, чтобы быть распознанными в качестве ограничителя.
Если во фразе DELIMITED BY (ОГРАНИЧИВАЯСЬ) задано два или более ограничителя, между ними существует условие OR (ИЛИ). Каждый ограничитель поочередно сравнивается с рассматриваемыми позициями, пересылаемого поля в указанной последовательности. При обнаружении совпадения рассматриваемые литеры считаются единым ограничителем. Ни одна литера в пересылаемом поле не может рассматриваться принадлежащей нескольким ограничителям.
К началу работы оператора UNSTRING (РАЗОБРАТЬ) данное, определяемое идентификатором-4, является текущим принимающим полем, в которое пересылаются литеры данного, представленного идентификатором-1. Позиции последнего просматриваются согласно следующим правилам:
если задана фраза POINTER (УКАЗАТЕЛЬ), строка литер, представленная идентификатором-1, просматривается, начиная с относительной позиции литеры, указанной значением данного, представленного идентификатором-?. Если фраза POINTER (УКАЗАТЕЛЬ) не задана, проверка строки литер начинается с самой левой ее позиции;
если задана фраза DELIMITED BY (ОГРАНИЧИВАЯСЬ), просмотр прекращается при обнаружении вхождения ограничителя, заданного литералом-1 или значением данного, представленного идентификатором-2 (см. общее правило 11). Если фраза DELIMITED BY (ОГРАНИЧИВАЯСЬ) не задана, число просматриваемых литер равно размеру текущего принимающего данного (однако, если знак принимающего данного занимает отдельную позицию литеры, число просматриваемых литер полагается на единицу меньшим размера текущего принимающего поля данного).
Если вхождение ограничителя не обнаружено, просмотр оканчивается на последней позиции литеры данного, представленного идентификатором-1;
просмотренные литеры (за исключением литер, совпадающих с ограничителем, если они имеются) рассматриваются как элементарные буквенно-цифровые данные и пересылаются в текущее принимающее поле согласно правилам оператора MOVE (ПОМЕСТИТЬ) (см. п. 6.19 настоящей части);
если задана фраза DELIMITER (ОГРАНИЧИТЕЛЬ), обнаруженные при просмотре литеры ограничителя рассматриваются как элементарное буквенно-цифровое данное и помещаются согласно правилам оператора MOVE (ПОМЕСТИТЬ) в данное, представленное идентификатором-5.
Если вхождение ограничителя в данное, представленное идентификатором-1, не обнаружено, то данное, представленное идентификатором-5, заполняется пробелами; |
если задана фраза COUNT IN (СЧЕТ), то количество I просмотренных литер (исключая литеры ограничителя, если они | имеются) помещается согласно правилам для перемещения ї элементарного данного в данное, представленное идентифика- [ тором-6; S
если задана фраза DELIMITED BY (ОГРАНИЧИВАЯСЬ), то после заполнения очередного принимающего данного про- | смотр продолжается с первой литеры справа от ограничителя., f Если фраза DELIMITED BY (ОГРАНИЧИВАЯСЬ) не задана, I' просмотр продолжается от первой литеры, находящейся справа | от последней пересланной литеры; | I ж) после завершения пересылки в принимающее данное, [ представленное идентификатором-4, текущим принимающим ‘ полем становится данное, представленное следующим вхожде- ( ниєм идентификатора-4, и все описанные выше действия повторяются до тех пор, пока не будут исчерпаны все литеры в данном, определяемом идентификатором-1, или не будут заполнены все принимающие поля.
Начальная установка значения данного, связанного с фразой POINTER (УКАЗАТЕЛЬ) или TALLYING (СЧИТАЯ), осуществляется пользователем.
' (15) Значение данного, представленного идентификатором-?, увеличивается на единицу при просмотре каждой литеры в данном, представленном идентификатором-1. После завершения выполнения оператора UNSTRING (РАЗОБРАТЬ) с фразой POINTER (УКАЗАТЕЛЬ) значение данного, представленного идентификатором-?, становится равным начальному значению плюс число просмотренных литер данного, представленного идентификатором-1.
После завершения выполнения оператора UNSTRING і (РАЗОБРАТЬ) с фразой TALLYING (СЧИТАЯ) значение данного, представленного идентификатором-8, становится равным его начальному значению плюс число принимающих полей, участвовавших в выполнении оператора.
Условие переполнения возникает при следующих ситуациях:
если к моменту начала ^работы оператора UNSTRING (РАЗОБРАТЬ) значение данного, представленного идентификатором-?, меньше 1 или больше размера данного, представленного идентификатором-1;
если в некоторый момент выполнения оператора UNSTRING (РАЗОБРАТЬ) данное, представленное идентификатором-!, содержит непросмотренные позиции, а все принимающие поля уже использованы.
При обнаружении условия переполнения выполнение оператора UNSTRING (РАЗОБРАТЬ) прекращается; если указана фраза NOT ON OVERFLOW (БЕЗ ПЕРЕПОЛНЕНИЯ), то она игнорируется, а управление передается на конец оператора UNSTRING (РАЗОБРАТЬ); если же была указана фраза ON OVERFLOW (ПРИ ПЕРЕПОЛНЕНИИ), то управление передается повелительному-оператору-1. В этом случае выполнение продолжается согласно правилам для операторов, указанных в повелительном-операторе-1. Если выполняется оператор ветвления процедур или условный оператор, вызывающий явную передачу управления, управление передается согласно прави- лам для соответствующих операторов; в противном случае после завершения выполнения повелительного-оператора-1 управление передается на конец оператора UNSTRING (РАЗОБРАТЬ).
Фраза END-UNSTRING (КОНЕЦ-РАЗОБРАТЬ) ограничивает область действия оператора UNSTRING (РАЗОБРАТЬ) (см. ч. 4, п. 6.4.3).
Если во время выполнения оператора UNSTRING (РАЗОБРАТЬ) описанные в пункте (17) условия не возникли, после завершения пересылки данных согласно другим общим правилам фраза OVERFLOW (ПРИ ПЕРЕПОЛНЕНИИ), если она задана, игнорируется, а управление передается на конец оператора UNSTRING (РАЗОБРАТЬ) или, если указана фраза NOT OVERFLOW (БЕЗ ПЕРЕПОЛНЕНИЯ), повелительному- оператору-2. Если управление передано повелительному-опе- ратору-2, выполнение продолжается согласно правилам для операторов, указанных в повелительном-операторе-2. Если выполняется оператор ветвления процедур или условный оператор, подразумевающий явную передачу управления, управление передается согласно правилам для соответствующих операторов; в противном случае после завершения выполнения по- велительного-оператора-2 управление передается на конец оператора UNSTRING (РАЗОБРАТЬ).
Если идентификатор-1, идентификатор-2 и идентифи-і катор-3 занимают ту же область памяти, что и идентификатор-5, идентификатор-6, идентификатор-7 или идентификатор-8, или если идентификатор-4, идентификатор-5 и идентификатор-6 занимают ту же область памяти, что и идентификатор-7 или идентификатор-8, или если идентификатор-7 и идентификатор-8 занимают одну и ту же область памяти, результат выполнения оператора UNSTRING (РАЗОБРАТЬ) не определен, даже если эти идентификаторы описаны одной и той же статьей описания данных (см. п. 6.4.5 настоящей части).
7. ОТЛАДКА В ЯДРЕ
Общее описание
Средства отладки в ядре обеспечивают пользователя отладочными строками и переключателем времени компиляции для отладочных строк.
Переключатель времени компиляции
Фраза WITH DEBUGGING MODE (В РЕЖИМЕ ОТЛАДКИ)’ является частью параграфа SOURCE-COMPUTER (ИСХОД- НАЯ-МАШИНА) (см. п. 4.3 настоящей части). Она служит переключателем времени компиляции для отладочных строк, содержащихся в отдельно компилируемой программе
.Если в отдельно компилируемой программе указана фраза WITH DEBUGGING MODE (В РЕЖИМЕ ОТЛАДКИ), все отла- дфіные строки компилируются, как определено в данном представлений ядра. Если же фраза WITH DEBUGGING MODE (В РЕЖИМЕ ОТЛАДКИ) не указана, все отладочные строки компилируются так, как если бы они представляли строки комментариев.
Наличие или отсутствие фразы WITH DEBUGGING MODE (В РЕЖИМЕ ОТЛАДКИ) логически определяется после обработки все» операторов COPY (КОПИРОВАТЬ) и REPLACE (ЗАМЕНИТЬ).
Отладочные строки
Отладочной строкой называется строка с литерой D(T) в области индикатора строки. Любая отладочная строка, состоящая только из пробелов от границы А до границы R, считается пустой.
Содержимое отладочной строки должно быть таким, при котором программа является синтаксически правильной независимо от того, содержит ли она отладочные строки или они рассматриваются как комментарии.
После обработки всех операторов COPY (КОПИРОВАТЬ) и REPLACE (ЗАМЕНИТЬ) отладочная строка рассматривается как комментарий, если в параграфе SOURCE-COMPUTER (ИСХОД- НАЯ-МАШИНА) не указана фраза WITH DEBUGGING MODE (В РЕЖИМЕ ОТЛАДКИ).
Допускаются несколько последовательно расположенных отладочных строк.
В отдельно компилируемой программе отладочные строки могут располагаться только после параграфа OBJECT-COMPUTER (РАБОЧАЯ-МАШИНА).
Часть 7. МОДУЛЬ ПОСЛЕДОВАТЕЛЬНОГО ВВОДА ВЫВОДА
ВВЕДЕНИЕ В МОДУЛЬ ПОСЛЕДОВАТЕЛЬНОГО ВВОДА ВЫВОДА
Назначение
Модуль последовательного ввода-вывода обеспечивает возможность доступа к записям файла в установленной последовательности. Последовательность устанавливается в результате занесения записей в файл.
Характеристика уровней
Уровень 1 последовательного ввода-вывода обеспечивает неполные возможности для статей управления файлом, статей описания файла и статей параграфа I-O-CONTROL (УПРАВЛЕНИЕ- ВВОДОМ-ВЫВОДОМ). В разделе процедур уровень 1 последовательного ввода-вывода обеспечивает ограниченные возможности операторов CLOSE (ЗАКРЫТЬ), USE (ИСПОЛЬЗОВАТЬ), 396OPEN (ОТКРЫТЬ), WRITE (ПИСАТЬ) и READ (ЧИТАТЬ). Полные возможности обеспечиваются для оператора REWRITE (ОБНОВИТЬ).
Уровень 2 последовательного ввода-вывода обеспечивает полные возможности для статей управления файлом, статей описания файла и статей параграфа I-O-CONTROL (УПРАВ- ЛЕНИЕ-ВВОДОМ-ВЫВОДОМ). В разделе процедур уровень 2 последовательного ввода-вывода обеспечивает полные возможности операторов CLOSE (ЗАКРЫТЬ), OPEN (ОТКРЫТЬ), READ (ЧИТАТЬ), REWRITE (ОБНОВИТЬ), WRITE (ПИСАТЬ) и USE (ИСПОЛЬЗОВАТЬ).
Понятия языка
Организация
Последовательный файл организован так, что каждая запись* кроме последней, имеет единственную запись-преемника и каждая запись, кроме первой, имеет единственную запись-предшественника. Это отношение следования устанавливается оператором WRITE (ПИСАТЬ) при создании файла. Однажды установленное отношение следования не меняется. Исключением является слу- j чай, когда записи добавляются в конец файла.
Последовательно организованный файл массовой памяти имеет ту же логическую структуру, что и файл в последовательной запоминающей среде; однако последовательный файл массовой памяти может обновляться на месте. При использовании этого метода новые записи не могут быть добавлены в файл, а каждая заменяющая запись должна иметь тот же размер, что и исходная запись.
Метод доступа
При последовательном доступе порядок, в котором осуществляется доступ к записям, соответствует порядку, в котором записи первоначально записывались.
У к а з а т е л ь текущего тома
Указатель текущего тома — это логическое понятие, используемое в этом документе для облегчения точного задания текущего тома последовательного файла.
У к а з а т е л ь позиции файла
Указатель позиции в файле —• это логическое понятие, используемое в этом документе для облегчения точной спецификации следующей записи, к которой должен осуществляться доступ при выполнении заданных операций ввода-вывода. На установку указателя позиции файла влияют только операторы CLOSE (ЗАКРЫТЬ), OPEN (ОТКРЫТЬ) и READ (ЧИТАТЬ). Понятие указателя позиции файла не имеет смысла для файла, открытого как выходной I или как дополняемый
С о с т о я н и е ввода-вывода
Состояние ввода-вывода — это логическое понятие, характеризующееся двухсимвольным значением, которое устанавливается для указания состояния операции ввода-вывода во время выполнения операторов CLOSE (ЗАКРЫТЬ), OPEN (ОТКРЫТЬ), READ (ЧИТАТЬ), REWRITE (ОБНОВИТЬ) или WRITE (ПИСАТЬ) перед выполнением любого повелительного оператора, связанного с этим оператором ввода-вывода, и перед выполнением любой применимой процедуры USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУ- РЫ ОШИБКИ). Значение состояния ввода-вывода доступно Ко- бол-программе посредством фразы FILE STATUS (СОСТОЯНИЕ ФАЙЛА) в статье управления файлом.
Состояние ввода-вывода определяет также, будет ли выполняться процедура USE AFTER STANDARD EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ ОШИБКИ). Если возникает любое условие, отличное от тех, которые определены ниже как «успешное завершение», может выполняться указанная процедура по правилам, заданным для оператора USE (ИСПОЛЬЗОВАТЬ). Если возникает одно из условий «успешное завершение», никакая процедура такого типа не будет выполняться (п. 4.6 настоящей части).