MainframeMaster

COBOL Tutorial

COBOL FROM Clause

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.

Syntax and Usage

FROM Clause Syntax
cobol
1
2
3
4
5
6
7
8
9
PERFORM 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
Variable Control
Initialization
Range Specification

Basic FROM Examples

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
IDENTIFICATION 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.

Key Features and Benefits

Automatic Initialization
  • • Sets variable starting value
  • • Eliminates manual initialization
  • • Ensures consistent loop setup
  • • Prevents uninitialized variable errors
Flexible Range Control
  • • Supports literal and variable values
  • • Enables dynamic range specification
  • • Allows computed starting points
  • • Integrates with increment control

Interactive Tutorial

Hands-On Exercise: Range Processing
Practice using FROM clause for various initialization scenarios

Exercise 1: Array Processing

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
01 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).

Exercise 2: Range Validation

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
01 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.

Advanced FROM Patterns

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
IDENTIFICATION 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).

Best Practices

Knowledge Check

Test Your Understanding

Question 1: Basic Syntax

What's the correct syntax to start a loop from value 5?

Answer: PERFORM paragraph-name VARYING variable FROM 5 BY increment UNTIL condition

Question 2: Variable Usage

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.

Question 3: Initialization Timing

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.

Common Patterns

Sequential Processing
cobol
1
2
3
4
5
6
7
8
9
10
11
12
01 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.
Range Validation
cobol
1
2
3
4
5
6
7
8
9
10
01 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'.

Frequently Asked Questions