Справочник Ada 2012
A.10.7 Ввод-вывод символов и строк
Статические семантики
Для элемента типа Character предоставляются следующие процедуры:
procedure Get(File : in File_Type; Item : out Character);
procedure Get(Item : out Character);
procedure Get(Item : out Character);
После пропуска всех символов конца строки и страницы считывает следующий символ из указанного входного файла и возвращает значение этого символа в параметре Item.
Исключение End_Error распространяется, если попытка пропустить разделитель файла.
procedure Put(File : in File_Type; Item : in Character);
procedure Put(Item : in Character);
procedure Put(Item : in Character);
Если длина строки указанного выходного файла ограничена (то есть не имеет стандартного значения ноль), и текущий номер столбца превышает её, вызывается New_Line с отступом один. Затем или в противном случае, выводит заданный символ в файл.
procedure Look_Ahead (File : in File_Type;
Item : out Character;
End_Of_Line : out Boolean);
procedure Look_Ahead (Item : out Character;
End_Of_Line : out Boolean);
Item : out Character;
End_Of_Line : out Boolean);
procedure Look_Ahead (Item : out Character;
End_Of_Line : out Boolean);
Исключение Status_Error распространяется, если файл не открыт. Исключение Mode_Error распространяется, если режим файла не In_File. Устанавливает End_Of_Line в True, если в конце строки, включая конец страницы или конец файла; в каждом из этих случаев значение Item не определено. В противном случае End_Of_Line устанавливается в False, и Item устанавливается в следующий символ (без его потребления) из файла.
procedure Get_Immediate(File : in File_Type;
Item : out Character);
procedure Get_Immediate(Item : out Character);
Item : out Character);
procedure Get_Immediate(Item : out Character);
Считывает следующий символ, управляющий или графический, из указанного файла или из файла по умолчанию. Исключение Status_Error распространяется, если файл не открыт. Исключение Mode_Error распространяется, если режим файла не In_File. Исключение End_Error распространяется, если достигнут конец файла. Текущие номера столбца, строки и страницы для файла не затрагиваются.
procedure Get_Immediate(File : in File_Type;
Item : out Character;
Available : out Boolean);
procedure Get_Immediate(Item : out Character;
Available : out Boolean);
Item : out Character;
Available : out Boolean);
procedure Get_Immediate(Item : out Character;
Available : out Boolean);
Если символ, управляющий или графический, доступен из указанного файла или файла по умолчанию, то символ считывается; Available имеет значение True, а Item содержит значение этого символа. Если символ недоступен, то Available имеет значение False, а значение Item не определено. Исключение Status_Error распространяется, если файл не открыт. Исключение Mode_Error распространяется, если режим файла не In_File. Исключение End_Error распространяется, если достигнут конец файла. Текущие номера столбца, строки и страницы для файла не затрагиваются.
Для элемента типа String предоставляются следующие подпрограммы:
procedure Get(File : in File_Type; Item : out String);
procedure Get(Item : out String);
procedure Get(Item : out String);
Определяет длину данной строки и пытается выполнить указанное число операций Get для последовательных символов строки (в частности, если строка пустая, операции не выполняются).
procedure Put(File : in File_Type; Item : in String);
procedure Put(Item : in String);
procedure Put(Item : in String);
Определяет длину данной строки и пытается выполнить указанное число операций Put для последовательных символов строки (в частности, если строка пустая, операции не выполняются).
function Get_Line(File : in File_Type) return String;
function Get_Line return String;
function Get_Line return String;
Возвращает строку результата, построенную путем чтения последовательных символов из указанного входного файла и присвоения их последовательным символам строки результата. Строка результата имеет нижнюю границу 1 и верхнюю границу, равную числу прочитанных символов. Чтение прекращается при достижении конца строки; затем (фактически) вызывается Skip_Line с отступом 1.
Исключение Constraint_Error возникает, если длина строки превышает Positive'Last; в этом случае номер строки и страницы не изменяются, а номер столбца не определен, но не меньше, чем был до вызова. Исключение End_Error распространяется, если попытка пропустить разделитель файла.
procedure Get_Line(File : in File_Type;
Item : out String;
Last : out Natural);
procedure Get_Line(Item : out String;
Last : out Natural);
Item : out String;
Last : out Natural);
procedure Get_Line(Item : out String;
Last : out Natural);
Считывает последовательные символы из указанного входного файла и присваивает их последовательным символам указанной строки. Чтение прекращается при достижении конца строки. Чтение также прекращается, если конец строки достигается раньше, чем конец строки; в этом случае Skip_Line (фактически) вызывается с отступом 1. Значения символов, не присвоенных, не определены.
Если символы считываются, возвращает в 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);
procedure Put_Line(Item : in String);
Вызывает процедуру Put для заданной строки, а затем процедуру New_Line с отступом один.
Рекомендации по реализации
Процедуры Get_Immediate должны быть реализованы с небуферизованным вводом. Для устройства, такого как клавиатура, ввод должен быть «доступен», если клавиша уже нажата, а для дискового файла ввод всегда должен быть доступен, за исключением конца файла. Для файла, связанного с устройством типа клавиатуры, любые функции редактирования строк, предоставляемые базовой операционной системой, должны быть отключены во время выполнения Get_Immediate.
ПРИМЕЧАНИЯ
31 Get_Immediate может использоваться для чтения одного символа с клавиатуры «немедленно»; то есть без ожидания конца строки. При вызове Get_Immediate без параметра Available, вызывающая сторона будет ждать, пока символ не станет доступен.
32 В литеральном строковом параметре Put заключительные символы скобок строки не выводятся. Каждый двойной символ скобки строки в заключённой строке выводится как одиночный символ скобки строки, как следствие правила для строковых литералов (см. 2.6).
33 Строка, считанная с помощью Get или записанная с помощью Put, может охватывать несколько строк. Реализация может предположить, что некоторые внешние файлы не содержат разделителей страниц, в этом случае Get_Line и Skip_Line могут возвращаться, как только будет прочитан разделитель строки.