comp.lang.ada
 help / color / mirror / Atom feed
From: Natasha Kerensikova <lithiumcat@gmail.com>
Subject: Reading the while standard input into a String
Date: Sun, 5 Jun 2011 16:20:39 +0000 (UTC)
Date: 2011-06-05T16:20:39+00:00	[thread overview]
Message-ID: <slrniunb6n.i18.lithiumcat@sigil.instinctive.eu> (raw)

Hello,

I have encountered what was a very easily solved problem in C: dump the
whole contents of the standard input into some place in memory, in order
to process it afterwards.

I was quite unhappy with the preprocessing performed by Ada.Text_IO, so
I went on using the text stream interface. However I still read
character by character into a temporary buffer, and it feels ugly. Here
is the code:

with Ada.Strings.Unbounded;
with Ada.Text_IO.Text_Streams;

   Source : Ada.Text_IO.Text_Streams.Stream_Access
     := Ada.Text_IO.Text_Streams.Stream (Ada.Text_IO.Standard_Input);

   procedure Read_Chunk (To : out String; Last : out Natural) is
   begin
      Last := To'First - 1;
      for J in To'Range loop
         Character'Read (Source, To (J));
         Last := J;
      end loop;
   exception
      when Ada.Text_IO.End_Error => Null;
   end Read_Chunk;


   procedure The_Program is
      -- some tuff
      Input : Ada.Strings.Unbounded.Unbounded_String;
   begin
      declare
         Chunk : String (1 .. 256);
         Last : Natural;
      begin
         loop
            Read_Chunk (Chunk, Last);
            Ada.Strings.Unbounded.Append (Input, Chunk (1 .. Last));
            exit when Last < Chunk'Last;
         end loop;
      end;

      -- Process Input or To_String (Input);
   end The_Program;

Is there a better/smarter/less ugly way to achieve the same result?


Thanks for your help,
Natasha



             reply	other threads:[~2011-06-05 16:20 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-06-05 16:20 Natasha Kerensikova [this message]
2011-06-06  1:49 ` Reading the while standard input into a String robin
2011-06-06  7:18 ` Dmitry A. Kazakov
2011-06-06 10:46   ` Natasha Kerensikova
2011-06-06 12:05     ` Dmitry A. Kazakov
2011-06-06 16:55       ` Jeffrey Carter
2011-06-06 17:42         ` Pascal Obry
2011-06-06 17:43         ` Pascal Obry
2011-06-06 18:31         ` Dmitry A. Kazakov
2011-06-06  8:09 ` stefan-lucks
2011-06-06  8:33 ` Ludovic Brenta
2011-06-06 10:08   ` Natasha Kerensikova
2011-06-06 10:27     ` Ludovic Brenta
2011-06-06 10:31       ` Ludovic Brenta
2011-06-06 12:07         ` Natasha Kerensikova
2011-06-06 15:18   ` Maciej Sobczak
2011-06-06 18:18     ` Dmitry A. Kazakov
2011-06-06 18:36       ` Maciej Sobczak
2011-06-06 18:53         ` Dmitry A. Kazakov
2011-06-06 19:10           ` J-P. Rosen
2011-06-06 19:46             ` Dmitry A. Kazakov
2011-06-06 23:37           ` Shark8
2011-06-07  3:00             ` Randy Brukardt
2011-06-07  7:25             ` Dmitry A. Kazakov
2011-06-07  7:32           ` Maciej Sobczak
2011-06-07  8:51             ` Dmitry A. Kazakov
2011-06-07  3:10         ` Randy Brukardt
2011-06-06 19:06       ` J-P. Rosen
2011-06-06 19:52         ` Dmitry A. Kazakov
2011-06-07  3:15         ` Randy Brukardt
2011-06-06 22:14   ` Robert A Duff
2011-06-06  9:46 ` Georg Bauhaus
2011-06-06 11:16 ` Georg Bauhaus
2011-06-06 12:11   ` Dmitry A. Kazakov
2011-06-06 13:32     ` Georg Bauhaus
2011-06-06 14:06       ` Dmitry A. Kazakov
2011-06-06 14:14         ` Georg Bauhaus
2011-06-07  3:19         ` Randy Brukardt
2011-06-06 18:14 ` John B. Matthews
2011-06-07 10:23   ` Martin
2011-06-07 16:57     ` John B. Matthews
2011-06-07 17:22     ` Robert A Duff
2011-06-07 17:55       ` John B. Matthews
2011-06-08  0:26         ` Robert A Duff
2011-06-08  7:38         ` Egil Høvik
2011-06-08  9:27           ` Martin
2011-06-08 12:04             ` Egil Høvik
2011-06-08 18:09               ` Niklas Holsti
2011-06-09  0:46                 ` Randy Brukardt
2011-06-10  8:22                   ` Martin
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox