The DATA Division

3.3 The DATA DIVISION

The data division is where memory space in the computer is allocated to data and identifiers that are to be used by the program. Two important sections of this division are the FILE SECTION and the WORKING-STORAGE SECTION. The file section is used to define the structure, size and type of the data that will be read from or written to a file.

Suppose the 'input.dat' file (described above) contains a series of records about a companies customers, giving details of name, address, and customer number. If you were to open 'input.dat' with a text editor you would see each record on a new line like this:

       Joe Bloggs  20Shelly Road        Bigtown      023320
       John Dow    15Keats Avenue       Nowheresville042101
       Jock MacDoon05Elliot Drive       Midwich      100230

 etc...

The different pieces of data need to be defined so that the program can read a record at a time, placing each piece of information into the right area of memory (which will be labelled by an identifier).

The file section for this may look like this:


     000400 DATA DIVISION.
     000410 FILE SECTION.
     000420 
     000430 FD INPUT-FILE.
     000440 01 CUSTOMER-DATA.
     000450       03 NAME       PIC X(12).
     000460       03 ADDRESS.
     000470             05 HOUSE-NUMBER   PIC 99.
     000480             05 STREET         PIC X(19).
     000490             05 CITY           PIC X(13).
     000500       03 CUST-NUMBER PIC 9(6).


Notes:

  • 'FD' stands for File Descriptor, and names the file, INPUT-FILE (assigned in the environment division), and describes the exact structure of the data in each record. All records in this file MUST be of exactly the same structure.


  • '01 CUSTOMER-DATA' is the group name and refers to all of the single record that is read into the computer memory from the file. The higher numbers (levels), 03.. and 05.. will contain the indivual fields of the record.


  • Both FD and 01 are written in area A while higher levels are in area B.

  • Level 01 is sub-grouped into level 03 fields. Notice that one of the level 03 sub-groups is itself sub-grouped into level 05. The sub-grouping could continue upwards as required to 07, 09 etc.. These numbers (except level 01) could as easily be 02, 03, 04 ...or any increasing number scale. There are some numbers (i.e. 66, 77 and 88) which actually have other uses but these will be discussed in the Defining Data section.


  • The PIC (short for PICTURE) clause indicates the size and type of data that that field contains. For example, in line 000450, the data name (identifier) NAME has been defined as holding 12 characters of alphnumeric data. It could have been written as PIC XXXXXXXXXXXX be that's a pain. 'X' means alphnumeric and can contain any ASCII character. However, even if it contained '2' you could not do any calculations on this as the information is stored as the ASCII code for the character '2', rather than the actual number 2. Line 000470 defines HOUSE-NUMBER as PIC 9(2), which can hold a 2-digit number. You can do calculations with this since '9' is used to denote a numeric field.



  • Notice how the group names (CUSTOMER-DATA and ADDRESS) do not have PIC descriptions. This is because the higher level field descriptions when added together will be the size of the group name, i.e. CUSTOMER-NUMBER will hold 46 characters which turns out to be the size of each record (spaces are included). You can refer to these group names but when doing so all data will be treated as alphanumeric and cannot be used for calculations, even if all of the higher group items are numeric.


  •  

    The WORKING-STORAGE SECTION of the data division is for defining data that is to be stored in temporary memory, i.e. during program run-time. Effectively, this is where, for example, an identifier is defined that will hold the result of a calculation.

    
         000500 DATA DIVISION.
         000510 WORKING-STORAGE SECTION.
         000520
         000530 01 RECORD-COUNTER    PIC 9(5).
    
    

      Also see the 'Hello World' program. In that case the string to be displayed on the screen is actually defined in working-storage using the VALUE clause (01 TEXT-OUT PIC X(12) VALUE 'Hello World!'). The same can be done for numeric data e.g.:

    
         000800 01 TOTALS-IN.
         000810       03 1ST-NO   PIC 99 VALUE ZERO.
         000820       03 2ND-NO   PIC 999 VALUE 100.
    
    

    The equivalent to filling an item such as 1ST-NO (above) with zeroes, is filling an alphanumeric (PIC X) item with spaces e.g. 01 MESSAGE PIC X(12) VALUE SPACES.

    A further section of the data division is the LINKAGE SECTION, which is used to facilitate the sharing of data between programs (or sub-programs). See below.