| **Navigation:**  [[templates.htm|Templates]] > [[tlrcontents.htm|Template Language Reference]] > Complete Alpha Listing >====== #LOOP (iteratively generate code) {{c6h0068.jpg|C6H0068.jpg}} ====== | [[ localdata default local data declarations .htm|{{btn_prev_n.gif|Previous page}}]][[tlrcontents.htm|{{btn_home_n.gif|Return to chapter overview}}]][[ message display source generation message .htm|{{btn_next_n.gif|Next page}}]] | | || | | **#LOOP** [, | | **UNTIL(** //expression// **)** | ] | | | | | **WHILE(** //expression// **)** | | | | | | **FOR(** //counter, start, end// **)** [, **BY(** //step// **)** ] | | | | | | **TIMES(** //iterations// **)** | | | | //statements// | | | | **#ENDLOOP** | | {{blk2blue.jpg|blk2blue.jpg}} | **#LOOP** | Initiates an iterative statement execution structure. | | **UNTIL** | Evaluates its //expression// before each iteration of the #LOOP. If its //expression// evaluates to true, the #LOOP control sequence terminates. | | //expression// | Any Template language expression which can evaluate to false (blank or zero) or true (any other value). | | **WHILE** | Evaluates its //expression// before each iteration of the #LOOP. If its //expression// evaluates to false, the #LOOP control sequence terminates. | | **FOR** | Initializes its //counter// to the //start// value, and increments it by the //step// value each time through the loop. When the //counter// is greater than the //end// value, the #LOOP control sequence terminates. | | //counter// | A user-defined symbol used as the loop counter. | | //start// | An expression containing the initial value to which to set the loop //counter//. | | //end// | An expression containing the ending value of the loop //counter//. | | **BY** | Explicitly defines the increment value for the //counter//. | | //step// | An expression containing the increment value for the //counter//. If omitted, the //step// defaults to one (1). | | **TIMES** | Loops the number of times specified by the //iterations//. | | //iterations// | An expression containing the number of times to loop. | | //statements// | One or more target and/or Template Language statements. | | **#ENDLOOP** | Terminates the #LOOP structure. | A **#LOOP** structure repetitively executes the //statements// within its structure. The #LOOP structure must be terminated by **#ENDLOOP**. If there is no #ENDLOOP, an error message is issued during Template file pre-processing. A #LOOP structure may be nested within another #LOOP structure. The **#LOOP,UNTIL** or **#LOOP,WHILE** statements create exit conditions for the #LOOP. Their //expressions// are always evaluated at the top of the #LOOP, before the #LOOP is executed. A #LOOP WHILE structure continuously loops as long as the //expression// is true. A #LOOP UNTIL structure continuously loops as long as the //expression// is false. The //expression// may contain Template symbols, constant values, and any of the arithmetic, Boolean, and logical operators documented in the //Language Reference//. Procedure calls are allowed. If the modulus division operator (%) is used in the //expression//, it must be followed by at least one blank space (to explicitly differentiate it from the Template symbols). The **#LOOP,FOR** statement also creates an exit condition for the #LOOP. The #LOOP initializes the //counter// to the //start// value on its first iteration. The #LOOP automatically increments the //counter// by the //step// value on each subsequent iteration, then evaluates the //counter// against the //end// value. When the //counter// is greater than the //end//, the #LOOP control sequence terminates. #LOOP (without WHILE, UNTIL, or FOR) loops continuously, unless a #BREAK or #RETURN statement is executed. #BREAK terminates the #LOOP and continues execution with the statement following the #LOOP structure. All //statements// within a #LOOP structure are executed unless a #CYCLE statement is executed. #CYCLE immediately gives control back to the top of the #LOOP for the next iteration, without executing any statements following the #CYCLE in the #LOOP. **Example:** **#SET(%LoopBreakFlag,'NO')** **#LOOP****                                #!Continuous loop** **  #INSERT(%SomeRepeatedCodeGroup)** **  #IF(%LoopBreakFlag = 'YES')        #!Check break condition** **    #BREAK** **  #ENDIF** **#ENDLOOP** **#SET(%LoopBreakFlag,'NO')** **#LOOP****,UNTIL(%LoopBreakFlag = 'YES')  #!Loop until condition is true** **  #INSERT(%SomeRepeatedCodeGroup)** **#ENDLOOP** **#SET(%LoopBreakFlag,'NO')** **#LOOP****,WHILE(%LoopBreakFlag = 'NO')   #!Loop while condition is true** **  #INSERT(%SomeRepeatedCodeGroup)** **#ENDLOOP** **See Also:     **[[ break break out of a loop .htm|#BREAK]] ,[[ cycle cycle to top of loop .htm|#CYCLE]]