From: lutz@iks-jena.de (Lutz Donnerhacke)
Subject: Re: FAQ and string functions
Date: Wed, 31 Jul 2002 09:04:54 +0000 (UTC)
Date: 2002-07-31T09:04:54+00:00 [thread overview]
Message-ID: <slrnakfa1l.op.lutz@taranis.iks-jena.de> (raw)
In-Reply-To: 20020731104643.C1083@videoproject.kiev.ua
* Oleg Goodyckov wrote:
>Perl we say @list=split(/ /,String) and that's all. Is this Perl's own
>especiality? No. It can be realized in Ada. And I say more - without this
>Ada will never be convinient language. While for splitting string like
>"x=2*3" people will must be to write program enstead split("=","x=2*3"),
>people will write in Perl, not Ada.
Split is a library function in Perl, not a system call. You can have this
library call in Ada, too. Do you consider Perl unusable because MIME::Parser
is not in the core language?
\f
with Split, Ada.Text_IO, Whole;
procedure Test_Split is
function Get_Whole_Line is new Whole.Line (Ada.Text_IO.Get_Line);
begin
loop
declare
line : constant String := Get_Whole_Line;
rang : constant Split.String_Ranges := Split.Split (' ', line);
begin
Ada.Text_IO.Put_Line ("Words:" & Integer'Image (rang'Length));
for i in rang'Range loop
Ada.Text_IO.Put (line (rang (i).first .. rang (i).last));
if i < rang'Last then
Ada.Text_IO.Put (", ");
end if;
end loop;
Ada.Text_IO.New_Line;
end;
end loop;
exception
when Ada.Text_IO.End_Error => null;
end Test_Split;
\f
with Ada.Strings.Maps;
package Split is
pragma Preelaborate (Split);
type Ranges is record
first : Positive;
last : Positive;
end record;
type String_Ranges is array (Positive range <>) of Ranges;
function Split (
Source : String;
Set : Ada.Strings.Maps.Character_Set;
Test : Ada.Strings.Membership
) return String_Ranges;
function Split (Terminator : Character; Source : String)
return String_Ranges;
end Split;
\f
with Ada.Strings.Fixed;
package body Split is
Null_Ranges : String_Ranges (Positive'First .. Positive'First - 1);
function Split (Source : String;
Set : Ada.Strings.Maps.Character_Set;
Test : Ada.Strings.Membership) return String_Ranges is
First, Last : Natural;
begin
Ada.Strings.Fixed.Find_Token (Source, Set, Test, First, Last);
if Last = Natural'First then
return Null_Ranges;
else
return Ranges'(First, Last) &
Split (Source (Last + 1 .. Source'Last), Set, Test);
end if;
end Split;
function Split (Terminator : Character; Source : String)
return String_Ranges is
begin
return Split (Source,
Ada.Strings.Maps.To_Set (Terminator), Ada.Strings.Outside);
end Split;
end Split;
\f
package Whole is
pragma Preelaborate (Whole);
buffsize : Positive := 80;
generic
with procedure Get (buff : out String; last : out Natural);
function Line return String;
end Whole;
\f
package body Whole is
function Line return String is
buff : String (Positive'First .. Positive'First + buffsize);
last : Natural;
begin
Get (buff, last);
if last < buff'Last then
return buff (buff'First .. last);
else
return buff & Line;
end if;
end Line;
end Whole;
next prev parent reply other threads:[~2002-07-31 9:04 UTC|newest]
Thread overview: 86+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-07-30 6:32 FAQ and string functions Oleg Goodyckov
2002-07-30 8:52 ` Colin Paul Gloster
2002-07-30 13:48 ` Ted Dennison
2002-07-31 4:52 ` Brian May
2002-08-01 16:09 ` Ted Dennison
2002-08-02 0:21 ` Brian May
2002-08-02 1:56 ` tmoran
2002-08-02 13:59 ` Ted Dennison
2002-07-31 7:46 ` Oleg Goodyckov
2002-07-31 9:04 ` Lutz Donnerhacke [this message]
2002-07-31 9:39 ` Pascal Obry
2002-07-31 15:06 ` Oleg Goodyckov
2002-07-31 16:50 ` Oleg Goodyckov
2002-07-31 20:16 ` Simon Wright
2002-07-31 20:56 ` Robert A Duff
2002-08-01 0:11 ` Darren New
2002-08-01 1:08 ` tmoran
2002-08-01 9:25 ` Brian May
2002-08-01 11:20 ` Oleg Goodyckov
2002-08-01 15:43 ` Darren New
2002-08-01 21:37 ` Robert A Duff
2002-08-03 0:42 ` Ted Dennison
2002-08-03 13:51 ` Robert A Duff
2002-08-03 16:43 ` Darren New
2002-08-05 13:37 ` Stephen Leake
2002-08-02 8:01 ` Oleg Goodyckov
2002-08-02 16:09 ` Darren New
2002-08-01 11:09 ` Oleg Goodyckov
2002-08-01 14:08 ` Frank J. Lhota
2002-08-01 15:06 ` Robert A Duff
2002-08-01 16:05 ` Oleg Goodyckov
2002-08-01 14:57 ` Georg Bauhaus
2002-07-31 22:04 ` Dmitry A.Kazakov
2002-07-31 15:23 ` Oleg Goodyckov
2002-08-01 21:57 ` Dmitry A.Kazakov
2002-08-01 13:10 ` Oleg Goodyckov
2002-08-02 23:29 ` Dmitry A.Kazakov
2002-08-02 16:35 ` Oleg Goodyckov
2002-08-05 11:50 ` Dmitry A. Kazakov
2002-08-05 14:29 ` Larry Kilgallen
2002-08-05 14:57 ` Dmitry A. Kazakov
2002-08-05 15:12 ` Oleg Goodyckov
2002-08-05 16:20 ` Darren New
2002-08-05 17:01 ` Georg Bauhaus
2002-08-05 17:48 ` Darren New
2002-08-05 19:06 ` tmoran
2002-08-05 20:08 ` Darren New
[not found] ` <slrnakv3q9.p2.lutz@taranis.iks-jena.de>
[not found] ` <3D4FEFCB.3B74F5E5@san.rr.com>
2002-08-14 0:07 ` Randy Brukardt
2002-08-01 14:29 ` Ted Dennison
2002-08-01 16:47 ` Oleg Goodyckov
2002-08-02 14:05 ` Ted Dennison
2002-08-02 16:11 ` Darren New
2002-08-03 0:30 ` Ted Dennison
2002-08-03 0:58 ` Darren New
2002-08-03 2:04 ` Dale Stanbrough
2002-08-03 2:32 ` Ted Dennison
2002-08-03 2:47 ` Darren New
2002-08-03 12:41 ` Ted Dennison
2002-08-03 16:53 ` Darren New
2002-08-04 1:08 ` Ted Dennison
2002-08-04 16:23 ` Darren New
2002-08-05 2:16 ` Robert Dewar
2002-08-05 3:45 ` Darren New
2002-08-05 9:56 ` Lutz Donnerhacke
2002-08-05 16:02 ` Darren New
2002-08-14 0:42 ` Randy Brukardt
2002-08-14 1:45 ` Darren New
2002-08-14 19:37 ` Randy Brukardt
2002-08-14 20:25 ` Stephen Leake
2002-08-14 20:22 ` Stephen Leake
2002-08-15 19:24 ` Randy Brukardt
[not found] ` <jb1vkustkugeutalhvrhv1n0k9hqn2fpip@4ax.com>
[not found] ` <3D4FF351.8F4A6C0A@san.rr.com>
2002-08-14 1:03 ` Randy Brukardt
2002-08-14 1:05 ` Robert A Duff
[not found] ` <3D4EA1AC.80D17170@s <wccofc6b66u.fsf@shell01.TheWorld.com>
2002-08-14 20:29 ` Stephen Leake
2002-08-26 17:53 ` Robert A Duff
2002-08-26 18:40 ` Chad R. Meiners
2002-08-26 18:52 ` Robert A Duff
2002-08-26 21:46 ` Chad R. Meiners
2002-08-05 13:29 ` Stephen Leake
2002-08-03 5:07 ` achrist
2002-08-03 12:52 ` Ted Dennison
2002-08-05 15:34 ` Ted Dennison
2002-08-05 13:24 ` Stephen Leake
2002-08-05 16:02 ` Darren New
2002-08-05 7:18 ` Oleg Goodyckov
2002-08-02 1:04 ` tmoran
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox