Справочник по Ada 95
A.10.5 Операции над колонками, строками и страницами
Статическая семантика
Подпрограммы, описанные в этом подразделе, обеспечивают явный контроль над структурой строк и страниц; они работают либо с файлом, заданным в качестве первого параметра, либо, в отсутствие такого параметра, с соответствующим текущим файлом по умолчанию (ввода или вывода). Исключение Status_Error распространяется любой из этих подпрограмм, если используемый файл не открыт.
procedure New_Line(File : in File_Type; Spacing : in Positive_Count := 1);
procedure New_Line(Spacing : in Positive_Count := 1);
procedure New_Line(Spacing : in Positive_Count := 1);
Работает с файлом режима Out_File или Append_File.
Для Spacing, равного единице: выводит символ конца строки и устанавливает текущий номер колонки в единицу. Затем увеличивает текущий номер строки на единицу, за исключением случая, когда текущий номер строки уже больше или равен максимальной длине страницы для страницы ограниченной длины; в этом случае выводится символ конца страницы, текущий номер страницы увеличивается на единицу, а текущий номер строки устанавливается в единицу.
Для Spacing, большего единицы, указанные действия выполняются Spacing раз.
Исключение Mode_Error распространяется, если режим не Out_File или Append_File.
procedure Skip_Line(File : in File_Type; Spacing : in Positive_Count := 1);
procedure Skip_Line(Spacing : in Positive_Count := 1);
procedure Skip_Line(Spacing : in Positive_Count := 1);
Работает с файлом режима In_File.
Для Spacing, равного единице: считывает и отбрасывает все символы до тех пор, пока не будет прочитан символ конца строки, а затем устанавливает текущий номер колонки в единицу. Если символ конца строки не сразу следует за символом конца страницы, текущий номер строки увеличивается на единицу. В противном случае, если символ конца строки сразу следует за символом конца страницы, символ конца страницы пропускается, текущий номер страницы увеличивается на единицу, а текущий номер строки устанавливается в единицу.
Для Spacing, большего единицы, указанные действия выполняются Spacing раз.
Исключение Mode_Error распространяется, если режим не In_File. Исключение End_Error распространяется, если происходит попытка чтения символа конца файла.
function End_Of_Line(File : in File_Type) return Boolean;
function End_Of_Line return Boolean;
function End_Of_Line return Boolean;
Работает с файлом режима In_File. Возвращает True, если следующий символ — это символ конца строки или символ конца файла; в противном случае возвращает False.
Исключение Mode_Error распространяется, если режим не In_File.
procedure New_Page(File : in File_Type);
procedure New_Page;
procedure New_Page;
Работает с файлом режима Out_File или Append_File. Выводит символ конца строки, если текущая строка не завершена или если текущая страница пуста (то есть, если текущие номера колонки и строки оба равны единице). Затем выводит символ конца страницы, который завершает текущую страницу. Увеличивает текущий номер страницы на единицу и устанавливает текущие номера колонки и строки в единицу.
Исключение Mode_Error распространяется, если режим не Out_File или Append_File.
procedure Skip_Page(File : in File_Type);
procedure Skip_Page;
procedure Skip_Page;
Работает с файлом режима In_File. Считывает и отбрасывает все символы и символы конца строки до тех пор, пока не будет прочитан символ конца страницы. Затем увеличивает текущий номер страницы на единицу и устанавливает текущие номера колонки и строки в единицу.
Исключение Mode_Error распространяется, если режим не In_File. Исключение End_Error распространяется, если происходит попытка чтения символа конца файла.
function End_Of_Page(File : in File_Type) return Boolean;
function End_Of_Page return Boolean;
function End_Of_Page return Boolean;
Работает с файлом режима In_File. Возвращает True, если следующий символ — это комбинация символа конца строки и символа конца страницы, или если следующий символ — символ конца файла; в противном случае возвращает False.
Исключение Mode_Error распространяется, если режим не In_File.
function End_Of_File(File : in File_Type) return Boolean;
function End_Of_File return Boolean;
function End_Of_File return Boolean;
Работает с файлом режима In_File. Возвращает True, если следующий символ — символ конца файла, или если следующий символ — комбинация символа конца строки, символа конца страницы и символа конца файла; в противном случае возвращает False.
Исключение Mode_Error распространяется, если режим не In_File.
Следующие подпрограммы обеспечивают управление текущей позицией чтения или записи в файле. Во всех случаях файлом по умолчанию является текущий файл вывода.
procedure Set_Col(File : in File_Type; To : in Positive_Count);
procedure Set_Col(To : in Positive_Count);
procedure Set_Col(To : in Positive_Count);
Если режим файла Out_File или Append_File:
- Если значение, указанное To, больше текущего номера колонки, выводит пробелы, увеличивая текущий номер колонки на единицу после каждого пробела, пока текущий номер колонки не станет равным заданному значению. Если значение, указанное To, равно текущему номеру колонки, никаких действий не выполняется. Если значение, указанное To, меньше текущего номера колонки, выполняется вызов New_Line (с Spacing, равным единице), затем выводится (To - 1) пробелов и устанавливается текущий номер колонки в заданное значение.
- Исключение Layout_Error распространяется, если значение, заданное To, превышает Line_Length при ограниченной длине строки (то есть, когда она не имеет значения по умолчанию ноль).
Если режим файла In_File:
- Считывает (и отбрасывает) отдельные символы, символы конца строки и символы конца страницы, пока следующий считываемый символ не будет иметь номер колонки, равный значению, заданному To; никаких действий не выполняется, если текущий номер колонки уже равен этому значению. Каждая передача символа или разделителя сохраняет текущие номера колонки, строки и страницы так же, как процедура Get (см. A.10.6). (Короткие строки будут пропущены, пока не будет найдена строка, содержащая символ в заданной позиции колонки).
- Исключение End_Error распространяется, если происходит попытка чтения символа конца файла.
procedure Set_Line(File : in File_Type; To : in Positive_Count);
procedure Set_Line(To : in Positive_Count);
procedure Set_Line(To : in Positive_Count);
Если режим файла Out_File или Append_File:
- Если значение, указанное To, больше текущего номера строки, вызывается New_Line (с Spacing, равным единице) до тех пор, пока текущий номер строки не станет равным заданному значению. Если значение, указанное To, равно текущему номеру строки, никаких действий не выполняется. Если значение, указанное To, меньше текущего номера строки, выполняется вызов New_Page, за которым следует вызов New_Line с Spacing, равным (To - 1).
- Исключение Layout_Error распространяется, если значение, заданное To, превышает Page_Length при ограниченной длине страницы (то есть, когда она не имеет значения по умолчанию ноль).
Если режим In_File:
- Выполняются последовательные вызовы Skip_Line (с Spacing, равным единице), пока текущий номер строки не станет равным значению, заданному To; никаких действий не выполняется, если текущий номер строки уже равен этому значению. (Короткие страницы будут пропущены, пока не будет найдена страница, содержащая строку в заданной позиции строки).
- Исключение End_Error распространяется, если происходит попытка чтения символа конца файла.
function Col(File : in File_Type) return Positive_Count;
function Col return Positive_Count;
function Col return Positive_Count;
Возвращает текущий номер колонки.
Исключение Layout_Error распространяется, если это число превышает Count'Last.
function Line(File : in File_Type) return Positive_Count;
function Line return Positive_Count;
function Line return Positive_Count;
Возвращает текущий номер строки.
Исключение Layout_Error распространяется, если это число превышает Count'Last.
function Page(File : in File_Type) return Positive_Count;
function Page return Positive_Count;
function Page return Positive_Count;
Возвращает текущий номер страницы.
Исключение Layout_Error распространяется, если это число превышает Count'Last.
Номер колонки, строки или страницы может превысить Count'Last (вследствие ввода или вывода достаточного количества символов, строк или страниц). Эти события не вызывают распространения каких-либо исключений. Однако вызов Col, Line или Page распространяет исключение Layout_Error, если соответствующее число превышает Count'Last.
ПРИМЕЧАНИЯ
25 Символ конца страницы всегда пропускается, когда пропускается предшествующий символ конца строки. Реализация может представлять комбинацию этих символов одним символом, при условии, что он распознается при вводе корректно.