comp.lang.ada
 help / color / mirror / Atom feed
From: "Randy Brukardt" <randy@rrsoftware.com>
Subject: Re: Weird behavior of Get character with trailing new lines.
Date: Tue, 26 Sep 2023 00:53:53 -0500	[thread overview]
Message-ID: <uetrko$2cb0h$1@dont-email.me> (raw)
In-Reply-To: uem2id$moia$1@dont-email.me

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 2080 bytes --]

"J-P. Rosen" <rosen@adalog.fr> wrote in message 
news:uem2id$moia$1@dont-email.me...
> Le 22/09/2023 à 22:05, Jeffrey R.Carter a écrit :
>> On 2023-09-22 21:30, Blady wrote:
>>>
>>> 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.
>>
>> As you have quoted, Get (Character) skips line terminators. End_Of_File 
>> returns True if there is a single line terminator before the file 
>> terminator, but False if there are multiple line terminators before the 
>> file terminator. So you either have to explicitly skip line terminators, 
>> or handle End_Error.
>>
> And this works only if the input file is "well formed", i.e. if it has 
> line terminators as the compiler expects them to be (f.e., you will be in 
> trouble if the last line has no LF).
> That's why I never check End_Of_File, but handle the End_Error exception. 
> It always works.

Agreed. And if the file might contain a page terminator, things get even 
worse because you would have to mess around with End_of_Page in order to 
avoid hitting a combination that still will raise End_Error. It's not worth 
the mental energy to avoid it, especially in a program that will be used by 
others. (I've sometimes used the simplest possible way to writing a 
"quick&dirty" program for my own use; for such programs I skip the error 
handling as I figure I can figure out what I did wrong by looking at the 
exception raised. But that's often a bad idea even in that case as such 
programs have a tendency to get reused years later and then the intended 
usage often isn't clear.)

                         Randy.


      parent reply	other threads:[~2023-09-26  5:53 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-09-22 19:30 Weird behavior of Get character with trailing new lines Blady
2023-09-22 19:52 ` Niklas Holsti
2023-09-22 20:05 ` Jeffrey R.Carter
2023-09-23  7:02   ` J-P. Rosen
2023-09-23  8:39     ` Niklas Holsti
2023-09-23  9:25       ` Dmitry A. Kazakov
2023-09-23 14:03         ` Niklas Holsti
2023-09-24  7:50           ` Dmitry A. Kazakov
2023-09-25 19:55       ` Blady
2023-09-26  5:53     ` Randy Brukardt [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