comp.lang.ada
 help / color / mirror / Atom feed
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;



  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