Personally, I find that it's easier to use a package that defines Input-Output operations directly for an Unbounded_String. It's easy to define such a package, so I've provided one for you.
I call my package ``Ustrings'', which is a nice short name - I'll explain later why it has that name. It has a procedure Get_Line, which reads in a whole text line into an Unbounded_String. Procedure Put prints the Unbounded_String. Procedure Put_Line first Puts the Unbounded_String, and then starts a new line. Here's a shortened version of this package's declaration:
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;
If you're curious you can see the complete declaration (specification) and body of my package Ustrings.
Also, I also believe that ``Unbounded_String'' is too long a name for such a widely-used type, so I define in package ``Ustrings'' a new name for Unbounded_String called ``Ustring''. You can declare variables of type ``Ustring'' and they'll simply be Unbounded_Strings. You do not need to use the type name "Ustring" instead of "Unbounded_String"; I simply find it convenient.
Let's look at a short Unbounded_String demonstration program named `Unbound'. It reads in text, one line at a time, and then does various things with the line of text. Study the following program and see if you can figure out what it does.
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 -- Demonstrate 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;
What does subprogram Unbound do after it prints the line showing the number of characters in the input string?
|
|
|
|
|---|
David A. Wheeler (dwheeler@ida.org)