Nп/п : 32 из 100
 От   : Blady                               2:5075/128        22 сен 23 21:30:15
 К    : All                                                   22 сен 23 22:34:08
 Тема : Weird behavior of Get character with trailing new lines.
----------------------------------------------------------------------------------
                                                                                 
@MSGID: 1@dont-email.me> 4e5ef6ae
@REPLYADDR Blady <p.p11@orange.fr>
@REPLYTO 2:5075/128 Blady
@CHRS: CP866 2
@RFC: 1 0
@RFC-Message-ID: 1@dont-email.me>
@TZUTC: 0200
@PID: Mozilla/5.0 (Macintosh; Intel Mac OS X
10.15; rv:102.0) Gecko/20100101 Thunderbird/102.15.1
@TID: FIDOGATE-5.12-ge4e8b94
Hello,

I`m reading a text file with Get character from Text_IO with a while 
loop controlled by End_Of_File.

% cat test_20230922_get_char.adb
with Ada.Text_IO; use Ada.Text_IO;
procedure test_20230922_get_char is
    procedure Get is
       F : File_Type;
       Ch : Character;
    begin
       Open (F, In_File, "test_20230922_get_char.adb");
       while not End_Of_File(F) loop
          Get (F, Ch);
          Put (Ch);
       end loop;
       Close (F);
       Put_Line ("File read with get.");
    end;
begin
Get;
end;



All will be well, unfortunately not!

Despite the End_Of_File, I got an END_ERROR exception when there are 
several trailing new lines at the end of the text:

% test_20230922_get_char
with Ada.Text_IO; use Ada.Text_IO;procedure test_20230922_get_char is 
procedure Get is      F : File_Type;      Ch : Character;   begin 
Open (F, In_File, "test_20230922_get_char.adb");      while not 
End_Of_File(F) loop         Get (F, Ch);         Put (Ch);      end 
loop;      Close (F);      Put_Line ("File read with get."); 
end;beginGet;end;

Execution of ../bin/test_20230922_get_char terminated by unhandled exception
raised ADA.IO_EXCEPTIONS.END_ERROR : a-textio.adb:517

The code is compiled with GNAT, does it comply with the standard?

A.10.7 Input-Output of Characters and Strings
For an item of type Character the following procedures are provided:
procedure Get(File : in File_Type; Item : out Character);
procedure Get(Item : out Character);
After skipping any line terminators and any page terminators, reads the 
next character from the specified input file and returns the value of 
this character in the out parameter Item.
The exception End_Error is propagated if an attempt is made to skip a 
file terminator.

This seems to be the case, then how to avoid the exception?

Thanks, Pascal.



 --- Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0)
Gecko/20100101 Thunderbird/102.15.1
 * Origin: A noiseless patient Spider (2:5075/128)
SEEN-BY: 5001/100 5005/49 5015/255 5019/40 5020/715
848 1042 4441 12000
SEEN-BY: 5030/49 1081 5058/104 5075/128
@PATH: 5075/128 5020/1042 4441



   GoldED+ VK   │                                                 │   09:55:30    
                                                                                
В этой области больше нет сообщений.

Остаться здесь
Перейти к списку сообщений
Перейти к списку эх