EOF( )
Determina cuándo se detecta el final del fichero
Sintaxis
EOF() –> lLímite
Devuelve
EOF() devuelve verdadero (.T.) cuando se efectúa un intento de desplazar el puntero de registros sobrepasando el último registro lógico de un fichero de base de datos; de lo contrario, devuelve falso (.F.). Si no hay fichero de base de datos abierto en el área de trabajo actual, EOF() devuelve falso (.F.). Si el fichero de base de datos actual no contiene registros, EOF() devuelve verdadero (.T.).
Descripción
EOF() es una función de base de datos utilizada para comprobar una condición límite de fin de fichero cuando el puntero del registro avanza por un fichero de base de datos. Cualquier mandato que pueda desplazar el puntero del registro puede establecer EOF().
La aplicación más habitual es como una parte del argumento <lCondición> de una construcción DO WHILE que procesa secuencialmente registros en un fichero de base de datos. Aquí <lCondición> incluiría una comprobación de .NOT. EOF(), forzando al bucle DO WHILE a terminar cuando EOF() devuelve verdadero (.T.).
EOF() y FOUND() se utilizan, frecuentemente, de manera intercambiable para comprobar si un mandato SEEK, FIND, o LOCATE ha resultado fallido. Sin embargo, con estos mandatos es preferible FOUND().
Cuando EOF() devuelve verdadero (.T.), el puntero del registro se sitúa en LASTREC() + 1 con independencia de si existe un filtro activo o si se ha establecido SET DELETED ON. Otros intentos de avanzar el puntero del registro devuelven el mismo resultado sin error. Una vez que EOF() está establecido en verdadero (.T.), retiene su valor hasta que se produce otro intento de desplazar el puntero del registro.
Por defecto, EOF() opera en el área de trabajo seleccionada actualmente. Se puede hacer que actúe en un área de trabajo no seleccionada especificándola dentro de una expresión con alias (consulte el ejemplo a continuación).
Ejemplos
¦ En este ejemplo se muestra el uso de EOF() desplazando deliberadamente el puntero del registro más allá del último registro:
USE Ventas
GO BOTTOM
? EOF() // Resultado: .F.
SKIP
? EOF() // Resultado: .T.
¦ En este ejemplo se utilizan expresiones con alias para consultar el valor de EOF() en áreas de trabajo no seleccionadas:
USE Ventas NEW
USE Cliente NEW
? Ventas->(EOF())
? Cliente->(EOF())
¦ En este ejemplo se ilustra cómo EOF() puede utilizarse como parte de una condición para operaciones de ficheros de bases de datos secuenciales:
USE Sales INDEX NumClie NEW
DO WHILE !EOF()
nClieAnt := Ventas->NumClie
nCantTotal := 0
DO WHILE nClieAnt = Ventas->NumClie .AND. (!EOF())
? Ventas->NumClie, Ventas->Descripcion,
Ventas->CantVentas
nCantTotal += Ventas->CantVentas
SKIP
ENDDO
? “Cantidad total: “, nCantTotal
ENDDO
Ficheros: La biblioteca asociada es DPXBASE.CH.