The FOR clause represents a fundamental iteration control mechanism in COBOL programming, serving as a precise specification for defining the number of times a particular operation, paragraph, or section should be executed within repetitive processing structures. This clause embodies the principles of controlled iteration by providing deterministic loop execution capabilities, enabling sophisticated repetitive processing patterns, and supporting efficient batch processing operations while maintaining program clarity and ensuring predictable execution behavior in enterprise applications and data processing systems that require precise iteration control and performance optimization.
12345678PERFORM paragraph-name FOR integer TIMES PERFORM paragraph-name FOR identifier TIMES PERFORM paragraph-name VARYING identifier FROM initial-value BY increment-value UNTIL condition FOR maximum-iterations TIMES
123456789101112131415161718192021222324252627282930313233IDENTIFICATION DIVISION. PROGRAM-ID. FOR-CLAUSE-EXAMPLES. DATA DIVISION. WORKING-STORAGE SECTION. 01 LOOP-COUNTER PIC 9(3) VALUE 0. 01 ITERATION-COUNT PIC 9(3) VALUE 5. 01 TOTAL-PROCESSED PIC 9(5) VALUE 0. PROCEDURE DIVISION. MAIN-PROCESSING. *> Basic FOR with literal count PERFORM SIMPLE-OPERATION FOR 10 TIMES *> FOR with variable count PERFORM VARIABLE-OPERATION FOR ITERATION-COUNT TIMES *> FOR with computed count COMPUTE ITERATION-COUNT = 3 * 4 PERFORM COMPUTED-OPERATION FOR ITERATION-COUNT TIMES STOP RUN. SIMPLE-OPERATION. ADD 1 TO LOOP-COUNTER DISPLAY 'Simple operation iteration: ' LOOP-COUNTER. VARIABLE-OPERATION. ADD 1 TO TOTAL-PROCESSED DISPLAY 'Variable operation iteration: ' TOTAL-PROCESSED. COMPUTED-OPERATION. DISPLAY 'Computed operation executed'.
1234567891011121314151617181901 DATA-ARRAY OCCURS 50 TIMES. 05 ARRAY-VALUE PIC 9(5). 01 ARRAY-INDEX PIC 9(2) VALUE 1. PROCEDURE DIVISION. *> Initialize array using FOR PERFORM INITIALIZE-ELEMENT FOR 50 TIMES *> Process array using FOR MOVE 1 TO ARRAY-INDEX PERFORM PROCESS-ELEMENT FOR 50 TIMES. INITIALIZE-ELEMENT. COMPUTE ARRAY-VALUE(ARRAY-INDEX) = ARRAY-INDEX * 10 ADD 1 TO ARRAY-INDEX. PROCESS-ELEMENT. DISPLAY 'Element ' ARRAY-INDEX ': ' ARRAY-VALUE(ARRAY-INDEX) ADD 1 TO ARRAY-INDEX.
12345678910111213141516171801 BATCH-SIZE PIC 9(3) VALUE 100. 01 RECORD-COUNT PIC 9(5) VALUE 0. PROCEDURE DIVISION. *> Process records in batches PERFORM PROCESS-BATCH FOR 10 TIMES. PROCESS-BATCH. DISPLAY 'Starting batch processing...' PERFORM PROCESS-RECORD FOR BATCH-SIZE TIMES DISPLAY 'Batch completed. Records processed: ' RECORD-COUNT. PROCESS-RECORD. ADD 1 TO RECORD-COUNT *> Simulate record processing IF FUNCTION MOD(RECORD-COUNT, 25) = 0 DISPLAY 'Processed ' RECORD-COUNT ' records' END-IF.
12345678910111213141516171819202122232425262728293031323334353637IDENTIFICATION DIVISION. PROGRAM-ID. ADVANCED-FOR-PATTERNS. DATA DIVISION. WORKING-STORAGE SECTION. 01 DYNAMIC-COUNT PIC 9(3). 01 NESTED-COUNTER PIC 9(2) VALUE 0. 01 MATRIX OCCURS 10 TIMES. 05 MATRIX-ROW OCCURS 10 TIMES. 10 MATRIX-CELL PIC 9(3). PROCEDURE DIVISION. MAIN-PROCESSING. *> Dynamic count based on conditions COMPUTE DYNAMIC-COUNT = FUNCTION CURRENT-DATE(7:2) IF DYNAMIC-COUNT < 5 MOVE 5 TO DYNAMIC-COUNT END-IF PERFORM DYNAMIC-OPERATION FOR DYNAMIC-COUNT TIMES *> Nested FOR loops for matrix processing PERFORM PROCESS-MATRIX-ROW FOR 10 TIMES STOP RUN. DYNAMIC-OPERATION. ADD 1 TO NESTED-COUNTER DISPLAY 'Dynamic operation ' NESTED-COUNTER. PROCESS-MATRIX-ROW. ADD 1 TO NESTED-COUNTER DISPLAY 'Processing matrix row ' NESTED-COUNTER PERFORM PROCESS-MATRIX-CELL FOR 10 TIMES. PROCESS-MATRIX-CELL. COMPUTE MATRIX-CELL(NESTED-COUNTER, 1) = NESTED-COUNTER * 10.
What's the correct syntax to execute a paragraph 15 times?
Answer: PERFORM PARAGRAPH-NAME FOR 15 TIMES
How do you use a variable to control FOR loop iterations?
Answer: PERFORM PARAGRAPH-NAME FOR variable-name TIMES, where variable-name contains the iteration count.
What should you check before using a variable in a FOR clause?
Answer: Validate that the variable contains a positive numeric value and is within acceptable range to prevent infinite loops or performance issues.
1234567891001 DATA-TABLE OCCURS 100 TIMES. 05 TABLE-VALUE PIC 9(5). 01 INDEX-VAR PIC 9(3) VALUE 1. PROCEDURE DIVISION. PERFORM INIT-TABLE-ELEMENT FOR 100 TIMES. INIT-TABLE-ELEMENT. MOVE ZEROS TO TABLE-VALUE(INDEX-VAR) ADD 1 TO INDEX-VAR.
12345678901 LINES-PER-PAGE PIC 9(2) VALUE 60. 01 CURRENT-LINE PIC 9(2) VALUE 1. PROCEDURE DIVISION. PERFORM PRINT-REPORT-LINE FOR LINES-PER-PAGE TIMES. PRINT-REPORT-LINE. DISPLAY 'Report line ' CURRENT-LINE ADD 1 TO CURRENT-LINE.