Справочник по Ada 2005
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 Символ конца страницы всегда пропускается, когда пропускается предшествующий символ конца строки. Реализация может представлять комбинацию этих разделителей одним символом, при условии, что он правильно распознаётся на входе.