Spec-Zone.ru › Ada 2022
Справочник по Ada (Ada 2022)

A.10.6 Процедуры Get и Put

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

Процедуры Get и Put для элементов типа Character, String, числовых типов и типов перечисления описаны в последующих подразделах. Особенности этих процедур, общие для большинства этих типов, описаны в этом подразд.
Все процедуры Get и Put имеют формы с параметром файла, записанным первым. Когда этот параметр опущен, понимается, что указан соответствующий текущий файл по умолчанию (ввода или вывода). Каждая процедура Get работает с файлом режима In_File. Каждая процедура Put работает с файлом режима Out_File или Append_File.
Все процедуры Get и Put сохраняют текущие номера столбца, строки и страницы указанного файла: действие каждой из этих процедур на эти номера является результатом действия отдельных передач символов и отдельных выводов или пропуска знаков завершения. Каждая передача символа увеличивает текущий номер столбца на единицу. Каждый вывод знака завершения строки устанавливает текущий номер столбца в единицу и увеличивает текущий номер строки на единицу. Каждый вывод знака завершения страницы устанавливает текущие номера столбца и строки в единицу и увеличивает текущий номер страницы на единицу. При вводе каждый пропуск знака завершения строки устанавливает текущий номер столбца в единицу и увеличивает текущий номер строки на единицу; каждый пропуск знака завершения страницы устанавливает текущие номера столбца и строки в единицу и увеличивает текущий номер страницы на единицу. Аналогичные соображения применяются к процедурам Get_Line, Put_Line и Set_Col.
Несколько процедур Get и Put для числовых и перечислительных типов имеют параметр format, который задаёт длину поля; эти параметры являются подтипом Field неотрицательного типа Integer.
Ввод-вывод значений перечисления использует синтаксис соответствующих лексем. Любая процедура Get для типа перечисления сначала пропускает все ведущие пробелы, или знаки завершения строки или страницы. Пробел определяется как пробел или символ горизонтальной табуляции. Далее символы вводятся только до тех пор, пока входная последовательность является начальной последовательностью идентификатора или символьного литерала (в частности, ввод прекращается при встрече знака завершения строки). Символ или знак завершения строки, который приводит к прекращению ввода, остаётся доступным для последующего ввода.
Для числового типа процедуры Get имеют параметр формата под названием Width. Если заданное значение этого параметра равно нулю, процедура Get выполняется так же, как для типов перечисления, но с использованием синтаксиса числовых литералов вместо синтаксиса литералов перечисления. Если задано ненулевое значение, то вводятся ровно Width символов или символы до знака завершения строки, в зависимости от того, что произойдёт раньше; любые пропущенные ведущие пробелы включаются в подсчёт. Синтаксис, используемый для числовых литералов, представляет собой расширенный синтаксис, допускающий ведущий знак (но без промежуточных пробелов, или знаков завершения строки или страницы), а также допускающий (для типов с плавающей точкой) целочисленный литерал, а также формы, имеющие только цифры до точки или только после точки.
Любая процедура Put для элемента числового или перечислительного типа выводит значение элемента как числовой литерал, идентификатор или символьный литерал, соответственно. Это предваряется ведущими пробелами, если это требуется параметрами формата Width или Fore (как описано в последующих подразд.), и затем знаком минус для отрицательного значения; для типа перечисления пробелы идут вместо ведущих. Формат, заданный для процедуры Put, переопределяется, если он недостаточно широк, путём использования минимально необходимой ширины.
Возникают ещё два случая для процедур Put для числовых и перечислительных типов, если длина строки указанного файла вывода ограничена (то есть, если она не имеет стандартного значения ноль). Если количество символов, подлежащих выводу, не превышает максимальную длину строки, но при этом не помещается в текущую строку, начиная с текущего столбца, то (по сути) вызывается New_Line (с отступом в один символ) перед выводом элемента. В противном случае, если количество символов превышает максимальную длину строки, то исключение Layout_Error распространяется, и ничего не выводится.
Исключение Status_Error распространяется любой из процедур Get, Get_Line, Put и Put_Line, если используемый файл не открыт. Исключение Mode_Error распространяется процедурами Get и Get_Line, если режим используемого файла не In_File; и процедурами Put и Put_Line, если режим не Out_File или Append_File.
Исключение End_Error распространяется процедурой Get, если выполняется попытка пропуска знака завершения файла. Исключение Data_Error распространяется процедурой Get, если конечная входная последовательность не является лексемой, соответствующей типу, в частности, если не было введено ни одного символа; для этого теста ведущие пробелы игнорируются; для элемента числового типа, когда вводится знак, это правило применяется к последующему числовому литералу. Исключение Layout_Error распространяется процедурой Put, которая выводит в параметр типа String, если длина фактической строки недостаточна для вывода элемента.

Примеры

В примерах, здесь и в A.10.8 и A.10.9, кавычки строки и строчная буква b не передаются: они показаны только для демонстрации выравнивания и пробелов.
N : Integer;
...
Get(N);
-- Символы на входе Последовательность ввода Значение N

-- bb–​12535b –​12535 –​12535
-- bb12_535e1b 12_535e1 125350
-- bb12_535e; 12_535e (нет) Возникло исключение Data_Error
Пример переопределённого параметра width:
Put(Item => -23, Width => 2); -- "–​23"


Spec-Zone.ru

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