EOF() Determine when end of file is encountered ------------------------------------------------------------------------------ Syntax EOF() --> lBoundary Returns EOF() returns true (.T.) when an attempt is made to move the record pointer beyond the last logical record in a database file; otherwise, it returns false (.F.). If there is no database file open in the current work area, EOF() returns false (.F.). If the current database file contains no records, EOF() returns true (.T.). Description EOF() is a database function used to test for an end of file boundary condition when the record pointer is moving forward through a database file. Any command that can move the record pointer can set EOF(). The most typical application is as a part of the <lCondition> argument of a DO WHILE construct that sequentially processes records in a database file. Here <lCondition> would include a test for .NOT. EOF(), forcing the DO WHILE loop to terminate when EOF() returns true (.T.). EOF() and FOUND() are often used interchangeably to test whether a SEEK, FIND, or LOCATE command failed. With these commands, however, FOUND() is preferred. When EOF() returns true (.T.), the record pointer is positioned at LASTREC() + 1 regardless of whether there is an active SET FILTER or SET DELETED is ON. Further attempts to move the record pointer forward return the same result without error. Once EOF() is set to true (.T.), it retains its value until there is another attempt to move the record pointer. By default, EOF() operates on the currently selected work area. It can be made to operate on an unselected work area by specifying it within an aliased expression (see example below). Examples . This example demonstrates EOF() by deliberately moving the record pointer beyond the last record: USE Sales GO BOTTOM ? EOF() // Result: .F. SKIP ? EOF() // Result: .T. . This example uses aliased expressions to query the value of EOF() in unselected work areas: USE Sales NEW USE Customer NEW ? Sales->(EOF()) ? Customer->(EOF()) . This example illustrates how EOF() can be used as part of a condition for sequential database file operations: USE Sales INDEX CustNum NEW DO WHILE !EOF() nOldCust := Sales->CustNum nTotalAmount := 0 DO WHILE nOldCust = Sales->CustNum .AND. (!EOF()) ? Sales->CustNum, Sales->Description, ; Sales->SaleAmount nTotalAmount += Sales->SaleAmount SKIP ENDDO ? "Total amount: ", nTotalAmount ENDDO Files Library is CLIPPER.LIB.
See Also: BOF() DO WHILE FOUND() GO LASTREC() LOCATE