По нашему мнению, было бы проще использовать пакет с описанными в нем операциями ввода-вывода непосредственно для типа 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 после того, как выдаст сообщение с количеством символов во введенной строке?
|
|
|
|
|---|
David A. Wheeler (dwheeler@ida.org)
Исходная копия этого документа находится по адресу
"http://www.adahome.com/Tutorials/Lovelace/s8sf.htm".
Исходная копия перевода размещена на сайте http://www.ada-ru.org
Перевод: Юрий Королев
Общая редакция перевода: Г.Ю. Сисюк