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".
Does this mean one can't go back to beginning of file once data have
been read ?
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.
Sysop: | Keyop |
---|---|
Location: | Huddersfield, West Yorkshire, UK |
Users: | 379 |
Nodes: | 16 (2 / 14) |
Uptime: | 44:58:39 |
Calls: | 8,141 |
Calls today: | 4 |
Files: | 13,085 |
Messages: | 5,858,057 |