По нашему мнению, было бы проще использовать пакет с описанными в нем операциями ввода-вывода непосредственно для типа Unbounded_String. Такой пакет легко реализовать, поэтому ниже приведен один из вариантов, котрый вы можете использовать.
Назовем наш пакет коротким и красивым названием ``Ustrings''. Ниже будет дано объяснение, почему используется именно такое название. В пакете содержится процедура Get_Line, которая считывает целую строку текста и сохраняет ее в Unbounded_String. Процедура Put выводит на экран переменную типа Unbounded_String. Процедура Put_Line сначала выводит Unbounded_String, а затем выполняет перевод строки. Ниже приведена сокращенная версия описания этого пакета:
package Ustrings is procedure Get_Line(Item : out Unbounded_String); procedure Put(Item : in Unbounded_String); procedure Put_Line(Item : in Unbounded_String); end Ustrings;
Если Вас заинтересовал наш пакет Ustrings, то можно посмотреть его полное описание (спецификацию) и тело
Мы также считаем, что "Unbounded_String" слишком длинное название для столь широко используемого типа, поэтому в пакете Ustrings новое имя для Unbounded_String: "Ustring". Вы можете объявлять переменные типа "Ustring", которые будут просто переменными типа Unbounded_String. Вы не обязаны использовать имя "Ustring" вместо "Unbounded_String", просто нам это показалось удобным.
Давайте рассмотрим короткую программу 'Unbound', демонстрирующую работу с Unbounded_String. Она строка за строкой считывает текст, а затем выполняет различные операции с ним. Изучите данную программу и попробуйте разобраться, что она делает.
with Ada.Strings.Unbounded, Ustrings, Text_IO, Ada.Integer_Text_IO; use Ada.Strings.Unbounded, Ustrings, Text_IO, Ada.Integer_Text_IO; procedure Unbound is -- Демонстрация Unbounded_String. Input : Unbounded_String; Stop : constant Unbounded_String := To_Unbounded_String("stop"); begin Put_Line("Please type 'stop' to end this program."); loop New_Line; Put_Line("Please type in a line:"); Get_Line(Input); exit when (Input = Stop); Put("You just typed in:"); Put_Line(Input); Put("This input line contains "); Put(Length(Input)); Put_Line(" characters."); for I in reverse 1 .. Length(Input) loop Put(Element(Input, I)); end loop; New_Line; end loop; end Unbound;
Что делает подпрограмма Unbound после того, как выдаст сообщение с количеством символов во введенной строке?
Перейти к предыдущему разделу | Перейти к следующему разделу | Вернуться к содержанию Урока 8 |
---|
David A. Wheeler (dwheeler@ida.org)
Исходная копия этого документа находится по адресу
"http://www.adahome.com/Tutorials/Lovelace/s8sf.htm".
Исходная копия перевода размещена на сайте http://www.ada-ru.org
Перевод: Юрий Королев
Общая редакция перевода: Г.Ю. Сисюк