• Usage of Stream Set_Index() function

    From DrPi@21:1/5 to All on Fri Jan 14 19:30:25 2022
    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 ?

    Nicolas

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Niklas Holsti@21:1/5 to DrPi on Fri Jan 14 22:35:49 2022
    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.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From DrPi@21:1/5 to All on Sat Jan 15 11:36:15 2022
    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.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From =?UTF-8?B?0JDQu9C10LrRgdC10Lkg0JTQt@21:1/5 to All on Mon Jan 24 04:40:27 2022
    I can suggest, by the way, to many students who are also looking to order a good and high-quality essay for themselves. It is necessary to get acquainted in advance with the companies that can help with such services. I already know for sure that it will
    be better to turn here https://www.topwritersreview.com/reviews/get-essay/ to get acquainted with one of them in detail. It helped me to figure it out, I hope it will help you too.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)