Spec-Zone.ru › Ada 2022
Руководство по Ada (Ada 2022)

A.10.7 Ввод-вывод символов и строк

Статическая семантика

Для элемента типа Character предоставляются следующие процедуры:
procedure Get(File : in File_Type; 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);
Если длина строки указанного выходного файла ограничена (то есть не имеет стандартного значения ноль), а текущий номер столбца превышает ее, вызывается 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);
Исключение 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);
Считывает следующий символ, управляющий или графический, из указанного файла или файла стандартного ввода. Исключение 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);
Если из указанного файла или файла стандартного ввода доступен символ, управляющий или графический, то символ считывается; 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);
Определяет длину заданной строки и выполняет указанное количество операций Get для последовательных символов строки (в частности, не выполняется ни одна операция, если строка пустая).
procedure Put(File : in File_Type; Item : in String);
procedure Put(Item : in String);
Определяет длину заданной строки и выполняет указанное количество операций Put для последовательных символов строки (в частности, не выполняется ни одна операция, если строка пустая).
function Get_Line(File : in File_Type) 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);
Считывает последовательные символы из указанного входного файла и присваивает их последовательным символам указанной строки. Чтение прекращается при достижении конца строки. Чтение также прекращается, если конец строки встречается раньше, чем конец строки; в этом случае 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);
Вызывает процедуру Put для заданной строки, а затем процедуру New_Line со значением отступа один.

Рекомендации по реализации

Процедуры Get_Immediate должны быть реализованы с использованием небуферизованного ввода. Для устройства, такого как клавиатура, вход должен быть «доступен», если клавиша уже нажата, а для файла на диске вход всегда должен быть доступен, за исключением конца файла. Для файла, связанного с устройством, подобным клавиатуре, любые функции редактирования строк в underlying операционной системе должны быть отключены во время выполнения Get_Immediate.
ПРИМЕЧАНИЕ 1 Get_Immediate может использоваться для чтения одного символа с клавиатуры «немедленно»; то есть без ожидания конца строки. При вызове Get_Immediate без параметра Available вызывающая программа будет ждать, пока символ не станет доступным.
ПРИМЕЧАНИЕ 2 В параметре строки-литерала процедуры Put символы скобок строки не выводятся. Каждый символ двойной скобки строки в заключённой строке выводится как один символ скобки строки в соответствии с правилом для строк-литералов (см. 2.6).
ПРИМЕЧАНИЕ 3 Строка, считанная с помощью Get или записанная с помощью Put, может занимать несколько строк. Реализация имеет право предполагать, что некоторые внешние файлы не содержат символов конца страницы, в этом случае Get_Line и Skip_Line могут вернуть результат сразу после прочтения символа конца строки.


Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API