Цикл WHILE |
Цикл предназначен для организации вывода в отчет многократно повторяющихся однотипных строк, называемых телом цикла. Например, цикл используется для формирования строк таблицы.
<цикл WHILE > ::= .{ [<горизонтальный цикл>] [<цикл с отступом>] while <условие> [; <имя цикла>] <тело цикла> .}
Конструкция открывается и закрывается фигурной скобкой, имеющей префикс точку и стоящей в первой позиции строки. За открывающей скобкой следует признак горизонтального цикла (если Вы собираетесь выводить все значения в одной строке), затем признак цикла с отступом (при необходимости) и ключевое слово while.
<условие> ::= <логическое выражение>
Цикл может иметь имя, расположенное после условия. Перед именем цикла ставится точка с запятой.
Имя цикла используется при создании агрегатных полей.
<имя цикла> ::= <идентификатор> <тело цикла> ::= [<заголовок>] <тело> [<подножие>]
Тело цикла состоит из конструкции <тело> и необязательных заголовка и подножия.
Заголовок и подножие цикла, если они заданы, печатаются на каждой странице отчета в пределах действия цикла. Правила оформления заголовков и подножий цикла совпадают с правилами для заголовков и подножий формы.
В теле цикла используется та же конструкция <тело>, что и в соответствующей форме.
Для выхода из цикла до момента его нормального завершения в конструкции <программный блок> тела цикла можно вызвать метод формы fBreak.
Для выхода из текущей итерации цикла до момента ее нормального завершения и перехода к следующей итерации в конструкции <программный блок> тела цикла можно вызвать метод формы fContinue.
Алгоритм выполнения цикла следующий:
проверяется условие выполнения цикла;
если условие приняло значение false или условие не может быть вычислено, то выходим из цикла; если условие приняло значение true, то выполняется тело цикла;
переход на проверку условия выполнения цикла.
Логическое выражение не может быть вычислено, например, в том случае, если оно содержит обращение к не модифицированному полю таблицы, в которой нет позиции.
Если условие не может быть вычислено или условие приняло значение false к началу цикла, то цикл не будет иметь ни одной итерации.
Пример 1
.form auto2 .table blank .var x:integer .endvar .begin x:=1; end. пример цикла while ------------------ .fields x .endfields .{while x<10 .begin x:=x+1; end. x= ( .} .endform
Пример 2
.form "ex3_0_1" .ard .var x:integer .endvar .table blank .fields x x x .endfields пример горизонтального цикла ----------------------------- .{horizontal while x<10 .begin x:=x+1; end. x = ^ .} .begin x:=0; end. пример горизонтального цикла с отступом ------------------------------ .{horizontal margin while x<10 .begin x:=x+1; end. x = ^ .} .begin x:=0; end. пример обычного цикла с отступом -------------------------------- .{margin while x<10 .begin x:=x+1; end. x = ^ .} .begin x:=0; end. .endform
При исполнении данной автономной формы мы получим следующий отчет:
пример горизонтального цикла -------------------------------- 1 2 3 4 5 6 7 8 9 10 пример горизонтального цикла с отступом -------------------------------- 1 2 3 4 5 6 7 8 9 10 пример обычного цикла с отступом -------------------------------- 1 2 3 4 5 6 7 8 9 10