DO WHILE
 Ejecuta un bucle mientras una condición resulta verdadera (.T.)
------------------------------------------------------------------------------
 Sintaxis

     [DO] WHILE <lCondición>
        <sentencias>...
        [EXIT]
        <sentencias>...
        [LOOP]
        <sentencias>...
     END[DO]

 Argumentos

     <lCondición> es la expresión de control lógica del bucle DO WHILE.

     EXIT bifurca incondicionalmente el control de una estructura DO
     WHILE o FOR...NEXT a la sentencia inmediatamente después de la próxima
     ENDDO o NEXT.

     LOOP bifurca el control a la sentencia DO WHILE o FOR ejecutada más
     recientemente.

 Descripción

     DO WHILE...ENDDO es una estructura de control que ejecuta
     repetitivamente un bloque de sentencias mientras <lCondición> sea
     verdadera. Mientras esta condición resulte verdadera, el control pasa a
     la estructura y continúa hasta encontrar una sentencia EXIT, LOOP o
     ENDDO. ENDDO devuelve el control a la sentencia DO WHILE y el proceso
     se repite. Si se encuentra una sentencia EXIT, el control se bifurca a
     la sentencia ENDDO o NEXT más próxima. Si se encuentra una sentencia
     LOOP, el control se bifurca a la sentencia DO WHILE o FOR más próxima.
     Cuando la condición es falsa, finaliza la estructura DO WHILE y el
     control pasa a la sentencia inmediatamente siguiente a ENDDO.

     EXIT permite terminar una estructura DO WHILE con una condición
     distinta a la condición DO WHILE original. LOOP, sin embargo, no
     permite ejecutar sentencias dentro de DO WHILE basadas en una condición
     intermedia y devuelve el control a la sentencia DO WHILE más reciente.

     La estructura DO WHILE puede anidarse dentro de otras estructuras de
     control a cualquier profundidad. El único requisito es que cada
     estructura de control se anide adecuadamente.

 Ejemplos

      Este ejemplo muestra una estructura de control típica de un
        informe sencillo agrupado:

        LOCAL cVendedorAnterior, nTotalCantidad
        USE Ventas INDEX Vendedor NEW
        DO WHILE .NOT. EOF()
           cVendedorAnterior := Ventas->Vendedor
           nTotalCantidad := 0
           DO WHILE cVendedorAnterior = Ventas->Vendedor ;
              .AND. (.NOT. EOF())
              ? Ventas->Vendedor, Ventas->Cantidad
              nTotalCantidad := nTotalCantidad + Ventas->Cantidad
              SKIP
           ENDDO
           ? "Total: ", nTotalCantidad, "del", cVendedorAnterior
        ENDDO
        CLOSE Ventas

      Este fragmento de código muestra cómo puede utilizarse LOOP
        para establecer un tratamiento condicional:

        DO WHILE <lCondición>
           <tratamiento inicial>...
           IF <Condición intermedia>
              LOOP
           ENDIF
           <tratamiento restante>...
        ENDDO

      Este ejemplo muestra la utilización de DO WHILE para emular
        una estructura de bucle de tipo REPEAT UNTIL:

        LOCAL lMas := .T.
        DO WHILE lMas
           <sentencias>...
           lMas := (<lCondición>)
        ENDDO

      Este ejemplo utiliza un bucle DO WHILE para desplazarse
        secuencialmente por un fichero de base de datos:

        DO WHILE .NOT. EOF()
           <sentencias>...
           SKIP
        ENDDO

 To download this example - click here.

See Also: BEGIN SEQUENCE DBEVAL() DO CASE FOR IF IF() RETURN