'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.
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.