The FROM clause represents a critical variable control and initialization mechanism within COBOL programming structures, serving as the primary specification for defining starting values in loop control variables, range operations, and iterative processing constructs. This clause embodies the principles of controlled variable initialization by providing automatic starting value assignment capabilities, enabling sophisticated range-based processing patterns, and supporting efficient iteration control while maintaining program clarity and ensuring predictable variable state management in enterprise applications that require precise loop control, array processing, and systematic data manipulation operations.
123456789PERFORM paragraph-name VARYING identifier FROM initial-value BY increment-value UNTIL condition PERFORM paragraph-name VARYING identifier FROM literal BY literal UNTIL identifier > final-value
123456789101112131415161718192021222324252627282930313233343536373839404142IDENTIFICATION DIVISION. PROGRAM-ID. FROM-CLAUSE-EXAMPLES. DATA DIVISION. WORKING-STORAGE SECTION. 01 LOOP-INDEX PIC 9(3). 01 START-VALUE PIC 9(3) VALUE 1. 01 END-VALUE PIC 9(3) VALUE 10. 01 INCREMENT-VALUE PIC 9(2) VALUE 2. 01 TOTAL-SUM PIC 9(5) VALUE 0. PROCEDURE DIVISION. MAIN-PROCESSING. *> Basic FROM with literals PERFORM SIMPLE-LOOP VARYING LOOP-INDEX FROM 1 BY 1 UNTIL LOOP-INDEX > 5 *> FROM with variables PERFORM VARIABLE-LOOP VARYING LOOP-INDEX FROM START-VALUE BY INCREMENT-VALUE UNTIL LOOP-INDEX > END-VALUE *> FROM with computed values COMPUTE START-VALUE = 10 COMPUTE END-VALUE = 50 PERFORM COMPUTED-LOOP VARYING LOOP-INDEX FROM START-VALUE BY 5 UNTIL LOOP-INDEX > END-VALUE STOP RUN. SIMPLE-LOOP. DISPLAY 'Simple loop iteration: ' LOOP-INDEX. VARIABLE-LOOP. ADD LOOP-INDEX TO TOTAL-SUM DISPLAY 'Variable loop - Index: ' LOOP-INDEX ' Running total: ' TOTAL-SUM. COMPUTED-LOOP. DISPLAY 'Computed loop iteration: ' LOOP-INDEX.
123456789101112131401 SALES-DATA OCCURS 12 TIMES. 05 MONTH-SALES PIC 9(7)V99. 01 MONTH-INDEX PIC 9(2). 01 TOTAL-SALES PIC 9(9)V99 VALUE 0. PROCEDURE DIVISION. *> Process all months PERFORM CALCULATE-MONTHLY-TOTAL VARYING MONTH-INDEX FROM 1 BY 1 UNTIL MONTH-INDEX > 12. CALCULATE-MONTHLY-TOTAL. ADD MONTH-SALES(MONTH-INDEX) TO TOTAL-SALES DISPLAY 'Month ' MONTH-INDEX ': $' MONTH-SALES(MONTH-INDEX).
123456789101112131415161701 INPUT-VALUE PIC 9(3). 01 VALID-RANGE-START PIC 9(3) VALUE 100. 01 VALID-RANGE-END PIC 9(3) VALUE 999. 01 CHECK-VALUE PIC 9(3). PROCEDURE DIVISION. *> Validate input against range PERFORM CHECK-RANGE-VALUE VARYING CHECK-VALUE FROM VALID-RANGE-START BY 1 UNTIL CHECK-VALUE > VALID-RANGE-END OR CHECK-VALUE = INPUT-VALUE. CHECK-RANGE-VALUE. IF CHECK-VALUE = INPUT-VALUE DISPLAY 'Input value ' INPUT-VALUE ' is valid' EXIT PARAGRAPH END-IF.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253IDENTIFICATION DIVISION. PROGRAM-ID. ADVANCED-FROM-PATTERNS. DATA DIVISION. WORKING-STORAGE SECTION. 01 MATRIX-DIMENSIONS. 05 ROWS PIC 9(2) VALUE 10. 05 COLS PIC 9(2) VALUE 8. 01 ROW-INDEX PIC 9(2). 01 COL-INDEX PIC 9(2). 01 DATA-MATRIX OCCURS 10 TIMES. 05 MATRIX-ROW OCCURS 8 TIMES. 10 CELL-VALUE PIC 9(5). 01 PROCESSING-RANGE. 05 START-ROW PIC 9(2) VALUE 3. 05 END-ROW PIC 9(2) VALUE 7. 05 START-COL PIC 9(2) VALUE 2. 05 END-COL PIC 9(2) VALUE 6. PROCEDURE DIVISION. MAIN-PROCESSING. *> Initialize entire matrix PERFORM INITIALIZE-MATRIX-ROW VARYING ROW-INDEX FROM 1 BY 1 UNTIL ROW-INDEX > ROWS *> Process specific range PERFORM PROCESS-RANGE-ROW VARYING ROW-INDEX FROM START-ROW BY 1 UNTIL ROW-INDEX > END-ROW STOP RUN. INITIALIZE-MATRIX-ROW. PERFORM INITIALIZE-MATRIX-CELL VARYING COL-INDEX FROM 1 BY 1 UNTIL COL-INDEX > COLS. INITIALIZE-MATRIX-CELL. COMPUTE CELL-VALUE(ROW-INDEX, COL-INDEX) = ROW-INDEX * 10 + COL-INDEX. PROCESS-RANGE-ROW. DISPLAY 'Processing row ' ROW-INDEX PERFORM PROCESS-RANGE-CELL VARYING COL-INDEX FROM START-COL BY 1 UNTIL COL-INDEX > END-COL. PROCESS-RANGE-CELL. MULTIPLY CELL-VALUE(ROW-INDEX, COL-INDEX) BY 2 DISPLAY 'Cell [' ROW-INDEX ',' COL-INDEX '] = ' CELL-VALUE(ROW-INDEX, COL-INDEX).
What's the correct syntax to start a loop from value 5?
Answer: PERFORM paragraph-name VARYING variable FROM 5 BY increment UNTIL condition
Can you use a variable instead of a literal in the FROM clause?
Answer: Yes, you can use variables in FROM clauses: PERFORM paragraph VARYING counter FROM start-variable BY increment UNTIL condition.
When is the FROM value assigned to the control variable?
Answer: The FROM value is assigned to the control variable before the first iteration of the loop begins, ensuring proper initialization.
12345678910111201 RECORD-TABLE OCCURS 1000 TIMES. 05 RECORD-DATA PIC X(80). 01 INDEX-VAR PIC 9(4). PROCEDURE DIVISION. PERFORM PROCESS-RECORD VARYING INDEX-VAR FROM 1 BY 1 UNTIL INDEX-VAR > 1000. PROCESS-RECORD. *> Process RECORD-DATA(INDEX-VAR) CONTINUE.
1234567891001 MIN-VALUE PIC 9(3) VALUE 100. 01 MAX-VALUE PIC 9(3) VALUE 999. 01 TEST-VALUE PIC 9(3). 01 VALID-FLAG PIC X VALUE 'N'. PROCEDURE DIVISION. PERFORM CHECK-VALIDITY VARYING TEST-VALUE FROM MIN-VALUE BY 1 UNTIL TEST-VALUE > MAX-VALUE OR VALID-FLAG = 'Y'.