执行循环,直到条件为 TRUE。
REPEAT
<Statements>...
[EXIT]
<Statements>...
[LOOP]
<Statements>...
UNTIL <lCondition>
<lCondition> | REPEAT UNTIL 循环的逻辑控制表达式。 |
EXIT | 无条件地跳出 FOR、FOREACH、REPEAT 或 DO WHILE 循环,执行 ENDDO 或 NEXT 语句之后的语句。 |
LOOP | 将控制转移到最近执行的 FOR、FOREACH、REPEAT 或 DO WHILE 语句。 |
只要条件评估值为 TRUE,循环就会继续。当条件返回值为 false 时,REPEAT 结构终止,控制权转到 UNTIL 后面的语句。
使用 EXIT 可以根据 REPEAT UNTIL 条件之外的其他条件终止 REPEAT UNTIL 结构。 相比之下,LOOP 会根据中间条件阻止 REPEAT UNTIL 中语句的执行,并返回到最近的 REPEAT UNTIL 语句。
控制结构可以嵌套到任意深度。 唯一的要求是每个控制结构都必须正确嵌套。
本例演示了简单分组报告的典型控制结构:
LOCAL cOldSalesman, nTotalAmount
USE sales INDEX salesman NEW
DO WHILE .NOT. EOF()
cOldSalesman := Sales->Salesman
nTotalAmount := 0
DO WHILE cOldSalesman = Sales->Salesman ;
.AND. (.NOT. EOF())
? Sales->Salesman, Sales->Amount
nTotalAmount := nTotalAmount + Sales->Amount
SKIP
ENDDO
? "Total: ", nTotalAmount, "for", cOldSalesman
ENDDO
CLOSE sales
该代码片段演示了如何使用 LOOP 提供中间处理条件:
DO WHILE <lCondition>
<Initial Processing>...
IF <Intermediate Condition>
LOOP
ENDIF
<Continued Processing>...
ENDDO
下一个示例演示了如何使用 DO WHILE 来模拟 "repeat until 循环 "结构:
LOCAL lMore := TRUE
DO WHILE lMore
<Statements>...
lMore := <lCondition>
ENDDO
在这里,DO WHILE 循环按顺序移动数据库文件(的指针):
DO WHILE .NOT. EOF()
<Statements>...
SKIP
ENDDO
BEGIN SEQUENCE, DBEval(), DO CASE, FOR, IF, RETURN, DO WHILE, EXIT, LOOP