Re: String filtering



On Wed, 28 Sep 2005 10:06:44 +1000, David Trudgett wrote:

> "Dmitry A. Kazakov" <mailbox@xxxxxxxxxxxxxxxxx> writes:
>
>> On Tue, 27 Sep 2005 14:42:02 +0100, Martin Dowie wrote:
>>> 2nd sentence of ARM 95 A.4.5 (76) reads:
>>>
>>> "The function To_Unbounded_String(Length : in Natural)
>>> returns an Unbounded_String that represents an uninitialized
>>> String whose length is Length."
>>
>> Ah, now I see what you meant!
>
> Yep, that's what I meant, too.

No. What Martin meant is that:

X : Unbounded_String := To_Unbounded_String (Count);

is filled with rubbish

What I meant is that:

X : Unbounded_String;

is an empty string, being formally uninitialized. You can imagine it as
Unbounded_Strings having a default constructor setting them empty.

> I've made some revisions based on various comments, and this is what I
> have at the moment (incorporating both a string and unbounded_string
> version):
>
> Space_Char : constant Character_Range := (' ', ' ');
> Lower_Chars : constant Character_Range := ('a', 'z');
> Upper_Chars : constant Character_Range := ('A', 'Z');
> Numer_Chars : constant Character_Range := ('0', '9');
> Alpha_Num_Space : constant Character_Ranges
> := (Space_Char, Lower_Chars, Upper_Chars, Numer_Chars);
> Alpha_Num_Space_Set : constant Character_Set
> := To_Set(Alpha_Num_Space);
>
>
> function Strip_Non_Alphanumeric
> (Str : in Unbounded_String) return Unbounded_String
> is
> Dest_Size : Natural := Count(Str, Alpha_Num_Space_Set);
> New_Str : Unbounded_String := Null_Unbounded_String;

You don't need initialization here. Or you can do with Dest_Size. The
parameter of To_Unbounded_String is a Natural.

> Dest_Char : Natural := 0;
> begin
> if Dest_Size > 0 then

You don't need this if. Ada's loops are safe for zero-run.

> New_Str := To_Unbounded_String(Dest_Size);
> for Src_Char in 1 .. Length(Str) loop
> if Is_In(Element(Str, Src_Char), Alpha_Num_Space_Set) then
> Dest_Char := Dest_Char + 1;
> Replace_Element
> (New_Str, Dest_Char, Element(Str, Src_Char));
> end if;
> end loop;
> end if;
> return New_Str;
> end Strip_Non_Alphanumeric;
>
>
> function Strip_Non_Alphanumeric
> (Str : in String) return String
> is
> New_Str : String(1 .. Count(Str, Alpha_Num_Space_Set));

You also can do instead:

New_Str : String(1 .. Length (Str));

and save one extra scan of the string by Count. Memory is cheap and in
worst case scenario you will allocate that amount anyway.

> Dest_Char : Natural := 0;
> begin
> if New_Str'Last > 0 then

No need in this if.

> for Src_Char in Str'Range loop
> if Is_In(Str(Src_Char), Alpha_Num_Space_Set) then
> Dest_Char := Dest_Char + 1;
> New_Str(Dest_Char) := Str(Src_Char);
> end if;
> end loop;

here you do:

return New_Str (1..Dest_Char);

Ada strings has slices!

> else
> New_Str := "";
> end if;
> return New_Str;
> end Strip_Non_Alphanumeric;
>
>> Because, assignment might reclaim the memory allocated by
>> To_Unbounded_String (Count).
>
> I assume this is left up to the compiler implementation?

Yes

--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de
.



Relevant Pages

  • Re: Attachments to MAPI Message
    ... :> Do this before assigning the attachments to the message. ... :> String, _ ... :> 'is provided for sign-on. ... The default is an empty string. ...
    (microsoft.public.vb.controls.internet)
  • Re: What does this do ? !/somestring/
    ... transliteration)] it is interpreted as a search pattern at run time." ... contains a variable that is set to the empty string. ... because the m/Wor/ match was the last successful pattern match. ...
    (comp.lang.perl.misc)
  • Re: comments of less.rb appreciated
    ... There are no global variables in less.rb. ... ARGV is the command line argument Array. ... Otherwise use an empty string. ...
    (comp.lang.ruby)
  • Re: So whats null then if its not nothing?
    ... > empty string and the absence of a string? ... You have been saying, not I, that you can use the empty string to signify ... NULL covers all data types. ... > that there be a representation for unknown or absent data then that is ...
    (comp.databases.theory)
  • Re: Programming Help Please
    ... empty string rather than a Null value. ... Null value or an empty string, but it may be potentially a little confusing. ... Brendan Reynolds ... >> If IsNull Or IsNull Then ...
    (microsoft.public.access.formscoding)