From: DrPi <314@drpi.fr>
Subject: Re: Usage of Stream Set_Index() function
Date: Sat, 15 Jan 2022 11:36:15 +0100 [thread overview]
Message-ID: <61e2a3a0$0$8882$426a34cc@news.free.fr> (raw)
In-Reply-To: <j4e555F1iffU1@mid.individual.net>
Le 14/01/2022 à 21:35, Niklas Holsti a écrit :
> On 2022-01-14 20:30, DrPi wrote:
>>
>> Hi,
>>
>> I'm writing an application where I read a file with a complex structure.
>> For this, I use Ada.Streams.Stream_IO package.
>> To read the file, I need to position the file pointer to the correct
>> location. I do this using Set_Index().
>>
>> In ARM A.12.1, it is stated :
>> For Read and Write with a Positive_Count parameter, the value of the
>> current index is set to the value of the Positive_Count parameter plus
>> the number of stream elements read or written.
>>
>> I don't understand the "plus the number of stream elements read or
>> written".
>
>
> For Write, the ARM also says: "The Write procedure with a Positive_Count
> parameter starts writing at the specified index". And then, after the
> data have been written, naturally the current index of the stream has
> been increased, to point at the position after the written data. That is
> the meaning of the "plus" phrase.
>
> And Read analogously. The "plus" phrase explains what the value of the
> current index is _after_ the Read or Write. But both the Read and the
> Write _start_ reading/writing at the index given in the From/To parameters.
>
>
>> Does this mean one can't go back to beginning of file once data have
>> been read ?
>
>
> No, Set_Index can do that, whether the last action was writing or
> reading. And the Write/Read with an index parameter can also do that.
>
> But if you have set the current index to the desired position with
> Set_Index, you don't need to use the Read/Write that have a
> Positive_Count (index) parameter.
>
> This code:
>
> Set_Index (F, I);
> Write (F, Item);
>
> is equivalent to:
>
> Write (F, Item, I);
>
> and ditto Read.
Ok, so Set_Index() works as expected. Nothing special.
Reading the LRM made me understand things incorrectly because of the way
it is written.
It is written :
32 The Set_Index procedure sets the current index to the specified value.
Then, it is written :
32.1/1 ...
32.2/1 ...
...
Reading this, I thought 32.1/1, 32.2/1 etc lines apply to 32
(Set_Index() function).
So, I was completely lost to understand the meaning of these lines.
prev parent reply other threads:[~2022-01-15 10:36 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-14 18:30 Usage of Stream Set_Index() function DrPi
2022-01-14 20:35 ` Niklas Holsti
2022-01-15 10:36 ` DrPi [this message]
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox