From: tonyg on
Hi,
I have an unbounded string from a database I want to turn into a 16
character subtype of string

i.e. unbounded_string to string(1..16)

I've been trying to do this most of the afternoon but keep getting
errors

anyone know how ?

Thanks
From: Adam Beneschan on
On Jun 29, 7:28 am, tonyg <tonytheg...(a)googlemail.com> wrote:
> Hi,
>    I have an unbounded string from a database I want to turn into a 16
> character subtype of string
>
> i.e. unbounded_string to string(1..16)
>
> I've been trying to do this most of the afternoon but keep getting
> errors
>
> anyone know how ?

Declare a subtype to give string(1..16) a name; then call To_String
(in Ada.Strings.Unbounded) and convert the function result to your
subtype. E.g.:

subtype String_Length_16 is string(1..16);
V : String_Length_16;

V := String_Length_16 (Ada.Strings.Unbounded.To_String (U));

-- Adam

From: tonyg on
On 29 June, 15:33, Adam Beneschan <a...(a)irvine.com> wrote:
> On Jun 29, 7:28 am, tonyg <tonytheg...(a)googlemail.com> wrote:
>
> > Hi,
> >    I have an unbounded string from a database I want to turn into a 16
> > character subtype of string
>
> > i.e. unbounded_string to string(1..16)
>
> > I've been trying to do this most of the afternoon but keep getting
> > errors
>
> > anyone know how ?
>
> Declare a subtype to give string(1..16) a name; then call To_String
> (in Ada.Strings.Unbounded) and convert the function result to your
> subtype.  E.g.:
>
>    subtype String_Length_16 is string(1..16);
>    V : String_Length_16;
>
>    V := String_Length_16 (Ada.Strings.Unbounded.To_String (U));
>
>                         -- Adam

Thanks Adam
From: Ludovic Brenta on
tonyg wrote on comp.lang.ada:
> On 29 June, 15:33, Adam Beneschan <a...(a)irvine.com> wrote:
>> On Jun 29, 7:28 am, tonyg <tonytheg...(a)googlemail.com> wrote:
>
>>> Hi,
>>>    I have an unbounded string from a database I want to turn into a 16
>>> character subtype of string
>>>
>>> i.e. unbounded_string to string(1..16)
>>>
>>> I've been trying to do this most of the afternoon but keep getting
>>> errors
>>>
>>> anyone know how ?
>
>> Declare a subtype to give string(1..16) a name; then call To_String
>> (in Ada.Strings.Unbounded) and convert the function result to your
>> subtype.  E.g.:
>>
>>    subtype String_Length_16 is string(1..16);
>>    V : String_Length_16;
>>
>>    V := String_Length_16 (Ada.Strings.Unbounded.To_String (U));

That solution only works if U happens to contain exactly 16
characters, which is probably not the case if the database really
contains unbounded strings (i.e. VARCHAR or similar). So what you
probably need is something more elaborate along the lines of:

function To_String_16 (U : Ada.Strings.Unbounded.Unbounded_String)
return String_16 is
Temp : constant String := Ada.Strings.Unbounded.To_String (U);
Result : String_16;
begin
Ada.Strings.Fixed.Move (Source => Temp, Target => Result, Drop =>
Ada.Strings.Right,
Justify => Ada.Strings.Left, Pad => Ada.Characters.Space);
return Result;
end To_String_16;

(some parameters of Ada.Strings.Fixed.Move have defaults; I spelled
all them out for clarity at the expense of conciseness).

--
Ludovic Brenta.
From: Adam Beneschan on
On Jun 29, 8:08 am, Ludovic Brenta <ludo...(a)ludovic-brenta.org> wrote:
> tonyg wrote on comp.lang.ada:
>
>
>
>
>
> > On 29 June, 15:33, Adam Beneschan <a...(a)irvine.com> wrote:
> >> On Jun 29, 7:28 am, tonyg <tonytheg...(a)googlemail.com> wrote:
>
> >>> Hi,
> >>>    I have an unbounded string from a database I want to turn into a 16
> >>> character subtype of string
>
> >>> i.e. unbounded_string to string(1..16)
>
> >>> I've been trying to do this most of the afternoon but keep getting
> >>> errors
>
> >>> anyone know how ?
>
> >> Declare a subtype to give string(1..16) a name; then call To_String
> >> (in Ada.Strings.Unbounded) and convert the function result to your
> >> subtype.  E.g.:
>
> >>    subtype String_Length_16 is string(1..16);
> >>    V : String_Length_16;
>
> >>    V := String_Length_16 (Ada.Strings.Unbounded.To_String (U));
>
> That solution only works if U happens to contain exactly 16
> characters, which is probably not the case if the database really
> contains unbounded strings (i.e. VARCHAR or similar).

Right, when the OP said he wanted to "turn [an unbounded string] into
a 16 character subtype", I didn't look more deeply into the words
"turn into". I suppose I should have. We'd need to know exactly what
his requirements are to provide a full solution, though---
specifically, does he expect any unbounded strings to be shorter than
16 characters, does he expect any of them to be longer than 16
characters, and if either or both is "yes", what it the desired
behavior in each case.

-- Adam