Раздел 8.6 - Ввод и вывод переменных типа Unbounded_String

В Ada 95 нет пакетов для ввода и вывода Unbounded_String; вместо этого определены операции над типом String и операции для преобразования String в Unbounded_String.

По нашему мнению, было бы проще использовать пакет с описанными в нем операциями ввода-вывода непосредственно для типа 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 после того, как выдаст сообщение с количеством символов во введенной строке?

  1. Печатает строку в обратном порядке.
  2. Печатает строку так, как она была введена.
  3. Ничего не делает.

Вы можете также:

PREVIOUS Перейти к предыдущему разделу

NEXT     Перейти к следующему разделу

OUTLINE  Вернуться к содержанию Урока 8

David A. Wheeler (dwheeler@ida.org)

Перевод: Юрий Королев   Общая редакция перевода: Г.Ю. Сисюк

Исходная копия этого документа находится по адресу "http://www.adahome.com/Tutorials/Lovelace/s8sf.htm".

Исходная копия перевода размещена на сайте http://www.ada-ru.org