OF

Overview

The OF clause is a fundamental component in COBOL used for qualification and specification purposes. It establishes hierarchical relationships between data items, specifies file associations, and provides context for various COBOL operations. The terms OFand IN are interchangeable in most contexts.

Primary Uses

Data Qualification

Identifies specific data items within structures

File Record Association

Links record descriptions to file definitions

OCCURS DEPENDING ON

Specifies variable table dimensions

Group Item Access

References subordinate items within groups

Data Qualification

Basic Qualification Syntax

data-name-1 OF data-name-2 [OF data-name-3] ...
data-name-1 IN data-name-2 [IN data-name-3] ...

OF and IN are functionally equivalent.

Qualified Data Names Example

01  CUSTOMER-RECORD.
    05  CUSTOMER-NAME.
        10  FIRST-NAME      PIC X(20).
        10  LAST-NAME       PIC X(30).
    05  CUSTOMER-ADDRESS.
        10  STREET          PIC X(40).
        10  CITY            PIC X(25).

01  SUPPLIER-RECORD.
    05  SUPPLIER-NAME.
        10  FIRST-NAME      PIC X(20).
        10  LAST-NAME       PIC X(30).

PROCEDURE DIVISION.
    MOVE "JOHN" TO FIRST-NAME OF CUSTOMER-NAME.
    MOVE "SMITH" TO LAST-NAME IN CUSTOMER-NAME.
    MOVE "ACME" TO FIRST-NAME OF SUPPLIER-NAME.

Using OF to distinguish between identical subordinate names.

Multi-Level Qualification

01  COMPANY-DATA.
    05  DEPARTMENT.
        10  EMPLOYEE.
            15  NAME        PIC X(30).
            15  ID          PIC 9(6).

01  PROJECT-DATA.
    05  TEAM.
        10  EMPLOYEE.
            15  NAME        PIC X(30).
            15  ROLE        PIC X(20).

PROCEDURE DIVISION.
    MOVE "ALICE" TO NAME OF EMPLOYEE OF DEPARTMENT.
    MOVE "BOB" TO NAME OF EMPLOYEE OF TEAM.

Multiple levels of qualification for complex structures.

File Record Association

RECORD OF File

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
    SELECT EMPLOYEE-FILE 
        ASSIGN TO "EMPLOYEE.DAT".

DATA DIVISION.
FILE SECTION.
FD  EMPLOYEE-FILE
    RECORD CONTAINS 100 CHARACTERS.
01  EMPLOYEE-RECORD.
    05  EMP-ID          PIC 9(6).
    05  EMP-NAME        PIC X(30).
    05  EMP-SALARY      PIC 9(7)V99.

WORKING-STORAGE SECTION.
01  WS-EMPLOYEE-RECORD.
    05  WS-EMP-ID       PIC 9(6).
    05  WS-EMP-NAME     PIC X(30).
    05  WS-EMP-SALARY   PIC 9(7)V99.

PROCEDURE DIVISION.
    READ EMPLOYEE-FILE.
    MOVE EMPLOYEE-RECORD TO WS-EMPLOYEE-RECORD.

File record automatically associated through FD declaration.

OCCURS DEPENDING ON

Variable Table Definition

01  SALES-DATA.
    05  NUMBER-OF-MONTHS    PIC 99.
    05  MONTHLY-SALES       OCCURS 1 TO 12 TIMES
                           DEPENDING ON NUMBER-OF-MONTHS
                           PIC 9(7)V99.

01  STUDENT-RECORD.
    05  COURSE-COUNT        PIC 99.
    05  COURSE-DATA         OCCURS 1 TO 20 TIMES
                           DEPENDING ON COURSE-COUNT.
        10  COURSE-CODE     PIC X(8).
        10  GRADE           PIC X(2).

PROCEDURE DIVISION.
    MOVE 6 TO NUMBER-OF-MONTHS OF SALES-DATA.
    MOVE 15 TO COURSE-COUNT OF STUDENT-RECORD.

Using OF to specify the controlling variable for variable tables.

Table References

Subscripted References

01  INVENTORY-TABLE.
    05  ITEM-DATA           OCCURS 100 TIMES.
        10  ITEM-CODE       PIC X(10).
        10  QUANTITY        PIC 9(5).
        10  PRICE           PIC 9(5)V99.

01  MONTHLY-REPORTS.
    05  REPORT-DATA         OCCURS 12 TIMES.
        10  ITEM-DATA       OCCURS 50 TIMES.
            15  ITEM-CODE   PIC X(10).
            15  SALES       PIC 9(7)V99.

PROCEDURE DIVISION.
    MOVE "ABC123" TO ITEM-CODE OF ITEM-DATA (1).
    MOVE 500 TO QUANTITY OF ITEM-DATA (1).
    
    MOVE "XYZ789" TO ITEM-CODE OF ITEM-DATA (1, 15) 
                     OF REPORT-DATA.

Qualifying table elements with subscripts and OF.

INSPECT and STRING Operations

INSPECT with Qualification

01  TEXT-DATA.
    05  SOURCE-TEXT         PIC X(100).
    05  CHAR-COUNT          PIC 999.

01  ANALYSIS-DATA.
    05  SOURCE-TEXT         PIC X(200).
    05  WORD-COUNT          PIC 999.

PROCEDURE DIVISION.
    INSPECT SOURCE-TEXT OF TEXT-DATA
        TALLYING CHAR-COUNT OF TEXT-DATA FOR ALL "A".
        
    INSPECT SOURCE-TEXT OF ANALYSIS-DATA
        TALLYING WORD-COUNT OF ANALYSIS-DATA FOR ALL SPACES.

Using OF to distinguish between similar field names in INSPECT.

Address References

ADDRESS OF Usage

01  CUSTOMER-DATA.
    05  CUSTOMER-NAME       PIC X(50).
    05  CUSTOMER-ADDRESS    PIC X(100).

01  POINTER-DATA.
    05  NAME-PTR            USAGE IS POINTER.
    05  ADDR-PTR            USAGE IS POINTER.

PROCEDURE DIVISION.
    SET NAME-PTR TO ADDRESS OF CUSTOMER-NAME.
    SET ADDR-PTR TO ADDRESS OF CUSTOMER-ADDRESS.

Getting memory addresses of data items.

Usage Rules and Guidelines

  • OF and IN are completely interchangeable in all contexts
  • Qualification must provide a unique path to the data item
  • Only as much qualification as needed for uniqueness is required
  • Qualification levels are traversed from right to left
  • File records don't require explicit qualification in most contexts

Common Patterns

Copy Book Structures

      * COPYBOOK: PERSON-COPY
       01  PERSON-RECORD.
           05  PERSON-NAME     PIC X(30).
           05  PERSON-AGE      PIC 99.
           05  PERSON-PHONE    PIC X(15).

      * MAIN PROGRAM
       01  EMPLOYEE-DATA.
           COPY PERSON-COPY.
           05  EMPLOYEE-ID     PIC 9(6).
           
       01  CUSTOMER-DATA.
           COPY PERSON-COPY.
           05  CUSTOMER-ID     PIC 9(8).

       PROCEDURE DIVISION.
           MOVE "JOHN DOE" TO PERSON-NAME OF EMPLOYEE-DATA.
           MOVE "JANE SMITH" TO PERSON-NAME OF CUSTOMER-DATA.

Qualifying copybook fields in different contexts.

Best Practices

  • Use descriptive names to minimize qualification needs
  • Qualify only when necessary for uniqueness
  • Be consistent in choice between OF and IN
  • Use qualification for clarity even when not required
  • Consider structure design to minimize qualification complexity

Related Concepts

IN Clause

Identical functionality to OF

Data Names

Identifiers that may require qualification

OCCURS Clause

Table definitions that use OF for DEPENDING ON

File Records

Records implicitly qualified by file name