Справочник по Ada 2005
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);
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);
Считывает следующий символ, управляющий или графический, из указанного файла или файла по умолчанию. 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 не определено. 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.
ПРИМЕЧАНИЯ
26 Get_Immediate можно использовать для чтения одной клавиши с клавиатуры «немедленно»; то есть, не ожидая конца строки. При вызове Get_Immediate без параметра Available вызывающий будет ждать, пока символ не станет доступен.
27 В параметре-строке-литерале Put символы квадратных скобок, ограничивающие строку, не выводятся. Каждый удвоенный символ квадратной скобки в заключённой строке выводится как один символ квадратной скобки, как следствие правила для строковых литералов (см. 2.6).
28 Строка, считанная с помощью Get или записанная с помощью Put, может занимать несколько строк. Реализация может предполагать, что некоторые внешние файлы не содержат символов конца страницы, в этом случае Get_Line и Skip_Line могут завершить работу, как только будет прочитан символ конца строки.