"J-P. Rosen" 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.