Login
`
Templates, Tools and Utilities
|
||
Icetips Article
Back to article list
Search Articles
Add Comment
Printer friendly
Direct link
Par2: EOF() - discussion of proper utilization 1998-05-18 -- Sean Wilson Back in the good ol' days of DOS, when single user databases were the norm, the
EOF() (and the BOF()) function provides a convenient means of terminating a loop
for processing a file, e.g:
LOOP UNTIL EOF()
NEXT(f)
...
END
As multi-user systems took over, the use of the EOF() function became problematic. In
a nutshell, it is possible for EOF() to return FALSE and yet have the NEXT() file read fail
as a result of reading past the end of the file. This can happen when a second station
deletes the last record in a file in the time between the first stations calls to EOF() and
NEXT().
This isn't the only problem though. In the not too distant past, the behaviour of all the
Clarion File Drivers was standardised by converting to use the File Driver Kit. The File
Driver Kit attempts to ensure that all supported functions behave identically accross
all File Drivers. At this point it was clear that the only safe way to test for an end-of-file
condition was to test the result of the NEXT() function, e.g:
LOOP
NEXT(f)
IF ERRORCODE() THEN
BREAK
END
...
END
The closely related NEXT(), PREVIOUS(), EOF() and BOF() functions are generally
implemented for best performance in this kind of scenario since efficient multi-user
operation is required. Furthermore, for reliability each of these functions must attempt
a record fetch in order to be sure that a record is available for processing (in pre-CW
drivers, EOF() might return the value of a flag). This means that loops patterned after
our first example can actually take twice as long to process (and possibly more) than
the second example.
So as a general rule of thumb, never use EOF() or BOF() to control a loop. In fact, if
possible avoid the use of EOF() and BOF() altogether.
Today is November 21, 2024, 3:34 am This article has been viewed 35207 times.
|
|