From: agent@drrob1.com
Subject: Re: need help learning Ada for a modula-2 programmer
Date: Sun, 02 Feb 2014 19:10:16 -0500
Date: 2014-02-02T19:10:16-05:00 [thread overview]
Message-ID: <2fnte9ho690kn2vqr2m926rjsvg9asr76s@4ax.com> (raw)
In-Reply-To: U5vHu.5552$uW2.3805@fx20.fr7
On Sun, 02 Feb 2014 17:18:44 GMT, Brian Drummond
<brian3@shapes.demon.co.uk> wrote:
>On Sat, 01 Feb 2014 21:47:15 -0500, agent wrote:
>
>> On Tue, 28 Jan 2014 12:18:33 GMT, Brian Drummond
>> <brian3@shapes.demon.co.uk> wrote:
>>
>> PROCEDURE GetCommandLine(CommandLine : OUT String) is BEGIN
>> n := argument_count;
>> k := 1;
>>
>> WHILE k <= n LOOP
>> move(argument(k),argstr); - tried this-
>> argstr := argument(k); -- and this. Neither works.
>>
>> cmdlinefrag := cmdlinefrag & argstr;
>> cmdlinefrag := cmdlinefrag & ' ';
>> k := Natural'SUCC(k);
>> END LOOP; -- while k < n CommandLine := cmdlinefrag;
>> END GetCommandLine;
>
>> I am getting "wrong length for array of type string" errors.
>
>Looking at this code I believe the immediate problem is a fixed length
>"argstr" instead of a newly declared one (of the correct size!) for each
>iteration of the loop.
>
>But there's a wider problem in that the actual parameter for
>CommandLine : OUT String needs to be correctly sized; or (as a function)
>you need to build a correctly sized string piece by piece.
>
>Jeffrey has shown you a recursive way and there's (generally) nothing
>wrong with that. (If your target system has 128 bytes of RAM, that's
>another matter of course!).
>
>If you want a non-iterative approach, one way is to loop twice, first
>calculating the required length, then declare the required length string
>and loop again filling it. This string can then be returned as the
>function result.
>
>function GetCommandLine return String is
> length : natural := 0;
>BEGIN
> for i in 1 to argument_count loop
> length := length + argument(i)'length;
> end loop;
> length := length + argument_count; -- for the spaces!
> declare
> result : String (1 .. length);
> pos : natural := 1;
> begin
> for i in 1 to argument_count loop
> result(pos .. pos + argument(i)'length)
> := argument(i) & " ";
> pos := pos + argument(i)'length;
> end loop;
> return result;
> end;
>end GetCommandLine;
>
>> I was able to get this code working using variable length strings. I
>> used bounded strings by copying the code from the texttools.common
>> routines.
>
>And finally there is nothing wrong with occasional use of bounded or
>unbounded strings if you decide they are the best tool for the job (or if
>it works and you don't want to mess with it further!) Don't infer that I
>avoid them; they simply aren't usually my first choice!
>
>- Brian
No matter what I try, I'm getting a constraint error. I don't
understand what's wrong.
The compiler noticed that FOR i in 1 to argument_count is wrong.
That's modula-2 syntax.
I missed that at first, even after the compiler complained.
next prev parent reply other threads:[~2014-02-03 0:10 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-01-28 1:06 need help learning Ada for a modula-2 programmer agent
2014-01-28 1:33 ` adambeneschan
2014-01-28 1:52 ` Jeffrey Carter
2014-01-28 12:18 ` Brian Drummond
2014-02-02 2:47 ` agent
2014-02-02 6:09 ` Jeffrey Carter
2014-02-02 15:02 ` agent
2014-02-02 16:00 ` gautier_niouzes
2014-02-02 19:48 ` Jeffrey Carter
2014-02-03 8:24 ` Dmitry A. Kazakov
2014-02-02 17:18 ` Brian Drummond
2014-02-03 0:10 ` agent [this message]
2014-02-03 0:36 ` agent
2014-02-03 12:53 ` Brian Drummond
2014-01-28 22:51 ` Jerry
2014-01-29 12:15 ` Mike H
2014-01-29 20:41 ` Jacob Sparre Andersen
2014-01-29 23:52 ` Jeffrey Carter
2014-01-30 9:05 ` Jacob Sparre Andersen
2014-01-30 14:20 ` Mike H
2014-01-30 14:35 ` Bill Findlay
2014-01-30 15:40 ` Mike H
2014-01-30 23:39 ` Jeffrey Carter
2014-01-31 20:16 ` Mike H
2014-01-29 23:52 ` Jeffrey Carter
2014-01-30 1:44 ` Bill Findlay
2014-01-30 2:01 ` Jeffrey Carter
2014-01-30 12:24 ` Simon Wright
2014-01-30 23:38 ` Jeffrey Carter
2014-02-03 23:12 ` agent
2014-02-04 6:10 ` J-P. Rosen
2014-02-04 22:38 ` agent
2014-01-29 16:58 ` Dirk Heinrichs
2014-01-29 20:43 ` Randy Brukardt
2014-01-29 22:53 ` Georg Bauhaus
2014-01-30 12:13 ` Simon Wright
2014-01-30 17:05 ` Dirk Heinrichs
2014-01-30 23:21 ` Randy Brukardt
2014-01-30 4:29 ` Nasser M. Abbasi
2014-01-30 8:45 ` Where to put change descriptions (Was: need help learning Ada for a modula-2 programmer) Jacob Sparre Andersen
2014-01-30 9:53 ` need help learning Ada for a modula-2 programmer Georg Bauhaus
2014-01-30 21:58 ` Randy Brukardt
2014-01-30 16:28 ` Pascal Obry
2014-01-30 17:43 ` Marius Amado-Alves
2014-01-30 18:10 ` Simon Wright
2014-01-30 22:38 ` Randy Brukardt
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox