Если вид файла не OUT—FILE, то возбуждается исключение MODE-ERROR.
procedure SKIP PAGE (FILE: in FILE_TYPE);
procedure SKIP PAGE;
Оперирует над файлами вида IN_FILE. Из файла читает и пропускает (игнорирует) все символы и признаки конца строчки до признака конца страницы. Увеличивает текущий номер страницы на единицу, текущие номера столбца и строчки устанавливает равными единице.
Если вид файла не IN—FILE, то возбуждается исключение MODE-ERROR. При попытке прочитать признак конца файла возбуждается исключение END-ERROR.
function END_OF_PAGE (FILE: in FILE_TYPE) return BOOLEAN;
function END_OF_PAGE return BOOLEAN;
Оперирует над файлом вида IN_FILE. Возвращает значение TRUE, если очередными элементами файла является последовательность из признаков конца строчки и страницы или если очередным элементом является признак конца файла; в противном случае возвращает значение FALSE.
Если вид файла отличен от IN_FILE, то возбуждается исключение MODE-ERROR.
function END_OF_FILE (FILE: in FILE_TYPE) return BOOLEAN;
function END_OF_FILE return BOOLEAN;
Оперирует над файлом вида IN_FILE. Возвращает значение TRUE, если очередным элементом файла является признак конца файла или последовательность из признаков конца строчки, страницы и файла; в противном случае возвращает значение FALSE.
Если вид файла отличен от IN—FILE, то возбуждается исключение MODE-ERROR.
Следующие подпрограммы предназначены для управления текущей позицией чтения или записи в файл. Во всех этих подпрограммах в качестве файла по умолчанию используется текущий файл вывода.
procedure SET_COL (FILE: in FILE TYPE;
TO: in POSITIVE-COUNT);
procedure SET-COL (TO: in POSITIVE-COUNT);
Для файла вида OUT_FILE.
Если значение параметра ТО больше текущего номера столбца, то выводит пробелы, причем после вывода каждого пробела текущий номер столбца увеличивает на единицу. Это повторяется до тех пор, пока текущий номер столбца не станет равным значению параметра ТО. Если значение параметра ТО было равно текущему номеру столбца, то никаких действий не производит. Если значение параметра ТО меньше текущего номера столбца, то сначала выполняет действия, эквивалентные вызову процедуры NEW—LINE (SPACING = 1), затем выводит (ТО — 1) пробелов, и текущий номер столбца устанавливает равным значению параметра ТО.
Если при ограниченной длине строчки (т. е. LINE_LENGTH для этого файла имеет ненулевое значение) значение параметра ТО оказалось больше LINE_LENGTH, то возбуждается исключение LAYOUT—ERROR.
Для файла вида IN FILE.
Читает и пропускает (игнорирует) отдельные символы, признаки конца строчки и страницы до тех пор, пока номер столбца очередного, подлежащего чтению символа, не станет равным значению параметра ТО. Если текущий номер столбца с самого начала равен этому значению, то никаких действий не производит. При передаче каждого символа или признака конца должным образом корректирует текущие номера столбца, строчки и страницы, как при работе процедуры GET (см. разд. 14.3.5). (Короткие строчки будут пропущены целиком, пока не встретится строчка, содержащая символ в указанной позиции от начала строчки.)
При попытке чтения признака конца файла возбуждается исключение END_ERROR.
procedure SET LINE (FILE: in FILETYPE;
TO: in POSITIVE_COUNT);
procedure SET_LINE (TO: in POSITIVE_COUNT);
Для файла вида OUT_FILE.
Если значение параметра ТО больше текущего номера строчки, то эта процедура эквивалентна повторным вызовам NEW_LINE (SPACING = 1) до тех пор, пока текущий номер строчки не станет равным значению параметра ТО. Если значение параметра ТО было равно текущему номеру строчки, то никаких действий не производит. Если значение параметра ТО меньше текущего номера строчки, то результат вызова процедуры эквивалентен вызову NEW_PAGE, за которым следует вызов NEW_LINE с параметром SPACING, равным (ТО — 1).
Если при ограниченной длине страницы (т. е. PAGE-LENGTH для этого файла имеет ненулевое значение) значение параметра ТО оказалось больше PAGE—LENGTH, то возбуждается исключение LAYOUT—ERROR.
Для файла вида IN_FILE.
Результат эквивалентен повторным вызовам процедуры SKIP_LINE (SPACING = 1) до тех пор, пока текущий номер строчки не примет значение параметра ТО. Если текущий номер строчки с самого начала был равен значению параметра ТО, то никаких действий не производит. (Короткие страницы будут пропущены целиком, пока не встретится страница, содержащая строчку в указанной позиции от начала страницы.)
При попытке чтения признака конца файла возбуждается исключение END_ERROR.
function COL (FILE: in FILE_TYPE) return POSITIVE-COUNT ;
function COL return POSITIVE-COUNT;
Возвращает текущий номер столбца.
Если этот номер больше значения COUNT'LAST, то возбуждается исключение LAYOUT_ERROR.
function LINE (FILE: in FILE_TYPE) return POSITIVE-COUNT;
function LINE return POSITIVE-COUNT:
Возвращает текущий номер строчки.я.
Если этот номер больше значения COUNT'LAST, то возбуждается исключение LAYOUT-ERROR.
function PAGE (FILE: in FILE„TYPE) return POSITIVE-COUNT;
function PAGE return POSITIVE-COUNT;
Возвращает текущий номер страницы.
Если этот номер больше значения COUNT'LAST, то возбуждается исключение LAYOUT-ERROR.
Номера столбца, строчки или страницы, вообще говоря, могут превысить значение COUNT'LAST (в результате ввода или вывода достаточно большого числа символов, строчек или страниц). При этом никакое исключение не возбуждается. Однако при вызове функций COL, LINE или PAGE, если соответствующий номер оказался больше COUNT'LAST, то возбуждается исключение LAYOUT-ERROR.
Примечание. Признак конца страницы пропускается, если пропускается предшествующий ему признак конца строчки. Реализация может представить последовательность из таких двух признаков конца одним символом, при условии, что он будет распознаваться при вводе.
П р о ц е д у р ы обмена
В разд. 14.3.5—14.3.10 описаны процедуры GET и PUT для элементов типов CHARACTER, STRING, числового и перечислимого. В данном разделе описаны возможности этих процедур, общие для большинства таких типов. Процедуры GET и PUT для элементов типов CHARACTER и STRING передают отдельные символьные значения, а для числовых и перечислимых.типов передают лексемы.
Первым параметром всех процедур GET и PUT является файл. Если он опущен, то подразумевается, что используется текущий файл (ввода или вывода) по умолчанию. Каждая процедура GET оперирует над файлом вида IN_FILE. Каждая процедура PUT оперирует над файлом вида OUT-FILE.
Все процедуры GET и PUT меняют для заданного файла текущие номера столбца, строчки и страницы: каждая передача символа увеличивает на единицу текущий номер столбца. Каждый вывод признака конца строчки устанавливает текущий номер 'столбца равным единице и добавляет единицу к текущему номеру строчки. Каждый вывод признака конца страницы устанавливает текущие номера столбца и строчки равными единице и добавляет единицу к текущему номеру страницы. При вводе каждый признак конца строчки устанавливает текущий номер столбца равным единице и добавляет единицу к текущему номеру строчки; каждый признак конца страницы устанавливает текущие номера столбца и строчки равными единице и добавляет единицу к текущему номеру страницы. Аналогичным образом определяется семантика процедур GET_LINE, PUT_LINE и SET_COL.
Некоторые процедуры GET и PUT для числовых и перечислимых типов имеют параметры, задающие формат, который указывает длины полей; эти параметры принадлежат неотрицательному подтипу FIELD типа INTEGER.
Ввод-вывод значений перечислимых типов использует синтаксис соответствующих лексем. Любая процедура GET для перечислимого типа сначала пропускает все ведущие пропуски или признаки концов строчки и страницы; пропуск — это символ пробела или символ горизонтальной табуляции. Затем символы вводятся до тех пор, пока введенная последовательность является лексемой, соответствующей идентификатору или символьному литералу (в частности, ввод прекращается при достижении признака конца строчки). Символ или признак конца строчки, вызвавшие прекращение ввода, остаются доступными для следующего ввода.
Процедуры GET для числовых типов имеют параметр WIDTH, задающий формат. Если он имеет нулевое значение, то процедура GET выполняется так же, как для перечислимых типов, но вместо синтаксиса литералов перечисления используется синтаксис числовых литералов. При ненулевом значении параметра WIDTH вводится ровно WIDTH символов или, если ранее встретился признак конца строчки, то все символы до признака конца строчки; в это число включаются и все ведущие пропуски. Для числовых литералов используется расширенный синтаксис, в котором допускается знак числа (но не пропуски или признаки конца строчки или страницы внутри литерала).
Любая процедура PUT для элемента числового или перечислимого типов выводит значение элемента соответственно как числовой литерал, идентификатор или символьный литерал. Перед ними могут быть выведены пробелы, если этого требуют параметры формата WIDTH или FORE (это описано ниже), и для отрицательных значений — знак минус; в случае перечислимого типа пробелы выводятся не перед литералом, а после него. Если формат в процедуре PUT задает недостаточную ширину, то он игнорируется.
Следующие две ситуации могут возникнуть при выполнении процедуры PUT для числового или перечислимого типов в случае ограниченной длины строчки используемого файла вывода (т. е. длина строчки имеет ненулевое значение). Если число выводимых символов не превышает максимальной длины строчки, но при выводе этих символов, начиная с текущего столбца, они не помещаются в текущей строчке, то перед их выводом выполняются действия, эквивалентные вызову NEW-.LINE с параметром SPACING, равным единице. Если же число выводимых символов больше максимальной длины строчки, то возбуждается исключение LAYOUT_ERROR, при этом символы не выводятся.
Если используемый в процедурах GET, GET_LINE, PUT и PUT_LINE файл не открыт, то возбуждается исключение STATUS .ERROR. Если в процедурах GET и GET...LJNE вид используемого файла отличен от IN_FILE или в процедурах PUT и PUT_LINE вид используемого файла отличен от OUT_FILE, то возбуждается исключение MODE—ERROR.
В процедуре GET при попытке пропуска признака конца файла возбуждается исключение END_ERROR. Если вся введенная процедурой GET последовательность символов не является лексемой соответствующего типа, то возбуждается исключение DATA_ERROR; в частности, оно возбуждается, если не было введено ни одного символа; для числового типа, если был введен знак, то это правило относится к следующему за ним числовому литералу. В случае процедуры PUT, выводящий элемент типа STRING, если длина строки файла недостаточна для вывода заданного элемента, то возбуждается исключение LAYOUT—ERROR.
Примеры:
В примерах этого раздела и в разд. 14.3.7 и 14.3.8 кавычки и строчная буква b не вводятся и не выводятся; они даны только для того, чтобы показать расположение и пробелы.
К: INTEGER;
GET(K);
- символы на входе, вводимая последовательность, значение К
-bb- 12535b — 12535 - 12535
-bb 12 535Elb 12_535Е1 125350
- bb 12_535Е; 12_535Е (нет) Возбуждено DATA_ERROR
Пример игнорирования параметра ширины:
PUT (ITEM = > - 23, WIDTH => 2); - - ”-23”
В в о д - в ы в о д символов й строк
Для элемента типа CHARACTER определены следующие процедуры:
procedure GET (FILE: in FILE TYPE; ITEM: out CHARACTER);
procedure GET (ITEM: out CHARACTER) ;
В заданном файле ввода процедуры после пропуска признаков коина строчки и страницы читают следующий за ними символ; значение этого символа возвращают параметру ITEM вида out.
При попытке пропустить признак конца файла возбуждается исключение END_ERROR.
procedure PUT (FILE: in FILE-TYPE; ITEM: in CHARACTER);
procedure PUT (ITEM: in CHARACTER);
Если длина строчки заданного файла вывода ограничена (т. е. не равна нулю по соглашению), а текущий номер столбца превышает эту длину, то выполняют действия, эквивалентные вызову процедуры NEW—LINE с параметром SPACING, равным единице. Затем в любом случае в файл выводят заданный символ.
Для элемента типа STRING определены следующие процедуры:
procedure GET (FILE: in FILE_TYPE; ITEM: out STRING);
procedure GET (ITEM: out STRING);Определяют длину (число символов) данной строки; затем для последовательных символов строки соответствующее число раз выполняют операцию GET (в частности, для пустой строки никаких действий не выполняют) .
procedure PUT (FILE: in FILE_TYPE; ITEM: in STRING);
procedure PUT (ITEM: in STRING);
Определяют длину (число символов) данной строки; затем для последовательных символов строки соответствующее число раз выполняют операцию PUT (в частности, для пустой строки никаких действий не выполняют) .
procedure GET_LINE (FILE: in FILE_TYPE;ITEM: out STRING; LAST: out NATURAL);
procedure GET_LINE (ITEM: out STRING; LAST: out NATURAL);
Заменяют последовательные символы, содержащиеся в указанной строке, символами, читаемыми из заданного файла. Чтение заканчивается при достижении конца строчки файла; в этом случае выполняют действия, эквивалентные вызову процедуры SKIP_LINE с параметром SPACING, равным единице. Чтение также заканчивается и при достижении конца строки, заданной параметром ITEM. Символы, которые не были заменены, остаются не определенными.
Если символы прочитаны, то в параметр LAST возвращается индекс последнего замененного символа так, что индексированный компонент ITEM (LAST) — это значение последнего замененного символа (индекс первого замененного символа равен атрибуту ITEM'FIRST). Если не было прочитано ни одного символа, то в LAST выдается значение индекса на единицу меньше атрибута ITEM' FIRST.
При попытке пропустить признак конца файла возбуждается исключение END_ERROR.
procedure PUT_LINE (FILE: in FILE_TYPE; ITEM: in STRING);
procedure PUT _LINE (ITEM: in STRING);
Вызывают процедуру PUT для заданной строки, затем процедуру NEWSLINE с параметром SPACING, равным единице.
Примечание. Внешние кавычки строкового литерала, являющегося параметром процедуры PUT, не выводятся. Каждый сдвоенный символ кавычки, приведенный внутри такого литерала, выводится как один символ кавычки; это следует из правил для строковых литералов (см. разд. 2.6).
Строка, читаемая процедурой GET или записываемая процедурой PUT, в файле может занимать несколько строчек.
В в о д - в ы в о д для целых типов
Описанные ниже процедуры определены в настраиваемом пакете INTEGER-IO. Он должен быть конкретизирован с соответствующим целым типом (указанным в спецификации параметром настройки NUM),