Vous êtes sur la page 1sur 148

MASTER OF COMPUTER APPLICATIONS (MCA)

By
SK.BILAL AHMED
+91 814376956
shaikbilalahme d@sify.com

Table of Contents
1. OBJ ECTIVE...............................................................................................................................................................5
2. INTRODUCTION......................................................................................................................................................6
HISTORY OF COBOL................................................................................................................................................6
ABOUT COBOL......................................................................................................................... .................................6
3. PROGRAM S TRUCTURE............................................................................................................................. ...........8
REFERENCE FORMAT: -..........................................................................................................................................8
SEQUENCE NUMBER A REA ........................................................................................................................ .........................8
INDICATOR A REA ..............................................................................................................................................................8
A REA A..........................................................................................................................................................................9
A REA B............................................................................................................................. ..............................................9
4. IDENTIFICATION DIVIS ION...............................................................................................................................10
PROGRAM -ID...........................................................................................................................................................10
5. ENVIRONMENT DIVIS ION..................................................................................................................................12
CONFIGURATION SECTION: -..............................................................................................................................12
INPUT-OUTPUT SECTION: -..................................................................................................................................13
I-O CONTROL...........................................................................................................................................................14
FILE-CONTROL............................................................................................................................................... .........14
RECORD FORMAT...................................................................................................................................................14
EFFICIENT FILE ORGA NIZATION AND MANA GEM ENT................................................................................16
SEQUENTIA L FILE .................................................................................................................................................16
INDEXED FILE ........................................................................................................................................................17
RELATIVE FILE ......................................................................................................................................................18
EX ERCIS ES..................................................................................................................................................................21
6. DATA DIVIS ION.....................................................................................................................................................22
LEVELS...................................................................................................................................... ................................22
CONDITION NAM ES (88-LEVEL)..........................................................................................................................23
DATA TYPES............................................................................................................................................................23
PICTURE CLAUSE............................................................................................................................... ....................24
PICTURE S TRING - RULES............................................................................................................................................24
FILE SECTION: -.......................................................................................................................................................25
WORKING-STORA GE SECTION: -........................................................................................................................26
REDEFINES...........................................................................................................................................................27
RESTRICTIONS ON REDEFINES............................................................................................................................. ........27
EXTERNAL...............................................................................................................................................................28
GLOBA L........................................................................................................................... .........................................29
JUSTIFIED............................................................................................................................. ................................29
SIGN.......................................................................................................................................................................30
SIGN CLAUSE EXAMPLES...............................................................................................................................................31
VA LUE CLAUSE: -...................................................................................................................................................31
EDITIN G: -.............................................................................................................................................................31
LINKA GE SECTION: -....................................................................................................................... ......................34
USA GE CLAUSE ........................................................................................................................... ...........................35
DISPLA Y: -................................................................................................................................................................37
INDEX: -.....................................................................................................................................................................37
POINTER: -................................................................................................................................................................38
SYNCHRONIZED.....................................................................................................................................................39

EX ERCIS ES..................................................................................................................................................................40
7. PROCEDUR E DIVIS ION.............................................................................................................. .........................41
SECTIONS AND PARA S: -......................................................................................................................................41
RULES FOR SECTION/PA RA NAMES: -.................................................................................................................. .......41
INPUT - OUTPUT VERBS........................................................................................................................................42
ACCEPT.....................................................................................................................................................................42
DISPLA Y....................................................................................................................................................................43
DISPLA Y - RULES.......................................................................................................................................................43
ARITHM ETIC OPERATIONS..................................................................................................................................44
ADD: -............................................................................................................................. ...........................................44
CORRESPONDING: -...............................................................................................................................................45
ADD CORRESP ONDING :-............................................................................................................................ .....................46
ON SIZE ERROR OCCURS..........................................................................................................................................47
ROUNDED PHRASE .....................................................................................................................................................47
SUBTRA CT............................................................................................................................ ....................................48
MULTIPLY ...............................................................................................................................................................50
DIVIDE.......................................................................................................................................................................51
COMPUTE.................................................................................................................................................................52
EX ERCIS ES..................................................................................................................................................................53
8. CONTROL FLOW VERBS.....................................................................................................................................55
CONDITIONA L EXPRESSIONS.............................................................................................................................55
RELATION OPERATORS........................................................................................................................................55
CLASS CONDITION.................................................................................................................................................56
SIGN CONDITION....................................................................................................................................................56
COMPLEX CONDITIONS........................................................................................................................................57
LOGICAL OPERATORS...........................................................................................................................................57
GO TO............................................................................................................................. ...........................................58
ALTER........................................................................................................................................................................60
CONTINUE................................................................................................................................................................62
EVA LUATE...............................................................................................................................................................63
PERFORM .................................................................................................................................................................65
PERFORM (Basic).................................................................................................................................................66
PERFORM (TIMES option)...................................................................................................................................67
PERFORM (UNTIL option)...................................................................................................................................67
PERFORM (VARYIN G)............................................................................................................................. .............69
EXIT..................................................................................................................................................... ......................73
EX ERCIS ES..................................................................................................................................................................74
9. NON-NUMERIC DATA MANIPULATION.........................................................................................................75
MOVE.........................................................................................................................................................................75
INITIA LIZE................................................................................................................................................................79
INSPECT....................................................................................................................................................................81
STRING......................................................................................................................................................................84
UNSTRING........................................................................................................... .....................................................85
SET.............................................................................................................................................................................86
SET - CONDITION NAME .............................................................................................................................. ...................86
10. SUB-PROGRAM....................................................................................................................................................89
CA LL..........................................................................................................................................................................89
CANCEL....................................................................................................................................................................91
ENTRY.................................................................................................. .....................................................................92

EXIT PROGRAM.......................................................................................................................................................92
STOP......................................................................................................................................... ..................................92
GOBA CK....................................................................................................................................................................93
END PROGRAM.......................................................................................................................................................93
11. FILE OPERATIONS..............................................................................................................................................94
OPEN .........................................................................................................................................................................94
CLOSE........................................................................................................................................................................94
READ..........................................................................................................................................................................95
START........................................................................................................................................................................99
WRITE........................................................................................................................... ...........................................101
REW RITE........................................................................................................................... ......................................104
DELETE...................................................................................................................................................................105
SORT ............................................................................................................................. ..........................................106
INPUT PROCEDURE:-.................................................................................................................. .........................107
OUTPUT PROCEDURE:-.......................................................................................................................................108
RELEASE............................................................................................................................. ....................................110
RETURN ............................................................................................................................. ....................................110
MERGE....................................................................................................................................................................111
INPUT/ OUTPUT ERROR HANDLING TECHNIQUES.......................................................................................113
THE END-OF-FILE PHRASE (AT EN D)............................................................................................................113
EXCEPTION/ERROR Declarative............................................................................................................. ..........114
FILE S TATUS key............................................................................................................................. ....................114
INVALID KEY phrase...........................................................................................................................................114
EX ERCIS ES................................................................................................................................................................115
12. TABLE HANDLING............................................................................................................................................116
OCCURS..................................................................................................................................................................117
FIXED LENGTH TABLES............................................................................................................................. .........117
VA RIABLE LENGTH TABLES.............................................................................................................................118
SET...........................................................................................................................................................................120
COMPLEX TA BLES...............................................................................................................................................121
TABLE PROCESSING ...........................................................................................................................................122
SEARCH............................................................................................................................. ......................................125
MERGE............................................................................................................................. .......................................130
EX ERCIS ES................................................................................................................................................................131
14. COMPILER OPTIONS.............................................................................................................. .........................134
APPENDIX 1...............................................................................................................................................................146
FILE STATUS CODES A ND M EANING..............................................................................................................146
REFERENCES............................................................................................................................................................148

Cobol

Object ive

1. Objective

The main objective of this courseware


To make you learn the Cobol language
To exploit the structured programming of COBOL
To make you develop mainframe applications using COBOL

NRI-IT

BILA L AHM ED SHAIK

Page 5 of 148

Cobol

Introduction

2. Introduction
HISTORY OF COBOL

Conceived in 1959

Preliminary Version in December 1959

First Standard COB OL in 1961

A NSI Approved Versions in 1968, 1974

Latest COBOL Version in 1985

COBOL II / COBOL 85

ABOUT COBOL
There was a growing need in the early days to have a high level language whic h will be best suited for
Business Applications. Hence In 1959, a new language COBOL COmmon Business Oriented
Language emerged.
Cobol is a High Level Structured Language. This is English like language, which is used to develop major
business applications. why most of business applications are developed using Mainframe COBOL ?

Cobol is English like language hence its easy to learn

Can be used with any database like VSAM or DB 2, IDMS

Can handle huge volume of Data

COBOL applications can be easily maintained

COBOL language consists of 4 major Divisions namely


1.

IDENTIFICA TION DIV ISION

2.

ENVIRONME NT DIVIS ION

3.

DATA DIVIS ION

4.

PROCEDURE DIVIS ION.

The IDE NTIFICA TION DIVIS ION and ENV IRONME NT DIV ISION are the first 2 divisions that need to be
defined in the COBOL program. As their names indicate, these divisions contain ent ries that gives the
name of the program, author of the program, Source computer in which the program is written and the
object comput er in which the program may be run.
Let us consider a statement ADD PRINCIPAL, INTE RES T TO AMOUNT.
The meaning of this statement is quite apparent. The principal and interest are added to get amount. The
words PRINCIPAL, INTERES T, AMOUNT are called Data names. It is essential that all the data names
which are used in PROCE DURE DIV ISION needs to be defined at the outset.

Cognizant Academy

BILAL AHM ED SHAIK

Page 6 of 148

Cobol

Introduction

Hence all the data definitions takes place in DA TA DIV ISION. Hence DA TA DIVIS ION appears before the
PROCEDURE DIV IS ION and it is the third division in the COBOL program. The data definition includes the
size of the data item, the type and any initial value which needs to be set are defined in DA TA DIVIS ION
entries.
The data that belongs to the input or output record is defined in FILE SECTION and the data names that
holds the intermediate results are defined in the WORK ING S TORAGE SECTION.
Now that we have defined all the nec essary data names and files to be used by the COBOL program, next
comes the algorithm. The last division in the COB OL program is the PROCE DURE DIV ISION where the
actual algorithm of the program is written. The P ROCEDURE DIV IS ION contains statements, which
specify operations to be performed by the computer.
Thus these 4 divisions form the core structure of COB OL program. These divisions will be explained in
detail in the following Chapters.

Cognizant Academy

BILAL AHM ED SHAIK

Page 7 of 148

Cobol

Program Structure

3. PROGRAM STRUCTURE
Lets try to develop an application using COBOL program. For e.g. Consider Employee Management System in an
Organization. An Application contains series of programs, Data files, interfaces and Reports.

REFERENCE FORMAT: COBOL programs must be written in the COBOL referenc e format. Figure 4
shows the reference format for a COBOL source line.

11

12

72

73

80

The following areas are described below in terms of a 72-character line:

Sequence Number Area


Columns 1 through 6: - The sequence number area may be used to label a source statement line.
The content of this area may consist of any character in the character set of the computer.

Indicator Area
Column 7: Any sentence, entry, c lause, or phras e that requires more than one line can be continued
in Area B of the next line which is not a
comment line
blank line
Area A of a continuation line must be blank
If no hyphen (-) in indicator Area
last character of the preceding line is assumed to be followed by a space
If hyphen in Indicator Area
first non-blank character of this continuation line immediately follows the last nonblank char of continues line
If the continued line contains a non-numeric literal without a closing quotation mark:
all spaces at the end of the continued line (through column 72) are part of the
literal
Continuation line must contain a hyphen in the indicat or area
First non-blank character must be a quotation mark and Literal
continues with the character following the quotation mark

Cognizant Academy

Ver 1.0

Page 8 of 148

Cobol

Program Structure

Area A
Columns 8 through 11
The following items must begin in Area A:
Division header
Section header
Paragraph header or paragraph name
Level indic ator or level-number (01 and 77)
DECLARA TIVES and END DE CLA RA TIVES.
End program header.

Area B
Columns 12 through 72
Entries, sentences, statements, clauses
Continuation lines.

Cognizant Academy

Ver 1.0

Page 9 of 148

Cobol

Identification Div ision

4. IDENTIFICATION DIVISION
IDE NTIFICA TION DIV ISION is the first division in the COB OL program. There may be several paragraphs
in this division of which PROGRAM-ID is essential paragraph.
Each program has a Program id Name of the program. Author Person who is writing the program and
other information like dat e written, date compiled. Since the information identify a particular program,
these are defined in IDENTIFICATION DIVISION which is the First line of the COBOL program. Except
PROGRAM-ID all the other paragraphs are optional and are mainly for documentation purposes.
The syntax for

{IDENTIFICATION DIVISION ID.}


PROGRAM-ID. Program name
[AUTHOR.
comment.]
[INSTALLATION.
comment.]
[DATE-WRITTEN.
comment.]
[DATE-COMPILED.
comment.]
[SECURITY.
comment.]
PROGRAM-ID
The first paragraph of the Identification Division must be the PROGRAM-ID paragraph. The
other paragraphs are optional, but, when written, must appear in the order shown in the format. This
program names is used to identify the object program.
The Program name is a user-defined word that identifies your program. The system uses the
first 8 c haracters of program-name of the outermost program as t he identifying name of t he program.
The first 8 characters of program-name of the outermost program should be unique within the system.
The first character must be alphabetic.
If the first character is not alphabetic, it is converted as follows:
1 through 9 are changed to A through I
Anything else is changed to J.
If a hyphen is used in characters 2 through 8 of the program-name of the outermost program, it is
changed to zero (0).
Apart from these statements, there can be comment statements describing the functionality of
the program, and a change log block giving the det ails about programmers who changed the program
as a part of enhancement to the program.

NRI-IT

BILA L AHM ED SHAIK

Page 10 of 148

Cobol

Identification Div ision


E.G:-

IDENTIFICATION DIVISION.
PROGRAM-ID. EMPMAINT1.
AUTHOR. CTS.
DATE-WRITTEN. 01/01/01.
DATE-COMPILED.
******************************************************************
***********
BRIEF PROGRAM DESCRIPTION
************
* PROGRAM OBJECTIVE: This Program Maintains the Emp loyee file by updating the master file.

NRI-IT

BILA L AHM ED SHAIK

Page 11 of 148

Cobol

Env iron ment Division

5. ENVIRONMENT DIVISION
The identification division gives introduction about the program. Now we need to define the Machine
dependent details for our program. These details are given in
ENVIRONME NT DIVIS ION. The E NVIRONME NT DIVIS ION must follow the IDENTIFICA TION DIV IS ION
in the COB OL program. Among all the divisions this one is the most machine dependent division. The
computer and all the peripheral devices required by the program are described in this division.
The Environment Division consists of 2 sections
The Configuration Section
The Input-Output Section

CONFIGURATION SECTION: The configuration section appears first.


SOURCE-COMPUTER. Computer-name.
OBJECT-COMPUTER. Computer- name.
[ PROGRAM COLLATING SEQUENCE IS alphabet- name].
[SPECIAL-NAMES. [, CURRENCY SIGN IS literal-1]
[, DECIMAL-POINT IS COMMA]
[, ALPHABET alphabet- name IS { STANDARD-1
STANDARD-2
EBCDIC
NATIVE
In the configuration section at least the source computer and object computer paragraph needs to
be coded
SOURCE COMPUTER:- This paragraph specifies the name of the computer used to compile the
COBOL program.
OBJECT COMPUTE R:- This paragraph specified the name of the computer used to ex ecute the
COBOL program.
The SPECIA L NAMES paragraph can have entries, which are implementor dependent. Like the
CURRENCY can be changed or the DECIMAL POINT can be COMMA.

NRI-IT

BILA L AHM ED SHAIK

Page 12 of 148

Cobol

Env iron ment Division


For e.g
SPECIAL NAMES. CURRENCY IS DOLLAR.
DECIMAL POINT IS COMMA
Default collating sequence is EBCDIC on the IBM. Supposing we want ASCII.

Example 1: CONFIGURATION SECTION.


SOURCE-COMPUTER. IBM 3090.
OBJECT-COMPUTER. VAX-6410
PROGRAM COLLATING SEQUENCE IS ASCII-order.
SPECIAL-NAMES.
ALPHABET ASCII-order IS STANDARD-1.
Example 2: CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM 3090.
OBJECT -COMPUTER. VAX-6410
PROGRAM COLLATING SEQUENCE IS ASCII-order.
SPECIAL-NAMES.
ALPHABET ASCII-order IS STANDARD-1
DECIMAL IS COMMA
CURRENCY IS #
SYMBOLIC CHARACTERS backspc IS 23
INPUT-OUTPUT SECTION: Each application program gets dat a from some data files and proc esses data. A fter data proc essing, the
program writes processed data either into a separate file or updates dat a in the existing file. This section
contains the information regarding the files to be used by the program and the peripheral device from the
file can be accessed.
As a application development programmer, we should know what are all the data files needed for
processing by our program. These files are defined in FILE -CONTROL paragraph of the
INPUT-OUTPUT section.
This section has 2 paragraph.
I-O CONTROL.
FILE -CONTROL

NRI-IT

BILA L AHM ED SHAIK

Page 13 of 148

Cobol

Env iron ment Division

I-O CONTROL.
I-O CONTROL is not used these days. This feature is invalid in COBOL 370.
Each data file used by the program should be defined in the FILE -CONTROL paragraph. This paragraph
also gives the medium through which the file can be accessed. By medium, in Mainframe environment, we
mean the DDNAMES in run JCL.
In this paragraph, we also describe what type of file it is, what organization is it, which access mode is
used to access the files etc.
The syntax is as follows

FILE-CONTROL.
SELECT
SELECT [OPTIONAL] filnam1 ASSIGN TO assignmtname1
[ORGANIZATION IS
{SEQUENTIAL,
INDEXED,
RELATIVE) ]
[ACCESS MODE IS { SEQUENTIAL
RANDOM
DYNAMIC } ]
[FILE STATUS IS dataname-1
[dataname-2] ].

SELECT; - This statement gives the relationship between the filename used in the program and
the data file used in the JCL.
Filname1: - This is the name used by COBOL to refer inside the program.
Assignmtname1: - DDNAME given in JCL.
OPTIONAL: This key word is used only for input files. When the key word OP TIONAL is used in the select clause, this
file need not be present during the execution. If this keyword is omitted, the file must be present.

RECORD FORMAT
Fixed
- Specify RE CORDING MODE F
- Max length of 01 level entry is less than BLOCK contains clause size AND either
Record contains clause has single size (Not a range)
All 01 level entry is same and no depending on option

NRI-IT

BILA L AHM ED SHAIK

Page 14 of 148

Cobol

Env iron ment Division

Unblocked
B L O C K E D
Variable
- Specify RE CORDING MODE V
- Max length of 01 level entry is less than BLOCK contains clause size AND either
Record contains clause has range
01 level entry is different or has depending on option
BDW

RDW

Data Record

BDW / RDW = 2 byte length + 2 byte


System info
Spanned Records
- Specify RE CORDING MODE S
- Max length of 01 level entry + 4 is greater than BLOCK contains clause size
- Can be Fixed or variable
- Can be Blocked or Unblocked

BDF

SDF
BDF
SDF

Rec segment

SDF

- Block descriptor field


- Segment descriptor field

Undefined Records
- Unspecified characteristics
- Compiler does not derive
- Specify RE CORDING MODE U
- Each block on external storage is treated as a logical record;
- Max record length is
As specified in Record Contains or varying clause
If omitted max 01 level entry size
- BLOCK contains clause is treated as comment

NRI-IT

BILA L AHM ED SHAIK

Page 15 of 148

Cobol

Env iron ment Division

EFFICIENT FILE ORGANIZATION AND MANAGEMENT


The most important activity while designing the COB OL program is the File organization and management.
For this we need to know
File type and organization
Devices
Access modes (sequential, random, or dynamic)
Record formats (fixed, variable, spanned, undefined).
Depending on the input/output requirements and device types, your file organization will either be
sequential, indexed, or relative. SAM and VSAM are the two access methods available with COBOL
that will handle the input/output requests to the operating system for the storage and retrieval of
records from the input/output devices.
If a large percent age of the file is referenced or updated in your application program, sequential
processing is faster than indexed or relative. If a small percent age of records are proc essed during
each run of your applic ation program, use indexed or relative access.

A SAM or VSAM sequential file is the simplest file type. Either works for an application that uses only
sequential access of fixed-length or variable-lengt h records and no ins ertion of records between
existing ones.

A VSAM indexed file is the most flexible data set. It may be used for applications requiring both
sequential and random access in the same program. A indexed file can make use of fixed-lengt h or
variable-length records.

A VSAM relative file works well for an application that performs random insert and deletes operations.
A VSAM relative file can make use of fixed-length or variable-length records.

SEQUENTIAL FILE
The sequential files are used for Reports, transaction files, intermediate files for processing, Sort
files etc.
Records can be accessed in the order in which they appear in the file
Records can be updated
Records can be appended but not inserted
Records cannot be deleted

NRI-IT

BILA L AHM ED SHAIK

Page 16 of 148

Cobol

Environment Div ision

SELECT [OPTIONAL] filnam1 ASSIGN TO assignmtname1


[ORGANIZATION IS SEQUENTIAL]
[ACCESS MODE IS SEQUENTIAL ]
[FILE STATUS IS dataname-1
[dataname-2] ].
E.G :SELECT MNT91
ASSIGN
TO INT91
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL
FILE STATUS IS W01-X-FST-NT91.
Filname1: - MNT91.
Assignmtname1: - INT91. This is the name referred in the DD Statement in the JCL
ORGA NIZA TION: - gives the type of file. Here its Sequential, which means this file is sequential file.

JCL required at run time for Files


// INT91 DD DSN=CTS.TEST.NT91,
//
DISP=SHR
INDEXED FILE
The indexed files are the most flexible type of files. The indexed files can be Master files in the
Data base or the History files
The index component of the file provides the logical arrangement of the main file, ordered by
record key. The actual physical arrangement of the records in the main file is not significant to COB OL
program.
Random Access of Records using a Record Key
Records can be Inserted, Updated and Delet ed
Indexed Access is faster than Sequential Access
Unique or Non-Unique Indexes

NRI-IT

BILA L AHM ED SHAIK

Page 17 of 148

Cobol

Environment Div ision

SELECT filnam1 ASSIGN TO assignmtname1


[ORGANIZATION IS INDEXED ]
[ACCESS MODE IS
{ SEQUENTIAL
RANDOM
DYNAMIC } ]
RECORD KEY IS
data-name-3
( [ ALTERNATE RECORD KEY IS data-name-4]
[WITH DUPLICATES] ) ...
[FILE STATUS IS dataname-1
[dataname-2] ].
assignmtname1 = [label-]DDname

E.G : SELECT B20ASIML ASSIGN


TO ISIML
ORGANIZATION IS INDEXED
ACCESS MODE IS DYNAMIC
RECORD KEY IS B20A-G-SIML-KEY
FILE STATUS IS W01-X-FST-B20A.
JCL required at run time for Files
//ISIML DD DSN=CTS.TEST.SIML,
//
DISP=SHR
ORGA NIZA TION is INDE XE D means it s a VSAM file.
The records of the indexed file can be accessed in any mode.
ACCESS MODE = SEQUENTIAL The records can be accessed sequentially. Here the file is treated as
sequential.
RANDOM : - The records can be accessed in any order by giving the key value to the RE CORD KEY
variable.
DYNAMIC: - The records can be accessed both sequentially and randomly.

RELATIVE FILE
Also called Direct Access Files
Each record has a unique address and is identified by its Relative Record Number in the file
Records can be Accessed Randomly using their Relative Record Numbers

NRI-IT

BILA L AHM ED SHAIK

Page 18 of 148

Cobol

Environment Div ision

SELECT filnam1 ASSIGN TO assignmtname1


[ORGANIZATION IS RELATIVE ]
[ACCESS MODE IS
{ SEQUENTIAL
RANDOM
DYNAMIC } ]
RELATIVE KEY IS dataname-3
[FILE STATUS IS dataname-1 [dataname-2] ].
assignmtname1 = [label-]DDNAME

ACCESS
ORG.
SEQ
RELATIVE
INDEXED

SEQ

RANDOM

ORDER OF WRITE INVALID


ASC. REL. REC. NO. VALUE OF REL.
KEY
ASC. KEY VALUE
VALUE OF REC.
KEY

DYNAMIC
INVALID
SEQ. OR
RANDOM
SEQ. OR
RANDOM

Table 5.1 - File Access Modes


File Status
[FILE STATUS IS dataname-1 [dataname-2] ]
data-name-1 : 2 bytes character
data-name-2 : 6 bytes character (For VSAM)
2 byte binary (value 0, 8, 12)
Return code
2 byte binary (0 to 5)
Function code
2 byte binary (0 to 255)
Feedback code

NRI-IT

BILA L AHM ED SHAIK

Page 19 of 148

Cobol

Environment Div ision

RUN JCL for Program Execution


//PXXBB398 EXEC PGM=MYPROG
//ISIML DD DSN=CTS.TEST.SIML,
//
DISP=SHR
// INT91 DD DSN=CTS.TEST.NT91,
//
DISP=SHR
//OCATF DD DSN=CTS.CATF.M0101.B08,
//
DISP=(NEW,CATLG,CATLG),
//
SPACE=(CYL,(10,50),RLSE),
//
DCB=(RECFM=FB,LRECL=23)
//SYSOUT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//*
The above JCL is the RUNJCL for the application program. All the files, which are defined in the select
clause in FILE SECTION, are given in the DD statement.
The SYSUDUMP DD statement is where the dump of the data appears when an Abend occurs while
executing the program. The contents of the current input record, when the abend took place also appears
in the SYSUDUMP.
All the display statement messages appear in the SYSPRINT.

NRI-IT

BILA L AHM ED SHAIK

Page 20 of 148

Cobol

Exercises

EXERCISES

1. Where do you define the files used, in a COBOL program?


2. Write the Identification division for following.
You are developing a program named EMPMAINT.
3.

Write the environment division for the above program


The program is written on IBM-3090 machine and run on the same machine.
The program EMPMAINT uses employee master file, employee transaction file, error file and card file.
The Employee master file is an indexed file with primary key as employee number, the transaction file,
error file and card file are all sequential files.
Also write the execution JCL.

NRI-IT

BILA L AHM ED SHAIK

Page 21 of 148

Cobol

DATA DIVISION

6. DATA DIVISION
Until now, we have defined the environment in which our application program will be executed, the data
files used by the program. Our application program needs to know the layout of the files used for it to
process the data. We define the file layout in the DA TA DIV ISION.
The DA TA DIV IS ION has the following sections.
FILE SECTION
WORKING-S TORAGE SECTION
LINKAGE SECTION

This data division has LEVEL structure.


The data type for the variables is described using Picture Clause.

LEVELS
Mimic the hierarchy in the Logical Record
The lowest subdivision is an Elementary Item
Elementary items can be combined into group items
Elementary Items may form part of one or more Groups
Level Numbers 01 to 49, 77, 88
The level Number of the Element ary Items is greater than that of the group Item.
The 01 level number is root in the hierarchy of the logic al record
The size of the Group item is equal to the sum of the sizes of the element ary or sub-group items.

E.G.
01

ASSOC-REC.
05
ASSOC-NO
05
ASSOC-NAME.
10
FIRST-NAME
10
LAST-NAME
05
ASSOC-ADDRESS.
10
ADDR-LINE-1
10
ADDR-LINE-2
10
ADDR-LINE-3
10
TELEPHONE-NO

In t his example the 01 ASS OC-RE C is the root.


The 05 level numbers are the sub-group items.
The 10 level numbers are the elementary items.

NRI-IT

BILA L AHM ED SHAIK

Page 22 of 148

Cobol

DATA DIVISION

77 Level
Elementary Data Item not belonging to any group
Must begin in Area A

E.G
01 ASSOC-REC.
77 W04-TEMP-I

PIC X(01).

CONDITION NAMES (88-LEVEL)


88 data-name { VALUE IS
VALUES ARE } ( lit-1 [THRU lit-2] ) ...
Used for Condition Checking
Example: 01 W03-G-FLAG-VAR.
03 W03-G-FLAG-VAR.
05 W03-X-REPTYPE-FLAG
PIC X(02) VALUE 'NR'.
88 C03W-NORMAL-REQ-FLAG
VALUE 'NR'.
88 C03W-SHOP-BOUND-FLAG
VALUE 'SB'.
88 C03W-SHOP-VAR-FLAG
VALUE 'SV'.
05 W03-X-REQ-PROCESSED
PIC X(01) VALUE 'N'.
88 C03W-REQUEST-PROCESSED-Y
VALUE 'Y'.
88 C03W-REQUEST-PROCESSED-N
VALUE 'N'.
DATA TYPES
Elementary Data Items
Alphanumeric
Alphabetic
Numeric (Zoned, Packed, Binary)
Numeric Edited
Alphanumeric Edited
Group Data Items are Alphanumeric

NRI-IT

BILA L AHM ED SHAIK

Page 23 of 148

Cobol

DATA DIVISION

PICTURE CLAUSE
{ PICTURE IS pic-string1 PIC }
Specified for every Elementary Item
pic-string1 can contain a maximum of 30 Code Characters
Code Character repetitions can be indicated by an integer within ( )
Code
Char
9
X
A
V
P
S
B
0
/
,
.
*
$
+
CR
DB

Meaning
Numeric Data Item
Any allowable character from the character set
a Letter or Space
Assumed Decimal Point
Position of Assumed Decimal Point when it lies
outside
Data Item is Signed
Inserts space
Inserts zero
Inserts Slash
Inserts Comma
Inserts Decimal Point
Replaces leading zeros
Inserts Currency sign
Inserts Sign

Sample
Picture
9999
XXXX
AAAA
99V99
99PPV
PPP99
S9(4)
XXBXXX
9(5)000
XX/XX/XX
9,999
9,999.99
****9.99
$9,999.99
+99.99
-99.99
99.99DB
99.99CR

Table 6.1 Code Characters


PICTURE String - Rules
Code characters can be in lower case
Codes usable once or more A B P X Z 9 0 / , + - * $
Codes usable just once -S V . CR DB

NRI-IT

BILA L AHM ED SHAIK

Page 24 of 148

Cobol

DATA DIVISION

PICTURE String - Rules for data categories


Alphabetic item
Only A allowed
Numeric Items
9 P SV
PICTURE

Valid Range of Values

9999

0 through 9999

S99

-99 through +99

S999V 9

-999.9 through +999.9

Numeric-edited items
- B P V Z 9 0 / , . + - CR DB * $
- At-least one edit char or BLA NK WHEN ZERO clause
Alphanumeric items
- The symbol X or
- Combinations of the symbols A, X, and 9.
Alphanumeric-edited items
-A X 9 B 0 /
- Must contain at least one A or X, and at least one B or 0 or /.

FILE SECTION: The layouts of the files are described in this section. The files, which are defined in the SELECT clause,
should have an FD entry in the FILE SECTION. The record layout for the files is defined in the FD section
which is FILE DESCRITP TION entry for the files defined in the SELECT clause.
The File description entry is followed by the record description entry,
A Record Description entry is a 01 level group item along with its sub divisions.
If there are more than one 01 level, this means that the file defined is a Variable file which has different
record layouts.

NRI-IT

BILA L AHM ED SHAIK

Page 25 of 148

Cobol

DATA DIVISION

The syntax of the FD ent ry is

FD file-name-1
[ BLOCK CONTAINS [ int1 TO ]
int2 { CHARACTERS
RECORDS } ]
[ RECORDING MODE IS { F V S U } ]
[ RECORD { CONTAINS int3 [TO int4] CHARACTERS } ]
[ DATA { RECORD IS
RECORDS ARE }
( data-name-2 ) ... ]
BLOCK CONTAINS: The BLOCK CONTA INS CHARA CTERS clause specifies the size of the physical records.
The int1 and int2 specifies the minimum and maximum character sizes of the physical record.
The BLOCK CONTA INS RECORDS clause specifies the number of logical records present in each
physical record (the actual data records in the main memory).
RECORD CONTA INS: The RE CORD contains clause gives the physical record. This has to match with record length in the DD
statement parameter.

E.G. FD INT91.
RECORDING MODE IS F
BLOCK CONTAINS 2 RECORDS.
01 NT91-HDR
PIC X(80).
WORKING-STORAGE SECTION: This section is used to define the temporary variables in the COB OL program. It is used like a scratch
pad inside the program.
The data in the working storage may be group item or elementary item.
Level 77 is used to define elementary data item in the working storage section.
Level 88 is used for Conditional variables.
Succeeds File Section
Used for Intermediate Storage
Common Practice to Group related items together

NRI-IT

BILA L AHM ED SHAIK

Page 26 of 148

Cobol

DATA DIVISION

Example
01 I-ADDRESS.
05 I-ADD-LINE-1 PIC X(30).
05 I-ADD-LINE-2 PIC X(30).
05 I-ADD-LINE-3 PIC X(30).
Syntax for Data Description Entry

level

{data- name-1
FILLER}
[REDEF clause]
[BLANK-WHEN-ZERO clause] [EXTERNAL
clause] [GLOBAL clause] [OCCURS clause]
[JUST clause] [PIC clause] [SIGN clause] [USAGE
clause] [VALUE clause] .
REDEFINES
level {data- name-1
FILLER}
REDEFINES data-name-2
Allows the same area of memory to be referenced by more than one data-name with different
format and sizes
Multiple 01 levels of same FD are Implicitly Redefined

Restrictions on REDEFINES
OCCURS and RE DEFINES cannot be combined
Qualification of data-name-2 not required
Value Claus es only in Condition Names
Redefinition Ceases Whenever a Level No is <= that of data-name-1 or data-name-2 is encountered
The Size of Data-name-1 must be Less than or equal to Dat a-name-2
Data item lengths and types can also be respecified within an area.

NRI-IT

BILA L AHM ED SHAIK

Page 27 of 148

Cobol

DATA DIVISION

REDEFINES Examples
05 NAME-2.
10 SALARY
PICTURE XXX.
10 SO-SEC-NO
PICTURE X(9).
10 MONTH
PICTURE XX.
05 NAME-1 REDEFINES NAME-2.
10 WAGE
PICTURE 999V999.
10 EMP-NO
PICTURE X(6).
10 YEAR
PICTURE XX.
When an area is redefined, all descriptions of the area are always in effect.
That is, redefinition does not cause any data to be erased and never supersedes a previous
description.
Thus, if B REDEFINES C has been specified, either of the two procedural statements, MOVE X TO B
and MOVE Y TO C, could be ex ecuted at any point in the program.

BLANK WHEN ZERO


BLANK WHEN { ZERO
ZEROS
ZEROES }

The BLA NK WHEN ZERO clause specifies that an item cont ains
nothing but spaces when its value is zero.
The BLA NK WHEN ZERO clause can be specified only for
elementary numeric or numeric -edited items. These items must be described, either implicitly or
explicitly, as USAGE IS DISPLAY
Useful for printing
Not allowed on 66 and 88 levels & on POINTE R and INDE X dat a
items

EXTERNAL
This clause indicates that the data item is external to the program and is common to the entire run unit

NRI-IT

BILA L AHM ED SHAIK

Page 28 of 148

Cobol

DATA DIVISION

Subordinates to an E XTERNAL group item attains E XTERNAL attribute


All programs referring to the E XTE RNA L data item must define same number of standard data format
characters (Total length)
Name used for the data item cannot be used on another E XTE RNAL item within the same program
VALUE clause not allowed
Allowed only at the 01 Level
Not allowed in Link age and File Section
Indexes in an E XTE RNA L data record do not possess the external attribute.

GLOBAL
This clause indicates that the data item is available to all the nested programs unless it is defined in
the contained program
Valid only for 01 Level
Valid only in Working Storage and File Section, not valid in Linkage Section
All data-names subordinate to or condition-names or indexes associated with a global name are global
names.
The search begins within the program that contains the reference and continues "outward" to
containing programs until a match for the GLOBA L name is found.

JUSTIFIED
{ JUSTIFIED
JUST}

RIGHT

The JUS TIFIED claus e overrides standard positioning rules for a receiving item of the alphabetic or
alphanumeric categories
Cant be specified for other categories
Does not affect initial values, as determined by the VALUE clause
Does not affect the setting of conditional variable when the associated condition name is set
Items described as USA GE IS POINTE R

NRI-IT

BILA L AHM ED SHAIK

Page 29 of 148

Cobol

DATA DIVISION

JUSTIFIED - Examples
05 align- rt pic x(5)
88 c-rt

JUST RIGHT.
value RT.

1. MOVE RT TO align-rt
2. SET c-rt
TO TRUE
Value of align-rt
Before stmt-1
RTbbb
After stmt-1
bbbRT
After stmt-2
RTbbb
PICTURE
[ PICTURE IS string
PIC ]
Specifies the characteristics and editing requirements
Must be specified for every elementary item except an index data item or the subject of the
RENAMES clause. In these cases, use of this clause is prohibited.
The PICTURE claus e can be specified only at the element ary level
The PICTURE character-string can contain a maximum of 30 characters

SIGN
[SIGN IS

{LEADING
TRAILING} ]
[ SEPARATE CHARACTER ]
Specifies the position and mode of represent ation of the operational sign for a numeric entry.
The Sign Clause can be specified for a signed numeric data description entry (that is, one whose

PICTURE STRING contains an S)


If a SIGN clause is specified in either an elementary or group entry subordinate to a group item for
which a S IGN clause is specified, the SIGN clause for the subordinate entry takes precedenc e for the
subordinate entry.
The SEPARA TE phrase indicates that sign is stores as separately and not in the zoned part.
The TRA ILING phrase indicates that sign is to be stored in the trailing position
The LEA DING phrase indicat es that sign is to be stored in the leading position

NRI-IT

BILA L AHM ED SHAIK

Page 30 of 148

Cobol

DATA DIVISION

SIGN Clause Examples


77 l-V1 PIC S9(3) SIGN LEADING VALUE K50
K stands for -2.
l-V1

77 l-V2 PIC S9(3) SIGN LEADING SEPARATE VALUE -250


l-V2

77 l-V2 PIC S9 (3) SIGN TRAILING VALUE -250


The value stored internally in 3 characters as
l-V2

VALUE CLAUSE: The VALUE clause is used to set an initial value to the working storage variable.
This can be specified only in the working storage variable.
The VALUE Clause can not be a part of RECORD DES CRIP TION entry in the FILE SECTION.

E.G WORKING-STORAGE SECTION.


01 W04-G-VAR.
03 W04-X-RUN-TIME
PIC X(20) VALUE SPACES.
03 W04-X-PGM-NAME
PIC X(08) VALUE 'PXXBB290'.
01 W04-TEMP-J
PIC 9(02) VALUE ZEROES.
In the above example the variable W04-X-PGM-NAME is set to an initial value of PXXBB290
The alphanumeric items can be initialized to Spaces and numeric items can be initialized to Zeros
EDITING: Sometimes the data when written to report needs some editing to be done. There are 2 Editing done in
COBOL
Numeric Editing
Alphanumeric Editing

NRI-IT

BILA L AHM ED SHAIK

Page 31 of 148

Cobol

DATA DIVISION

The Numeric Edit characters are


B P V Z 9 0 / , . + - CR DB * $

The alphanumeric Edit Characters are


A X 9 B 0 /
PICTURE Clause Editing
Insertion
- Simple insertion
- Special insertion
- Fixed insertion
- Floating insertion.
Suppression & Replacement
- Zero suppression and replacement with asterisks or spaces
EDITING ALLOW ED ONLY for Categories:
- Numeric-edited (All edits)
- Alphanumeric-edited (Only Simple insertion)
Simple insertion
-B0/

only for numeric edited

PICTURE
X(2)BX(3)BX(4)
9(2)/9(2)/9(2)
99,B999,B000
99,999

NRI-IT

Value of Data
19Mar1995
190395
1234
12345

BILA L AHM ED SHAIK

Edited Result
19 Mar 1995
19/03/95
01, 234, 000
12,345

Page 32 of 148

Cobol

DATA DIVISION

Special Insertion Editing


- Period (.) is the special insertion symbol; it also represents the actual decimal point for
alignment purposes
PICTURE
999.99
999.99
999.99
999.99

Value of Data
1.234
12.34
123.45
1234.5

Edited Result
001.23
012.34
123.45
234.50

Fixed Insertion Editing


- $ (currency symbol)
- + - CR DB (editing-sign control symbols)
PICTURE
999.99+
+9999.99
9999.99
-$999.99
-$999.99
-$999.99
$9999.99CR
$9999.99DB
$9999.99DB
$9999.99CR

Value of Data
+6555.556
-6555.555
+1234.56
-123.45
-123.456
+123.456
+123.45
-123.45
+123.45
-123.45

Edited Result
555.55+
-6555.55
1234.56
-$123.45
-$123.45
$123.45
$0123.45
$0123.45DB
$0123.45
$0123.45CR

Floating Insertion
- $ + - Mutually exclusive
PICTURE
$$$$.99
$$$9.99
$,$$$,999.99
+,+++,999.99
$$,$$$,$$$.99CR
++,+++,+++.+++

NRI-IT

Value of Data
.123
.12
-1234.56
-123456.789
-1234567
0000.00

BILA L AHM ED SHAIK

Edited Result
bbb$.12
bb$0.12
bbbb$1,234.56
b-123,456.78
$1,234,567.00CR
Bbbbbbb

Page 33 of 148

Cobol

DATA DIVISION

Ze ro Suppression and Replace ment


- Z * (Mutually exclusive)
- as floating replacement Z * + - $ are mutually exclusive
PICTURE
****.**
ZZZZ.ZZ
$$$$.$$
$$$$.$$
ZZZZ.99
ZZ99.99
Z,ZZZ.ZZ+
*,***.**+
**,***,***.**+
$ZZ,ZZZ.ZZCR
$B*,***,***.**BBDB

Value of Data
0000.00
0000.00
0000.00
0000.02
0000.00
0000.00
+123.456
-123.45
+12345678.9
+1234.56
-12345.67

Edited Result
****.**
Bbbbbbb
Bbbbbbb
$.02
bbbb.00
bb00.00
bb123.45+
**123.4512,345,678.90+
$b1,234.56bb
$b
***12,345.67bbDB

LINKAGE SECTION: The LINKAGE SECTION is used to define any data passed across programs.
i.e. the layout of the data passed is defined in the linkage section.

Example: LINKAGE SECTION.


01 SALARY-REC.
05 PTR-NEXT-REC POINTER.
05 NAME
PIC X(20).
05 DEPT
PIC 9(4).
05 SALARY
PIC 9(6).
Thus in DA TA DIV ISION, we have defined data used by our program, in the FILE SE CTION Data file
layouts, in WORKING-S TORAGE SECTION - temporary variables if any, and in the LINKAGE SECTION the layout of the dat a passed across programs.

NRI-IT

BILA L AHM ED SHAIK

Page 34 of 148

Cobol

DATA DIVISION

USAGE CLAUSE
The data can be stored in more than one internal form in the computer. In COB OL, a programmer is
allowed to specify the internal form of the data item so as to facilitate the us e of the data item more
efficiently. The USA GE clause specifies the format of a data item in comput er storage. These are forms of
internal representation
Computational
Display
Pointer
Packed decimal
The syntax of the USAGE clause is
USAGE IS {BINARY
COMP COMP UTA TIONAL
COMP-1 COMPUTA TIONA L-1
COMP-2 COMPUTATIONAL-2
COMP-3 COMPUTA TIONA L-3
COMP-4 COMPUTA TIONA L-4
DISPLAY
INDE X
PACKED-DE CIMA L
POINTER}

COMPUTATIONAL: The Computational or COMP phras e has the following 6 formats


A computational item is a value used in arithmetic operations. It must be numeric. If the USAGE of a
group item is described with any of these items, the elementary items within the group have this
usage.
The maximum lengt h of a computational item is 18 decimal digits.
The PICTURE of a computational item can cont ain only:
9 :- One or more numeric character positions
S :- One operational sign
V :- One implied decimal point
P :- One or more decimal scaling positions

NRI-IT

BILA L AHM ED SHAIK

Page 35 of 148

Cobol

DATA DIVISION

BINARY :Specified for binary data items. Such items have a decimal equivalent consisting of the decimal digits 0
through 9, plus a sign. Negative numbers are represented as the two's complement of the positive number
with the same absolute value.

The amount of storage occupied by a binary item depends on the number of decimal digits defined in its
PICTURE clause:

Digits in PICTURE Clause


1 through 4
5 through 9
10 through 18

Storage Occupied
2 bytes (halfword)
4 bytes (fullword)
8 bytes
(doubleword)

COMPUTATIONAL or COMP:This is the equivalent of B INA RY. The COMPUTA TIONA L phrase is synonymous with BINARY.

COMPUTATIONAL-1 or COMP-1 (Floating-Point): Specified for internal floating-point items (single precision). COMP-1 items are 4 bytes long. The number is
actually represented in Hexadecimal form. Such representation is suitable for Arithmetic operations. The
PIC claus e cannot be specified for this item

COMPUTATIONAL-2 or COMP-2 (Long Floating-Point)


Specified for internal floating-point items (double precision). COMP-2 items are 8 bytes long. The
advant age is that this increases the precision of the data, which means more significant digits can be
available for the item. The P IC clause cannot be specified

COMPUTATIONAL-3 or COMP-3 (Internal Decimal)


This is the equivalent of PA CKED-DE CIMAL. In this form of internal representation the numeric data is
represented in the decimal form, but one digit takes half-a-byte.
The sign is stored separately as rightmost half-a-byte regardless of whether S is specified in the PIC
clause or not. The hexadecimal number C or F denotes positive sign and D denot es negative sign.
The number of bytes = n+1/2 Where n is the number of plac es specified in PIC clause
For e.g.
77 ITEM-1

PIC

S9(7) COMP-3

will occupy 4 bytes.


COMP UTA TIONAL-4 or COMP-4 (Binary)
This is the equivalent of B INA RY.

NRI-IT

BILA L AHM ED SHAIK

Page 36 of 148

Cobol

DATA DIVISION

DISPLAY: The data item is stored in character form, 1 character for each 8-bit byte. This corresponds to the format
used for printed output.
DISP LAY can be explicit or implicit.

USAGE IS DISPLAY is valid for the following types of items:


Alphabetic
Alphanumeric
Alphanumeric-edited
Numeric-edited External
floating-point External
decimal (numeric)

INDEX: A data item defined with the INDE X phrase is an index data item.
An index data item is a 4-byte elementary item (not necessarily connected with any table) that can be
used to save index-name values for fut ure reference. Through a SE T statement, an index data item can
be assigned an index-name value; such a value corresponds to the occurrence number in a table.
Direct references to an index data item can be made only in a SEARCH statement, a SE T statement, a
relation condition, the US ING phrase of the Procedure Division header, or the US ING phrase of the CALL
statement.
An index data item can be part of a group item referred to in a MOVE statement or an input/output
statement.
An index data item saves values that represent table occurrences, yet is not necessarily defined as part of
any table. Thus, when it is referred to directly in a SEARCH or SET statement, or indirectly in a MOVE or
input/output statement, there is no conversion of values when the statement is executed.
The USAGE IS INDE X clause can be written at any level. If a group item is described with the USAGE IS
INDE X clause, the elementary items within the group are index dat a items; the group itself is not an index
data item, and the group name cannot be used in SEARCH and SE T statements or in relation conditions.
The USAGE clause of an elementary item cannot contradict the USAGE clause of a group to which the
item belongs.
An index data item cannot be a conditional variable.
The DA TE FORMA T, JUS TIFIED, PICTURE, BLA NK WHEN ZERO, SYNCHRONIZE D, or VALUE
clauses cannot be used to describe group or elementary items described with the USAGE IS INDE X
clause.

NRI-IT

BILA L AHM ED SHAIK

Page 37 of 148

Cobol

DATA DIVISION

SYNCHRONIZE D can be used with USAGE IS INDE X to obtain efficient use of the index data item.

POINTER: A data item defined with USAGE IS POINTE R is a pointer data item. A pointer data item is a 4-byte
elementary item.
You can use pointer data items to accomplish limited base addressing. Pointer dat a items can be
compared for equality or moved to other pointer items.
A pointer data item can only be used:

In a SE T statement (Format 5 only)

In a relation condition

In the USING phrase of a CALL statement, an E NTRY statement, or the Proc edure Division header.
The USA GE IS POINTER clause can be written at any level except level 88. If a group item is described with the
USA GE IS POINTER clause, the elementary items within the group are pointer data items; the group itself is not a
pointer data item and cannot be used in the syntax where a pointer data item is allowed. The USA GE clause of an
elementary item cannot contradict the USA GE clause of a group to which the item belongs.
Pointer data items can be part of a group that is referred to in a MOVE statement or an input/output statement.
However, if a pointer data item is part of a group, there is no conversion of values when the statement is executed.
A pointer data item can be the subject or object of a REDEFINES clause.
SYNCHRONIZED can be used with USA GE IS POINTER to obtain efficient use of the pointer data item.
A VA LUE clause for a pointer data item can contain only NULL or NULLS.
A pointer data item cannot be a conditional variable.
A pointer data item does not belong to any class or category.
The DATE FORMAT, JUSTIFIED, PICTURE, and BLA NK WHEN ZERO clauses cannot be used to describe
group or elementary items defined with the USA GE IS POINTER clause.
Pointer data items are ignored in CORRESPONDING operations.
A pointer data item can be written to a data set, but, upon subsequent reading of the record containing the pointer, the
address contained can no longer represent a valid pointer.
USA GE IS POINTER is implicitly specified for the ADDRESS OF special register.

NRI-IT

BILA L AHM ED SHAIK

Page 38 of 148

Cobol

DATA DIVISION

SYNCHRONIZED
[ {SYNCHRONIZED { LEFT
SYNC }
RIGHT } ]
Specifies the alignment of an elementary item on a natural boundary in storage.
It is never required, but may improve performance on some systems for binary items used in
arithmetic.

NRI-IT

BILA L AHM ED SHAIK

Page 39 of 148

Cobol

EXERCISES

EXERCISES
1. Write File Section entries for the following file
a. The employee Master file
Employee number char 10 (employee number consists of first 2 chars as their initials,
next 4 bytes the month and year of joining, the next 4 bytes a running sequence
number), Employee name char 30, Designation char 2, Department char 3, Date of
Birth char 10, Date of joining char 10
b. The employee transaction file
Employee number char 10, Employee name char 30, Designation char 2, Department
char 3, Date of Birth char 10, Date of joining char 10, run date char 10
c. The Error file
The Record number numeric 8, employee number char 10, error description char 40
d. The Card file
The employee number char 10, run date char 10
2. Write Working storage entries for the following layouts
The working storage variables to check the file status of each file, the presence of the
employee record in the master file

NRI-IT

BILA L AHM ED SHAIK

Page 40 of 148

Cobol

Procedure Division

7. PROCEDURE DIVISION
Now we have defined the data variables used in the program, files used in the program. We need to
process the data available for us to produce the results.
The syntax of procedure division is

PROCEDURE DIVISION [USING data-name-1 ... ]


The US ING clause is optional. It is used when we need to receive data from a calling program or through
JCL using LINKAGE section.
The data-name1 is the 01 levels defined in the linkage section.
The order of the variables should be in the order in which it appears in the linkage section.

SECTIONS AND PARAS: SECTION is recognized by keyword SECTION


Example
MAIN-PROCESS SECTION
PARAGRAP Hs consist of SENTENCEs
Paragraph is Identified by Para Name
The scope of the section or paragraph is until the next section or paragraph starts
Example
9999-READ-FILE.
READ INT91.
9999-READ-FILE-E XIT.
E XIT.

Rules for SECTION/PARA Names: Must not have more than 30 characters
Can contain (0-9) DIGITs, (A-Z) LE TTE Rs & Hyphens (-) only
Hyphen should be embedded
SENTENCE & STA TEME NT: SENTENCE is composed of one or more S TA TEMENTs.
STA TEME NT is a syntactically valid combination of words and symbols beginning with a verb
STA TEME NT can be
- Conditional
- Imperative
- Compiler Directing

NRI-IT

BILA L AHM ED SHAIK

Page 41 of 148

Cobol

Procedure Division

INPUT - OUTPUT VERBS


The input-output verbs are used for processing datasets
Displaying information to and Capturing information from the user

ACCEPT
ACCEPT identifier1 [ FROM
{ mnemonic- name
environment-name
DATE
DAY
DAY-OF-WEEK
TIME } ]

Using SPECIAL-NAMES paragraph


A mnemonic name can be assigned to each of the environment names.
For instance, OPE RA TOR IS CONS OLE can be specified in SPECIA L-NAMES paragraph. Then the
ACCEP T statement can be coded as ACCEP T identifier1 FROM OPERA TOR.
Mnemonic-Name is as specified in SPE CIA L-NAMES
Environment-Name can be SYSIN, SYSIP T, CONSOLE
DA TE

- YYMMDD

DAY-OF-WEEK

- 9(6)
- 9(1)

- 1 TO 7 (Monday to Sunday )
DAY

- YYDDD (Julian)

- 9(5)

TIME

- HHMMSShs

- 9(8)

ACCEPT - Example
COBOL statement
ACCEP T in-parm
ACCEP T in-parm FROM card

NRI-IT

BILA L AHM ED SHAIK

Page 42 of 148

Cobol

Procedure Division

JCL statement:
//SYSIN DD applicable parameters
LRE CL of DCB parameter can be up to a max of 256.
RECFM can be Fixed or Variable
Records are read until identifier is filled or EOF reached

DISPLAY
DISPLAY { identifier1
literal1 } ...
[ UPON { mnemonic- name1
environment-name1}]
[ WITH NO ADVANCING ]
When the UP ON is omitted, SYSOUT is the default device
Mnemonic-name is as specified in SPECIAL-NAMES
Environment-name can be SYSOUT, SYSLIS T, SYSLS T, SYSPCH, SYSPUNCH, CONS OLE

DISPLAY - Example
COBOL statement
DISP LAY Return code: i-ret-code
DISP LAY Return code: i-ret-code
UPON SYSLIS T
JCL statement
//SYOUT DD applicable parameters
//SYLIST DD applicable parameters
Default LRE CL for SYSOUT is 121 and RECFM is FBA
Records will be folded if length > LRECL - 1.

DISPLAY - Rules
Identifier-1 is converted automatically to external format, if required
Negative signed values cause a low-order sign overpunch
POINTERs are converted to an external PIC 9(10)
INDE X names cant be specified

NRI-IT

BILA L AHM ED SHAIK

Page 43 of 148

Cobol

Procedure Division

ARITHMETIC OPERATIONS
BINA RY : + - * / **
UNA RY : + Precedence
- Unary
- Exponentiation
- Multiplication and Division
- Addition and Subtraction

ADD: Two or more numeric operands are summed up and stored


Rules
- Elementary Numeric Items
- Literals should be Numeric
- Decimal Point Alignment
- Internal Format Trans formation in case of mixed usage clause

Format 1
ADD { id-1
lit-1 } ...
TO ( id- m [ ROUNDED ] ) ...
[ ON SIZE ERROR imper-stmt1 ]
[ NOT ON SIZE ERROR
imper-stmt2 ]
[ END-ADD ]
Format 2
ADD { id-1 TO { id-3
lit-1 } ...
lit-3 }
GIVING ( id- m [ ROUNDED ] ) ...
[ ON SIZE ERROR imper-stmt1 ]
[ NOT ON SIZE ERROR
imper-stmt2 ]
[ END-ADD ]

NRI-IT

BILA L AHM ED SHAIK

Page 44 of 148

Cobol

Procedure Division

Format 3
ADD { CORRESPONDING
CORR }
id-1 TO id-2 [ ROUNDED ]
[ ON SIZE ERROR imper-stmt1 ]
[ NOT ON SIZE ERROR
imper-stmt2 ]
[ END-ADD ]

CORRESPONDING: Quite often it is required to move some of the data item of one group to some other data item of other
group. If the names of the corresponding data items are distinct then separate MOVE statements have to
be used. But if the corresponding data items have identical names, then instead of separate MOVE
statements, MOVE CORRESPONDING can be used.

E.g.
1

NRI-IT

PAY-REC.
02
ID-NUMBER
02
NAME
02
DEPARTMENT
02
BASIC-PAY
02
FILLER
PRINT-REC.
02
FILLER
02
ID-NUMBER
02
FILLER
02
NAME
02
FILLER
02
DEPARTMENT
02
FILLER
02
BASIC-PAY
02
FILLER
02
DEDUCTIONS
02
FILLER
02
ALLOWANCES
02
FILLER
02
NET-PAY

PIC
PIC
PIC
PIC
PIC

9(5).
X(25).
X(20).
9999V99.
X(24).

PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC

X(5).
Z(5).
X(5).
X(25).
X(5).
X(20).
X(5).
ZZZZ.99
X(5).
PIC ZZZZ.99.
X(5).
PIC ZZZZ.99
X(5).
ZZZZ.99

PIC
PIC
PIC

BILA L AHM ED SHAIK

Page 45 of 148

Cobol

Procedure Division

MOVE CORR PAY-REC TO PRINT-REC


In the above example the ID-NUMBER, NAME, DEPARTMENT, BASIC-PAY of PAY-REC
will be moved the same data item of PRINT-REC.
This is equivalent to 4 move statements
MOVE ID-NUMBER OF PAY-REC TO ID-NUMBER OF PRINT-REC.
MOVE NAME OF PAY-REC TO NAME OF PRINT-REC.
MOVE DEPARTMENT OF PAY-REC TO DEPARTMENT OF PRINT-REC.
MOVE BASIC-PAY OF PAY-REC TO BASIC-PAY OF PRINT-REC.
ADD Corresponding:For example, if two data hierarchies are defined as follows:
05 ITEM-1 OCCURS 6.
10 ITEM-A PIC S9(3).
10 ITEM-B PIC +99.9.
10 ITEM-C PIC X(4).
10 ITEM-D REDEFINES ITEM-C PIC 9(4).
10 ITEM-E USAGE COMP-1.
10 ITEM-F USAGE INDEX.
05 ITEM-2.
10 ITEM-A PIC 99.
10 ITEM-B PIC +9V9.
10 ITEM-C PIC A(4).
10 ITEM-D PIC 9(4).
10 ITEM-E PIC 9(9) USAGE COMP.
10 ITEM-F USAGE INDEX.
Then, if ADD CORR ITEM-2 TO ITEM-1(X) is specified, ITEM-A and ITEM-A(X), ITEM-B
and ITEM-B(X), and ITEM-E and ITEM-E(X) are considered to be corresponding and are added
together. ITEM-C and ITEM-C(X) are not included because they are not numeric. ITEM-D and
ITEM-D(X) are not included because ITEM-D(X) includes a REDEFINES clause in its data
description. ITEM-F and ITEM-F(X) are not included because they are defined as USAGE IS
INDEX. Note that ITEM-1 is valid as either identifier-1 or identifier-2.
If any of the individual operations in the ADD CORRESPONDING statement produces a size
error condition, imperative-statement-1 in the ON SIZE ERROR phrase is not executed until all
of the individual additions are completed.

NRI-IT

BILA L AHM ED SHAIK

Page 46 of 148

Cobol

Procedure Division

ON SIZE ERROR Occurs


When the absolute value of the res ult of an arithmetic evaluation, after decimal point alignment,
exceeds the largest value that can be contained in the result field
When division by zero occurs
If the ON S IZE ERROR phrase is specified and a size error condition occurs, the value of the resultant
identifier affected by the size error is not altered--that is, the error results are not placed in the
receiving identifier. After completion of the exec ution of the arithmetic operation, the imperative
statement in the ON SIZE ERROR phrase is executed, control is transferred to the end of the
arithmetic statement, and the NOT ON SIZE ERROR phrase, if specified, is ignored.
If the NOT ON SIZE E RROR phrase has been specified and, aft er execution of an arithmetic
operation, a size error condition does not exist, the NOT ON SIZE ERROR phrase is executed.
For ADD CORRESPONDING and SUB TRA CT CORRESPONDING statements, if an individual
arithmetic operation caus es a size error condition, the ON SIZE ERROR imperative statement is not
executed until all the individual additions or subtractions have been completed.
If the ROUNDE D phrase is specified, rounding takes place before size error checking.

ROUNDED Phrase
After decimal point alignment, the number of places in the fraction of the result of an arit hmetic
operation is compared with the number of places provided for the fraction of the resultant identifier.

NRI-IT

BILA L AHM ED SHAIK

Page 47 of 148

Cobol

Procedure Division

When the size of the fractional result exceeds the number of places provided for its storage, truncation
occurs unless ROUNDE D is specified. When ROUNDED is specified, the least significant digit of the
resultant identifier is increased by 1 whenever the most significant digit of the excess is greater than or
equal to 5.
ADD Examples
ADD A TO B
ADD 1 TO B
ADD A TO B ROUNDE D
ADD A TO B, C
ADD A TO B ROUNDE D
C ROUNDE D
ADD A TO B ROUNDE D , C
ON SIZE E RROR
MOVE 1 TO ERR-FLAG
ADD A, B, C, D TO X, Y, Z
ADD A , B, C, D TO E GIV ING X, Y

Add CORR X to Y (Example)


01 X.
05 X-1 PIC 9(3) VALUE 1.
05 X-2 PIC 9(3) VALUE 2.
05 X-3 PIC 9(3) VALUE 3.
01 Y.
05 X-1 PIC 9(5) VALUE 5.
05 X-2 PIC 9(5) VALUE 9.
05 X-3 PIC 9(5) VALUE 12.
After Add, Under group Y:
X-1 = 6; X-2 = 11; X-3 = 15
SUBTRACT
To subtract one or the sum of two or more numeric items from one or more items and set the values
of one or more items to the result
Valid only for Numeric Items
Automatic Decimal Alignment

NRI-IT

BILA L AHM ED SHAIK

Page 48 of 148

Cobol

Procedure Division

SUBTRACT { id-1
lit-1 } ...
FROM ( id- m [ ROUNDED ] ) ...
[ ON SIZE ERROR imper-stmt1 ]
[ NOT ON SIZE ERROR
imper-stmt2 ]
[ END-SUBTRACT ]
SUBTRACT { id-1
lit-1 } ...
FROM
{ id-2
lit-2 }
GIVING
( id- m [ ROUNDED ] ) ...
[ ON SIZE ERROR imper-stmt1 ]
[ NOT ON SIZE ERROR imper-stmt2 ]
[ END-SUBTRACT ]
SUBTRACT { CORRESPONDING
CORR }
id-1 FROM id-2 [ ROUNDED ]
[ ON SIZE ERROR imper-stmt1 ]
[ NOT ON SIZE ERROR
[ END-SUBTRACT ]

imper-stmt2

SUBTRACT Examples
SUB TRA CT 1 FROM A
SUB TRA CT A FROM B
SUB TRA CT A B FROM C D
SUB TRA CT A B FROM C GIV ING D
SUB TRA CT A FROM B
GIV ING CROUNDE D
SUB TRA CT A FROM B
ON SIZE E RROR
MOVE 1 TO ERROR-FLAG

NRI-IT

BILA L AHM ED SHAIK

Page 49 of 148

Cobol

Procedure Division

MULTIPLY
MULTIPLY { id-1
lit-1 }
BY ( id-2 [ ROUNDED ] ) ...
[ ON SIZE ERROR imper-stmt1 ]
[ NOT ON SIZE ERROR
imperative-stmt2 ]
[ END-MULTIPLY ]
MULTIPLY { id-1
BY id-2
lit-1 }
GIVING id-3 ( [ ROUNDED ] ) ...
[ ON SIZE ERROR imper-stmt1 ]
[ NOT ON SIZE ERROR
imperative-stmt2 ]
[ END-MULTIPLY ]
MULTIPLY - Examples
MULTIPLY 5 BY A
MULTIPLY 5 BY A ROUNDE D
MULTIPLY A BY B
MULTIPLY A BY B GIVING C D
MULTIPLY A BY B ON SIZE ERROR
MOVE 1 TO ERROR-FLAG
MULTIPLY A BY B GIVING C
ON SIZE E RROR
MOVE 1 TO ERROR-FLAG

NRI-IT

BILA L AHM ED SHAIK

Page 50 of 148

Cobol

Procedure Division

DIVIDE
DIVIDE { id-1 INTO
lit-1 }
( id-2 [ ROUNDED ] ) ...
[ ON SIZE ERROR imper-stmt1 ]
[ NOT ON SIZE ERROR
imperative-stmt2 ]
[ END-DIVIDE ]
DIVIDE { id-1 {BY
{ id-2
lit-1 } INTO} lit-2 }
GIVING ( id-3 [ ROUNDED ] ) ...
[ ON SIZE ERROR imper-stmt1 ]
[ NOT ON SIZE ERROR imperative-stmt2 ]
[ END-DIVIDE ]

DIVIDE A INTO B
DIVIDE A INTO B
ROUNDED
DIVIDE A INTO B C
DIVIDE A INTO B
GIVING C
DIVIDE 2 INTO A
GIVING B C
DIVIDE A BY B
GIVING C
DIVIDE A BY 5
GIVING B
REMAINDER C

BEFORE
A
B
C

AFTER
A
B

2
2

10
9

2
2

5
5

2
2

10
10

14
-

2
2

5
10

7
5

Table 7.1 DIVIDE - Examples

NRI-IT

BILA L AHM ED SHAIK

Page 51 of 148

Cobol

Procedure Division

COMPUTE
COMP UTE
- More than one operation in a single statement
- Shortens Programs
- Avoids Intermediate data names

E XPRESS IONS
- Made up of Operat ors, Data Names & Literals
- Operators evaluated based on parenthesis and/or precedence

COMPUTE id-1 [ ROUNDED ]


[ id-2 [ ROUNDED ] ] ...
= arithmetic-expression
[ ON SIZE ERROR imper-stmt1 ]
[ NOT ON SIZE ERROR imperative-stmt2 ]
[ END-COMPUTE ]
Examples
COMPUTE PROFIT = PRICE - COST,
COMPUTE A
= B+C*2.

NRI-IT

BILA L AHM ED SHAIK

Page 52 of 148

Cobol

Exercises

EXERCISES
1.

01
VAL-1
PIC
999V99
VALUE
999.45.
01
VAL-2
PIC
9(5)V999
VALUE
99008.301.
01
VAL-3
PIC
9(5)V99
VALUE
11.3.
01
VAL-4
PIC
9999
VALUE
300.
What will be contained in VAL-1,VAL-2,VAL-3,VAL-4 after executing the following statement
a.
b.
C.
D.

ADD VAL-1, VAL-2 GIVING VAL-3 ON SIZE ERROR MOVE ZERO TO VAL-3.
ADD VAL-2, VAL-4 GIVIGN VAL-3 ON SIZE ERROR MOVE ZERO TO VAL-3.
DIVIDE VAL-3 INTO VAL-4 GIVING VAL-3 ROUNDED
MULITPLY VAL-4 BY VALI-1 GIVING VAL-4 ON SIZE ERROR MOVE 1 TO VAL-4

3. What will be the


01
A
01
B
01
C
A.
B.
C.
D.
E.

result of the following compute statement


PIC
S9(3)V99.
PIC
9(5)V99.
PIC
S9(5).

COMPUTE A = 999.988
COMPUTE A ROUNDED = 999.985
COMPUTE B = 8888.50 / 5.25 + 99.5 / 5.0 * 4425.5 ON SIZE ERROR MOVE 1 TO B.
A = 1.555, B= 9999.99 C = -11115.96. COMPUTE B ROUNDED = C * A
COMPUTE B ROUNDED = C ROUNDED * A ROUNDED

4. A field name STRING-1 contains 80 chars. The char (/) or (,) is used to indicate the end of
a word within these 80 chars. Write the cobol statement to find the number of words in
STRING-1 and the length of the individual words
1. A field named NAME contains 40 characters. Write a COBOL statement to change all
instances of MR. by SRI and MRS by SMT

NRI-IT

BILA L AHM ED SHAIK

Page 53 of 148

Cobol

Exercises

2. What will be present after the execution of following statement


1 WS-REC-1.
02
NAME
PIC
X(20).
02
AMT-1
PIC
9(5)V99.
02
AMT-2
PIC
9(5)V99.
02
TOTAL
PIC
9(6)V99.
INITIALIZE WS-REC-1.
INITIALIZE WS-REC-1 REPLACING NUMERIC BY 1000.
MOVE 2000 TO AMT-2.
COMPUTE TOTAL = AMT-1 + AMT-2
What value will be present in TOTAL.

NRI-IT

BILA L AHM ED SHAIK

Page 54 of 148

Cobol

Control Flow Verbs

8. Control Flow Verbs


CONDITIONAL EXPRESSIONS
Types
- Relation
- Class
- Sign
- Condition name
Cause the processing to select between alternate paths depending on the truth value of the
expression

RELATION OPERATORS
Causes a comparison of two operands. Operands can be an Identifier, Literal or Arithmetic
Expression
Syntax
operand-1 relop operand-2
Operand-1, operand-2 can be an identifier, literal, arithmetic expression, index-name or a pointer.
Relational Operators

IS [NOT] GREATER THAN

[NOT] >

IS [NOT] LESS THAN

[NOT] <

IS [NOT] EQUAL TO

[NOT] =

IS GREATER THAN OR EQUAL TO

>=

IS LESS THAN OR EQUAL TO

<=

For Numeric operands the comparison is algebraic


Example:
012
12.00
12
+12 are all equal

NRI-IT

BILA L AHM ED SHAIK

Page 55 of 148

Cobol

Control Flow Verbs

Comparison permitted regardless of Usage

NON-NUMERIC OPERANDS OR ONE NUMERIC & ONE NON-NUMERIC


Comparison is made as per the collating sequence
If both operands Usage are same and relational operator = or NOT = no conversion
All other comparison operands wit h Usage other than display are converted to display
Comparison starts from left most character
For operands size unequal the comparis on proceeds as if the shorter operand had been padded
by blanks on the right

Example
l-A JOES
l- B JOE taken as JOE
l-A > l- B is TRUE
CLASS CONDITION
Numeric or Alphabetic or user defined class-name check of the operand
Numeric test cannot be done for an item declared as alphabetic (P IC A)
Alphabetic test cannot be done for item declared as Numeric (PIC 9)
Packed-decimal allowed for Numeric test
Syntax

IF id-1 IS [ NOT ]
{NUMERIC
ALPHABETIC
ALPHABETIC-LOWER
ALPHABETIC-UPPER
class- name }
SIGN CONDITION
operand-1 IS [ NOT ]
{POSITIVE
NEGATIVE
ZERO }
Determines whet her algebraic value is less than greater than or equal to zero
operand-1 must be a numeric identifier, or arithmetic containing at least one reference to a
variable

NRI-IT

BILA L AHM ED SHAIK

Page 56 of 148

Cobol

Control Flow Verbs

Condition Name
It is a subset of relational condition
It tests a conditional variable to determine whether its value is equal to any value(s) associated
with the condition-name.
condition-name is used in conditions as an abbreviation for the relation condition.
Syntax :

condition-name-1

Conditional expression
Examples
IF ASSOC-AGE > 80
SET SENIOR-ASSOC TO TRUE
END-IF
IF ASSOC-SAL IS POSITIVE
SET DEBIT-AMOUNT TO TRUE
END-IF
COMPLEX CONDITIONS
Formed by
- Combining simple conditions
- Nested IFs
- Logical Connectives
Logical Operators
- Used to combine simple conditions
- Abbreviating conditions
- For negation

LOGICAL OPERATORS
NOT
- Logical Negation
OR
- Logical Inclusive
AND
- Logical Conjunction

NRI-IT

BILA L AHM ED SHAIK

Page 57 of 148

Cobol

Control Flow Verbs

EVALUATION RULES
Precedence
- Arithmetic Expression
- All Relational Operators
- NOT
- AND
- OR
If a condition is put in parenthesis, it is evaluated and its truth value depends on the truth value of
its constituents

ABBREVIATED COMPOUND CONDITIONS


IF A = B AND A = C is same as
IF A = B AND = C
Here identical subjects are omitted in a consecutive sequence of
relational conditions
IF A = B AND A = C is same as
IF A = B AND C
Here identical subjects and relational operators are omitted in a
consecutive sequence of relational conditions
As indicated in the examples compound conditions can be
abbreviated by having implied subjects, or, implied subjects and relational operators.

Examples
A > B OR NOT C OR D
= (A>B) OR NOT (A>C) OR (A>D)

A > B OR NOT C OR NOT < D


= (A>B) OR (A NOT > C) OR (A NOT< D)

GO TO
The GO TO statement transfers control from one part of the Procedure Division to another. The GO TO
statement has four formats:

NRI-IT

BILA L AHM ED SHAIK

Page 58 of 148

Cobol

Control Flow Verbs

Unconditional GO TO: The unconditional GO TO statement transfers control to the first statement in the paragraph or section
named in procedure-name

The Syntax of the GO TO statement is


GO TO procedure-name-1
procedure-name-1
Must name a procedure or a section in the same Procedure Division as the GO TO statement.
An unconditional GO TO statement, when it appears in a sequence of imperative statements, must be the
last statement in the sequence.

Example:IF NOT NUMERIC


GO TO 999-ERR-PARA.

Conditional GO TO: GO TO proc-name-1 DEPENDING ON int-1


The conditional GO TO statement transfers control to one of a series of procedures, depending on the
value of the identifier.
procedure-name-1

Must be a proc edure or a section in the same Procedure Division as the GO TO statement. The number
of procedure-names must not exceed 255.

identifier-1
Must be a numeric elementary data item, which is an integer.

If equal to 1, control is transferred to the first statement in the procedure named by the first occurrence
of procedure-name-1

If equal to 2, control is transferred to the first statement in the procedure named by the second
occurrence of procedure-name-1, and so forth.

NRI-IT

BILA L AHM ED SHAIK

Page 59 of 148

Cobol

Control Flow Verbs

If the value of identifier is anything other than a value within the range of 1 through n (where n is the
number of procedure-names specified in this GO TO statement), no control transfer occurs.

Instead,

control passes to the next statement in the normal sequence of execution.

Example: GO TO 100-HDR-PARA 120-REC-PARA 130-TRILER-PARA DEPENDING ON WS-INT-1


When WS-INT-1 = 1, 100-HDR-PARA
WS-INT-1 = 2, 120-REC-PARA
WS-INT-1 = 3, 130-TRILER-PARA

ALTER
Changes the trans fer point specified in a GO TO statement
The altered GO TO statement transfers control to the first statement of the paragraph named in
the ALTER statement.
ALTER procedure-name-1 TO
PROCEED TO
procedure-name-2
procedure-name-1 must be that contains only one sentence: a GO TO without the DEPE NDING
ON phras e

ALTER - Watch out


Is an obsolete element and encourages the use of unstructured programming practices; it will be
deleted from the next revision of the COBOL 85 Standard. The EVALUA TE statement provides similar
functionality

NRI-IT

BILA L AHM ED SHAIK

Page 60 of 148

Cobol

Control Flow Verbs

ALTER - Example
PROCEDURE DIVISION.
.....
A1-PARA.
GO TO A1-FIRST-TIME.
A1-FIRST- TIME.
INIT W-REC-COUNTER.
ALTER A1-PARA TO
A1-NEXT-TIME.
A1-NEXT-TIME.
......
GO TO . is a GO TO form for ALTER and can be used in the above instead of GO TO A1FIRST-TIME.
IF
IF condition-1 THEN
{ statement-1 ...
NEXT SENTENCE }
[ ELSE [ statement-2 ...
NEXT SENTENCE ] ]
[ END-IF ]
NE XT SE NTE NCE means execution should move to stmt after the
next separator period
Never use NE XT SENTE NCE and Period as IF terminator. It is not a
good programming practice

statement-1, statement-2
Can be any one of the following:

An imperative statement
A conditional statement
An imperative statement followed by a conditional statement.

NRI-IT

BILA L AHM ED SHAIK

Page 61 of 148

Cobol

Control Flow Verbs

EXAMPLE: IF (WS-NT91-CLT NOT EQUAL 99999)


AND WS-NT91-SEQ NOT NUMERIC
Statements 1
ELSE
Statement 2
END-IF
Using conditional-names: IF C08W-ERR-OPEN-FLAG
GO TO 999-ERR-OPEN-PARA
END-IF
CONTINUE
Allows you to specify a no operation statement. It indicates that no executable instruction is
present.
Syntax :
CONTINUE
It can be used any where a conditional statement or an imperative statement can be used. It has
no effect on the execution of the program.

CONTINUE - Example
IF YEAR-IS-NOT-LEAP
CONTINUE
ELSE
ADD 1 TO NO-OF-FEB-DAYS
END-IF
The above IF usage is preferred compared to IF NOT given below:
IF NOT YEAR-IS-NOT-LEAP
ADD 1 TO NO-OF-FEB-DAYS
END-IF

NRI-IT

BILA L AHM ED SHAIK

Page 62 of 148

Cobol

Control Flow Verbs

EVALUATE
Provides a shorthand notation for a series of nested IF statements.
It can evaluate multiple conditions.

That is, the IF statements can be made up of compound

conditions.
Provides better readability.
When a satisfiable WHE N is met, processing breaks off from the rest of the evaluate block

EVALUATE subject-1 [ALSO subject-2]


{{WHEN object-1 [ALSO object-2]
imperative-statement-1 ]
[WHEN OTHER imperative-statement-2]
[ END-EVALUATE
Where a subject is
{
Int-1
Literal 1
Expression
TRUE
FALSE}
And an Object is
{ ANY
condition-1
TRUE
FALSE
[NOT] { identifier-3 [ { THROUGH
literal-3
THRU } { identifier-4
arith-exp-1}
literal-4
arith-expr-2} ] }
The execution of the EVALUA TE statement operates as if each selection subject and selection object
were evaluated and assigned a numeric or nonnumeric value, a range of numeric or nonnumeric
values, or a truth value
The exec ution of the EVALUA TE statement then proceeds as if the values assigned to the selection
subjects and selection objects were compared to det ermine whether any WHEN phrase satisfies the
set of selection subjects. This comparison proceeds as follows:

NRI-IT

BILA L AHM ED SHAIK

Page 63 of 148

Cobol

Control Flow Verbs

1.

Each selection object within the set of selection objects for the first WHEN phras e is

compared to the selection subject having the s ame ordinal position within the set of selection
subjects. One of the following conditions must be satisfied if the comparison is to be satisfied:

a.

If the items being compared are assigned numeric or nonnumeric values, or a range of

numeric or nonnumeric values, the comparison is satisfied if the value, or one value in the range
of values, assigned to the selection object is equal to the value assigned to the selection subject,
according to the rules for comparison.

b.

If the items being compared are assigned truth-values, the comparison is satisfied if the

items are assigned identical truth-values.

c.

If the selection object being compared is specified by the word A NY, the comparison is

always satisfied, regardless of the value of the selection subject.

2.

If the above comparison is satisfied for every selection object within the set of selection

objects being compared, the WHE N phrase containing that set of selection objects is selected as
the one satisfying the set of selection subjects.

3.

If the above comparison is not satisfied for every selection object within the set of

selection objects being compared, that set of selection objects does not satisfy the set of selection
subjects.

4.

This proc edure is repeat ed for subsequent sets of selection objects in the order of their

appearance in the source program, until either a WHEN phrase satisfying the set of selection
subjects is selected or until all sets of selection objects are exhausted.

NRI-IT

BILA L AHM ED SHAIK

Page 64 of 148

Cobol

Control Flow Verbs

Example 1
EVALUATE proc-type ALSO
cust-type
WHEN 1 ALSO 1
MOVE 1 TO RESULT
WHEN 3 ALSO 1 THRU 2
MOVE 2 TO RESULT
WHEN 2 ALSO 1
MOVE 3 TO RESULT
WHEN OTHER
MOVE 0 TO RESULT
END-EVALUATE
In this example subject of Evaluation is an Expression. Depending on these values the control
passes to the corresponding WHEN.
Example 2
EVALUATE TRUE
WHEN l-VALUE < 100
MOVE 1 TO RESULT
WHEN l-VALUE < 1000
MOVE 2 TO RESULT
WHEN l-VALUE < 10000
WHEN OTHER
MOVE 0 TO RESULT
END-EVALUATE
In this example, the subject is TRUTH value. Depending on the values the WHEN phrase
satisfying the TRUTH value is executed.
If a WHEN does not have a associated imperative statement it is a do- nothing condition (same as
coding CONTINUE)
PERFORM
The PERFORM statement trans fers control explicitly to one or more procedures and implicitly returns
control to the next executable statement after execution of the specified procedure(s) is completed.
An out-of-line PE RFORM statement (P rocedure-name-1 is specified).
An in-line PERFORM statement (Procedure-name-1 is omitted). An in-line PERFORM statement must
be delimited by the END-PE RFORM phrase.

NRI-IT

BILA L AHM ED SHAIK

Page 65 of 148

Cobol

Control Flow Verbs

The in-line and out-of-line PE RFORM statements cannot be combined. For example, if procedurename-1 is specified, imperative-statement-1 and the END-PE RFORM phrase must not be specified.
Executes group of consecutive statements written inline (called INLINE PERFORM) or elsewhere
(called OUT-OF-LINE PERFORM) in a program
Has four formats
Departs from normal sequence of execution and implicit return to next statement after completion

PERFORM (Basic)
PERFORM
{ proc- name1[{ THRU proc- name2
THROUGH } ]
imp-statement-1 END-PERFORM
}
Example 1 (Out-of- line)
PERFORM PARA-1 THRU PARA-2
In this example the execution of PERFORM statement will start with execution of first statement in PARA-1
and ends with execution of last statement in PARA -2. All the paragraphs in bet ween these 2 paragraphs
will be execut ed. And then control returns to the statement next to the perform statement. This transfer of
control occurs implicitly

Example 2 (Inline)
PERFORM
MOVE 1 TO FLAG-1
MOVE 2 TO FLAG-2
END-PERFORM
In the above example the control is not transferred anywhere. This will execute the statements within the
perform statement. This perform is called inline perform statements which does not contain any section
name or paragraph name. This perform statement should end wit h an END-PE RFORM statement

PERFORM - Overlap Rules


When the performed procedures executes another PERFORM the procedures associated with the
2nd level PERFORM must be totally included in or totally excluded from the procedures of the first
level PERFORM statement.

NRI-IT

BILA L AHM ED SHAIK

Page 66 of 148

Cobol

Control Flow Verbs


Two or more such active PE RFORM must not have a common exit.

PERFORM (TIMES option)


PERFORM
{ proc-name1 [THRU proc-name2] { id-1 TIMES
int-1}
{ id-1
init-1 } TIMES imp-stmt-1 END-PERFORM
}
PERFORM (TIMES option) - Rules
Once the perform statement is initiated any changes to the id-1 will have no effect on the nbr of
times the para is to be executed
If identifier-1 is zero or a negative number at the time the PE RFORM statement is initiated, cont rol
passes to the statement following the PE RFORM statement.

PERFORM (TIMES)
Example
PERFORM B1-PROCESS
THRU B1-PROCESS-EXIT
10 TIMES
In this example the number of times perform statement is going to be ex ecuted is predet ermined. Hence
this perform statement will be executed 10 times.

PERFORM I-CNT TIMES


WRITE OUT-REC FROM I-ERR-REC (I-CNT)
SUBTRACT 1 FROM I-CNT
END-PERFORM
In this example the number of times the perform statement is to be executed is not predetermined. It
depends on value of the variable I-CNT.
If I-CNT is 0 or negative, this perform statement is not all executed

PERFORM (UNTIL option)


PERFORM
{ proc-name1[THRU proc-name2] until-phrase
imp-statement-1 until-phrase END-PERFORM
}

NRI-IT

BILA L AHM ED SHAIK

Page 67 of 148

Cobol

Control Flow Verbs

until-phrase
UNTIL condition WITH TEST { BEFORE
AFTER } ]
In the UNTIL phrase format, the procedure(s) referred to are performed until the condition
specified by the UNTIL phrase is true. Control is then passed to the next exec utable statement
following the PERFORM statement.
Here the condition is tested before only at the beginning of each execution by default
But this default is overridden by TES T AFTE R phrase. If the TES T AFTER phrase is specified, the
statements to be performed are executed at least once before the condition is tested (corresponds to
DO UNTIL).
In either case, if the condition is true, control is trans ferred to the next executable statement
following the end of the PERFORM statement. If neither the TES T BEFORE nor the TES T AFTER
phrase is specified, the TES T BEFORE phrase is assumed.

Ente
r

True
Condition

EXI
T

False

Executable statements in the


perform paragraph

Fig 8.1 Flow chart for Perform..Until

NRI-IT

BILA L AHM ED SHAIK

Page 68 of 148

Cobol

Control Flow Verbs

PERFORM (UNTIL)
Example
MOVE 10 TO I-CNT
PERFORM UNTIL I-CNT = ZERO
WRITE OUT-REC FROM I-ERR-REC (I-CNT)
SUBTRACT 1 FROM I-CNT
END-PERFORM
In the above example, the WRITE and SUBTRACT statements will be executed until the I-CNT
becomes zero. Here perform will be executed 10 times.
PERFORM (VARYING)
PERFORM
{ proc-name1[THRU proc-name2]
varying-phrase after-phrase
varying-phrase imp-stmt-1 END-PERFORM
}
varying-phrase
[ WITH TEST
{BEFORE
AFTER } ]
VARYING { id-1
FROM { id-2 lit-1
Inx- nm1 }
inx- nm-2}
BY { id-3
UNTIL cond-1
lit-2 }
after-phrase
( AFTER { id-4
FROM
{ id-5 lit-1
inx- nm1 }
inx- nm-2}
BY { id-6
UNTIL cond-2
lit-2 } ) ...
After-phrase provides for varying more than one identifier
If any of the operands specified in cond-1 or cond-2 is subscripted or reference modified, the
subscript or reference-modifier is evaluat ed each time the condition is tested.

NRI-IT

BILA L AHM ED SHAIK

Page 69 of 148

Cobol

Control Flow Verbs


When TES T BEFORE is indicated, all specified conditions are tested before the first execution,

and the statements to be performed are executed, if at all, only when all specified tests fail. When
TES T AFTE R is indicated, the statements to be performed are executed at least once, before any
condition is tested.
Changing the values of identifiers and/or index -names in the VARY ING, FROM, and BY phras es
during execution changes the number of times the procedures are exec uted.

EXAMPLE:PERFORM PROC1 THRU PROC2


VARYING I FROM 1 BY 1 UNTIL I > 50
AFTE R J FROM 1 BY 1 UNTIL J > 10
In the above example the PROC-1 to PROC-2 will be executed 500 times.
First with I as 1 and J varying from 1 to 10 in step of 1, then I as 2 and again J varying from 1 to 10 and so
on. E very time I changes value, J must vary from 1 to 10.
Each time the loop varying J is completed, J is initialized before changing the value of I.
Thus aft er this perform statement is executed, value of I will 51 and that of J will 1 and not 11.

NRI-IT

BILA L AHM ED SHAIK

Page 70 of 148

Cobol

Control Flow Verbs

Ente
r

Set Identifier-1 to initial


value

True
Cond1

Exi
t

False

Execute the imperative


statement in the
perform paragraph

Add increment to
indentifier-1

Figure 8.2 Flow Chart for Performvarying TEST BEFORE

NRI-IT

BILA L AHM ED SHAIK

Page 71 of 148

Cobol

Control Flow Verbs


Ente
r

Set Id-1 & id-4 to their


respective initial values

True
Cond1

Exi
t

False
True
Cond2

Execute the iFmaplseerative


statement in the
perform paragraph

Add increment (id-6)


to id-4

Set id-4 to initial value

Add increment (id-3)


to id-1

Figure 8.3 Flow Chart for Performvarying.After.with TEST BEFORE

NRI-IT

BILA L AHM ED SHAIK

Page 72 of 148

Cobol

Control Flow Verbs

EXIT
Provides a return mechanism for the Perform statement having Exit para as the last paragraph
The E XIT statement provides a common end point for a series of paragraph.
Must be preceded by a paragraph name
Must be the only statement in the paragraph
Falls thru if there is no associated Perform
Provides a common exit point for a series of paragraphs (by executing a GO TO PARA-E XIT in the
paragraph)

EXIT - Example
PROCEDURE DIVISION.
....
PERFORM B1-PROCESS
UNTIL A > 5.
.....
B1-PROCESS.
.
ADD 1 TO A.
IF NOT-VALID-ACTION
PERFORM B1-PROCESS-EXIT
...
B1-PROCESS-EXIT
EXIT.

NRI-IT

BILA L AHM ED SHAIK

Page 73 of 148

Cobol

Exercises

EXERCISES
1. Rewrite the following IF statement-using condition names. Also indicate how the condition
names are to be defined in the DATA DIVISION.
IF MARKS >= 90 MOVE O TO GRADE
ELSE IF MARKS >= 75 MOVE E TO GRADE
ELSE IF MARKS >= 60 MOVE D TO GRADE
ELSE IF MARKS >= 50 MOVE C TO GRADE
ELSE IF MARKS NOT > 40 MOVE B TO GRADE
ELSE MOVE F TO GRADE
2. The following is the information about the patient file
Description

Length

Name

30

Sex

1 (Male M, Female - F)

Age

Height

5 with 2 decimal places

Weight

A paragraph named PROCESS-PARA needs to be executed only if the patient is Male whose age
is between 25 and 45 yrs and Height is 160 175 cms and weight is 60 75 kgs.

Write the necessary IF statement using suitable condition names. Also write the record
description entry for the patient file

3. Write the evaluate statement for the following


When the account code is 100, then the rate of interest is 10 % . If the account code is 110,
then rate of interest is 9.5%. If the account code is 120, rate of interest is 12%, if the account-code
is 130, then rate of interest is 11.5% for all other account codes the rate of interest is 4.5%.

NRI-IT

BILA L AHM ED SHAIK

Page 74 of 148

Cobol

Non-Nu meric Data Manipulation

9. Non-Numeric Data manipulation


Move data items - MOVE
Count and replace data items - INSPECT
Join data items - STRING Split
data items - UNSTRING Initialize
variables - INITIALIZE
Manipulate addresses with pointer data items - SET
Data Movement and Sub-string Handling
Group moves
Elementary moves
Move corresponding
Format conversion for numeric data types
Sub-string operation (Move by reference)

MOVE
MOVE { id-1 TO id-2 ...
lit-1 }
All identifiers can be either group or elementary items.
The data in the sending item is moved into the data item referenced by each identifier-2 in the order in
which it is specified.

Alphanumeric or Alphanume ric-Edited:


An elementary move is one in which the rec eiving item is an element ary item, and the sending item is
an elementary item or a literal. Any necessary conversion of data from one form of internal
representation to another takes place during the move, along with any specified editing in, or deediting implied by, the receiving item.
If the size of the sending item is great er than the size of the receiving item, excess characters on the
right are truncated after the receiving item is filled.
If the sending item has an operational sign, the unsigned value is used. If the operational sign
occupies a separate character, that character is not moved, and the size of the sending item is
considered to be 1 less character than the actual size.

NRI-IT

BILA L AHM ED SHAIK

Page 75 of 148

Cobol

Non-Nu meric Data Manipulation

Numeric or Nume ric-edited:


If the receiving item is signed, the sign of the sending item is placed in the receiving item, with any
necessary sign conversion. If the sending item is unsigned, a positive operational sign is generated
for the receiving item.
If the receiving item is unsigned, the absolute value of the sending item is moved, and no operational
sign is generated for the receiving item.
When the sending item is alphanumeric, the data is moved as if the sending item were described as
an unsigned integer.
When the sending item is floating-point, the data is first converted to either a binary or internal decimal
representation and is then moved.
De-editing allows moving a numeric-edited data item into a numeric or numeric-edited receiver. The
compiler accomplishes this by first establishing the unedited value of the numeric-edited item (this
value can be signed), then moving the unedited numeric value to the receiving numeric or numericedited data item.

MOVE {CORRESPONDING
CORR} id-1 TO id-2
Both identifiers must be group items
Both identifiers following the keyword CORRESPONDING must name group items. In this discussion,
these identifiers are referred to as identifier-1 and identifier-2.
A pair of data items (subordinate items), one from identifier-1 and one from identifier-2, correspond if
the following conditions are true:
In a MOVE statement, at least one of the data items is an elementary item, and the move is permitted
by the move rules.
The subordinate items are not identified by the keyword FILLE R.
Neither identifier-1 nor identifier-2 is described as a level 66, 77, or 88 item, nor is either described as
a USAGE IS INDE X item. Neither identifier-1 nor identifier-2 can be referenc e-modified.
The subordinate items do not include a RE DEFINES, RE NAMES, OCCURS, or USAGE IS INDE X
clause in their descriptions.
However, identifier-1 and identifier-2, they can cont ain or be subordinate to items containing a
REDEFINES or OCCURS clause in their descriptions.
Neither identifier-1 nor identifier-2 nor the two subordinate items are described as USAGE IS
POINTER items.
Identifier-1 and/or identifier-2 can be subordinate to a FILLE R item.
Valid and Invalid Elementary Moves

NRI-IT

BILA L AHM ED SHAIK

Page 76 of 148

Cobol

Sending
Item

Alphabetic
and
SPACE
Alphanume
ric(2)
Alphanume
ric-Edited
Numeric
Integer and
ZERO(5)
Numeric
Noninteger(6)
NumericEdited

Non-Nu meric Data Manipulation

Receiving Ite m
Alpha
Numeric
numeric
Edited
Yes
No

Alphab
etic

Aplhanu
me ric

Numeric Edited

Yes

Yes

Yes

Yes

Yes

Yes(3)

Yes(3)

Yes

Yes

Yes

No

No

No

Yes

Yes

Yes

Yes

No

No

No

Yes

Yes

No

Yes

Yes

Yes

Yes

No

Table 8.2 Valid Sending and Receiving datatypes of move statement


1.

Includes DB CS data items.

2.

Includes nonnumeric literals.

3.

Figurative constants and nonnumeric literals must consist only of numeric characters and will be
treated as numeric integer fields.

4.

Figurative constants and nonnumeric literals must consist only of numeric characters and will be
treated as numeric integer fields. The ALL literal cannot be used as a sending item.

5.

Includes integer numeric literals.

6.

Includes non-integer numeric literals (for ex ample, 3.142).

7.

Includes floating-point literals, external floating-point data items (USA GE DISP LAY), and internal
floating-point data items (USA GE COMP -1 or USAGE COMP-2).

8.

Includes DB CS data-items, DBCS literals, and SPACE.

NRI-IT

BILA L AHM ED SHAIK

Page 77 of 148

Cobol

Non-Nu meric Data Manipulation

Move - Reference modification


Reference modification defines a data item by specifying a leftmost character and optional length for
the data item.
Syntax is
Dataname-1(character position:length)
Leftmost-character-position: - must be an arithmetic expression. The evaluation of leftmostcharacter-position must result in a positive nonzero integer that is less than or equal to the number of
characters in the data item referenced by data-name-1.
length
Must be an arit hmetic expression.
The sum of leftmost-character-position and lengt h minus the value one must be less than
or equal to the number of characters in data-name-1.

If length is omitted, than the length used

will be equal to the number of characters in data-name-1 plus one minus leftmost-characterposition. The evaluation of length must result in a positive nonzero integer.

Example
77 name
pic x(25).
77 first-name pic x(10).
77 last- name pic x(15).
MOVE name(1:10)
MOVE name(11:)

TO first- name
TO last-name

Move - Rules
Pointer and Index variables not allowed
- In MOV E CORR - ignored
Length, Sub-string, Reference modification evaluation
- For source variable only once - before the move to the 1st target variable
- For each target variable before the move
MOVE a(b) TO b, c(b)
Occurs depending on Clause object (ODO) location
- When not in same group
ODO object value decides the length
Set value prior to MOVE

NRI-IT

BILA L AHM ED SHAIK

Page 78 of 148

Cobol

Non-Nu meric Data Manipulation

- When in same group


When no non-subordinat e
When there are non-subordinates
- Updating ODO object with complex structures

INITIALIZE
Sets selected categories of data fields to predet ermined values.
It is functionally equivalent to one or more MOVE
Can be at
- Group level
- Elementary level

INITIALIZE ( id-1
[REPLACING
{ALPHABETIC
ALPHANUMERIC DATA
NUMERIC
ALPHANUMERIC-EDITED
NUMERIC-EDITED }
BY {id-2
lit-1 }] ) ...
When id-1 specifies a group item only those items that belong to the category denoted by the
REPLA CING phrase will be initialized by the value denoted by id-2/lit-1

Example
01 A.
02
02
02
02

A1
A2
A3
A4

PIC
PIC
PIC
PIC

9(5).
X(4).
9(3).
Z(3)9.99.

INITIALIZE A REPLACING NUMERIC DATA BY 50


In the above example on A1 and A3 will be initialized to 50.
INITIALIZE A.
In the above statement A1 and A3 will be initialized to zeroes and A2 and A4 will be
initialized to spaces.
Filler will not be affected by INITIALIZE statements
If any group denoted by id-1 cont ains a data item described with REDEFINES clause, then the data
items sub ordinate to it will not be initialised.

NRI-IT

BILA L AHM ED SHAIK

Page 79 of 148

Cobol

Non-Nu meric Data Manipulation

Example
1

A.
2 A1
PIC 9(5).
02 A2
PIC X(10).
02 B REDEFINES A2.
03 B1
PIC 9(4).
03 B2
PIC 9(4)V99.
INITIALIZE A
In the above example A1 will be zeroes
A2 will be filled with spaces and not zeroes.

INITIALIZE B
This will fill B1 and B2 with zeroes
INITIALIZE - Rules
Category of Id-2 should be compatible that of CORR REPLACING
Whether identifier-1 references an elementary or group item, all operations are performed as if a
series of MOVE statements had been written, each of which had an elementary item as a receiving
field.
Same Category cant be repeated
If the REPLA CING phrase is specified:
If identifier-1 references a group item, any elementary item within the data it em referenced
by identifier-1 is initialized only if it belongs to the category specified in the REPLA CING phrase.
If identifier-1 references an elementary item, that item is initialized only if it belongs to the
category specified in the REP LACING phrase.
All such elementary receiving fields, including all occurrences of
affected, wit h the following

table items within the group, are

exceptions:

Index data items


Data items defined with USAGE IS POINTER
Elementary FILLER data items

NRI-IT

BILA L AHM ED SHAIK

Page 80 of 148

Cobol

Non-Nu meric Data Manipulation


Items that are subordinate to identifier-1 and contain a REDE FINES clause, or any items
subordinate to such an item.

(However, identifier-1 can cont ain a RE DEFINES clause or be

subordinate to a redefining item.)


The areas referenc ed by identifier-1 are initialized in the order (left to right) of the appearance of
identifier-1 in the statement. Within a group receiving field, affected elementary items are initialized in
the order of their definition wit hin the group.
SPACE is implied source for
- Alpha, Alpha-numeric and Alpha-numeric edited
ZE RO is implied source for
- Numeric and Numeric edited
For Group initialize the following will not participate
- Index variables
- Pointer variables
- Filler
- Redefines
- Elementary items that are not of category mentioned in REPLACING

INITIALIZE - Examples
INITIALIZE id-1
Length of Id-1
9(5)
X(5)
99XX9

Before
12345
AB123
12AB3

After
00000
Bbbbb
Bbbbb

INSPECT
Specifies that characters, or groups of characters in a data it em are
to be
- Counted (tallied)
- Replaced
- or both.
It will count the occurrence of a specific character (alphabetic, numeric, or special character) in a data
item.
It will fill all or portions of a data item with specified characters, such as spaces or zeros.
It will convert all occurrences of specific characters in a data item to user-supplied replacement
characters.

NRI-IT

BILA L AHM ED SHAIK

Page 81 of 148

Cobol

Non-Nu meric Data Manipulation


CONVERTING is a special form of replacing
In the following list of comparison rules, the TALLY ING and REPLA CING phrases are the items

being compared:
1.

When both the TALLYING and REPLACING phrases are specified, the INSPECT

statement is executed as if an INSPE CT TALLY ING statement were specified, immediately


followed by an INSPE CT REP LACING statement.
2.

The first comparand is compared wit h an equal number of leftmost contiguous characters

in the inspected item. The comparand matches the inspected characters only if both are equal,
character-for-character.
3.

If no match occurs for the first comparand, the comparison is repeated for each

successive comparand until either a match is found or all comparands have been acted upon.
4.

If a match is found, tallying or replacing takes place, as described in the following

TALLYING/ REPLA CING phrase descriptions. In the inspected item, the first character following
the rightmost matching character is now considered to be in the leftmost character position.

The

process described in rules 2 and 3 is then repeated.


5.

If no match is found, then, in the inspected item, the first character following the leftmost

inspected character is now considered to be in the leftmost character position.

The process

described in rules 2 and 3 is then repeated.


6.

If the CHARA CTE RS phrase is specified, an implied 1-character comparand is used in the

process described in rules 2 and 3.

The implied character is always considered to match the

inspected character in the inspected item.


7.

The actions taken in rules 1 through 6 (defined as the comparison cycle) are repeated until

the rightmost character in the inspected item has either been matched or has been considered as
being in the leftmost character position. Inspection is then terminated.

Format 1
INSPECT id-1
TALLYING
id-2 FOR
{CHARACTER ALL
{id-3 lit-1} LEADING
{id-3 lit-1}}
[{BEFORE
AFTER} INITIAL {id-4 lit-2}]

NRI-IT

BILA L AHM ED SHAIK

Page 82 of 148

Cobol

Non-Nu meric Data Manipulation

INSPECT id-1

Format 2
REPLACING
{CHARACTER ALL
{id-2 lit-1} LEADING
{id-2 lit-1}}

BY {id-3 lit-2}
[{BEFORE
AFTER} INITIAL {id-4 lit-3}]
Format 3
INSPECT id-1
CONVERTING
{id-2 lit-1}
TO
{id-3 lit-2}
[{BEFORE
AFTER} INITIAL {id-4 lit-3}]
INSPECT - Examples
77 countr
PIC 9 VALUE ZERO.
01 data-1
PIC X(6).
INSPECT data-1 TALLYING countr FOR CHARACTERS AFTER INITIAL "S"
REPLACING ALL "A" BY "O"
DATA-1
COUNTR
DATA-1
Before After
After
ANSELM
SACKET
PASSED

3
5
3

ONSELM
SOCKET
POSSED

INSPECT data-1 REPLACING CHARACTERS BY ZEROS BEFORE INITIAL QUOTE.


DATA-1
COUNTR
DATA-1
Before After
After
ANSLM
SACKT

NRI-IT

0
0

000LM
0000T

BILA L AHM ED SHAIK

Page 83 of 148

Cobol

Non-Nu meric Data Manipulation

INSPECT - Examples
INSPECT data-1 CONVERTING abcdefghijklmnopqrstuvwxyz" TO
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
AFTER INITIAL "/" BEFORE INITIAL"?"
Before

After

a/five/?six
r/Rexx/RRRr
zfour?inspe

a/FIVE/?six
r/REXX/RRRR
zfour?inspe

STRING
Strings toget her the partial or complet e contents of two or more data items or literal into one single
data item.
One S TRING statement can be written instead of a series of MOVE statements.
Process is called concatenation

STRING {id-1 lit-1} ...


DELIMITED BY {id-2 lit-2 SIZE}
INTO id-3 [WITH POINTER id-4 ]
[ON OVERFLOW imperative stmt-1]
[NOT ON OVERFLOW
imperative stmt-2]
[END-STRING]
STRING - Example
77
77
77
77

FIELD-1
FIELD-2
FIELD-3
FIELD-4

PIC
PIC
PIC
PIC

X(4)
X(6)
X(9)
X(14)

VALUE
VALUE
VALUE
VALUE

ABCD.
MA IN .
121,34,56.
SPACES.

STRING FIELD-1 FIELD-2 FIELD-3 DELIMITED BY , , INTO FIELD-4


FIELD-4 = ABCDMA121bbbbb

NRI-IT

BILA L AHM ED SHAIK

Page 84 of 148

Cobol

Non-Nu meric Data Manipulation

In the above example, FIELD-1 does not contain any delimiters, all 4 characters are moved to
FIELD-4
First 2 characters of FIELD-2 are moved to FIELD-4 as third character is the delimiter
First 3 characters of FIELD-3 are moved to FIELD-4 as 4th character is the delimiter
STRING - Rules
Receiving fields must not be
- Edited field
- With Justified clause
- With reference modification
Pointer variable must be
- Elementary and Numeric
- Large enough to hold max length of rec eiving field
ON OVE RFLOW executed when pointer Value <= 0 or exceeds max length of receiving field

UNSTRING
Causes contiguous data in a sending field to be separated and placed into multiple receiving
fields:
- Number of characters placed in each receiving field
- Count of the total number of characters transferred
- Special action when all the receiving fields are filled before the end of the sending item
Useful to convert display format dat a to compact form

UNSTRING id-1
[DELIMITED BY ALL {id-2 lit-1}
[OR ALL {id-3 lit-2} ...]]
INTO ( id-4
[DELIMITER IN id-5] [ COUNT IN id-6] ) ...
[WITH POINTER IN id-7 ] [TALLYING IN id-8 ]
[ON OVERFLOW imperative stmt-1]
[NOT ON OVERFLOW
imperative stmt-2]
[END-UNSTRING]

NRI-IT

BILA L AHM ED SHAIK

Page 85 of 148

Cobol

Non-Nu meric Data Manipulation

UNSTRING - Example
FULL-NM = EDISON, THOMAS ALVA
UNSTRING
FULL-NM DELIMITED BY , OR SPACE
INTO LAST-NM COUNT IN LAST-NM-CNT
FIRST-NM COUNT IN FIRST-NM-CNT
MID-NM COUNT IN MID-NM-CNT
LAST-NM = EDISON LAST-NM-CNT = 6
FIRST-NM= THOMAS FIRST-NM-CNT = 6
MID-NM = ALVA
MID-NM-CNT = 4
UNSTRING - Rules
If the DELIMITED BY phrase is not specified, the number of characters examined is equal to the
size of the current data receiving field.
If the POINTE R phrase
- Is not specified an implicit value of 1 is assumed
If specified, the source field is examined from the relative character position specified by the value in
the pointer field.

SET
SET - CONDITION NAME
SET cond- name1 ... TO TRUE
The value associated with a cond-name1 is placed in its conditional variable
If more than one Value is defined for the cond-name1 then the 1st is used
If multiple condition-names are specified, the results are the same as if a separate SE T statement
had been written for each condition-name in the same order in which they are specified in the SET
statement.

SET - Condition Name

NRI-IT

BILA L AHM ED SHAIK

Page 86 of 148

Cobol

Non-Nu meric Data Manipulation

Example
77 I-EOF-FLAG PIC x.
88 C-EOF VALUE Y.
SET C-EOF TO TRUE
(I-EOF-FLAG will have the value Y after the execution of the SET statement)
77 I-ACTION-FLAG PIC X.
88 C-ADD
VALUE A space.
88 C-DEL
VALUE D.
88 C-MOD
VALUE M.
SET C-ADD TO TRUE
(Will get value A - first lit in value clause)
SET - Pointer Data
SET { id-1
ADDRESS OF id-2 } ...
TO { ADDRESS OF identifier-3
id-4
NULL
NULLS }
id-1 and id-4 must be POINTERs
id-2 and id-3 must be 01 or 77 levels in LINKA GE
NULL, NULLS sets the receiving field to cont ain the value of an invalid address.

SET - Pointer data Example


77 PTR-FIRST
USAGE IS POINTER.
LINKAGE SECTION.
01 SALARY-REC.
05 PTR-NEXT-REC POINTER.
05 NAME
PIC X(20).
05 DEPT
PIC 9(4).
05 SALARY
PIC 9(6).
PROCEDURE DIVISION USING SALARY-REC.
SET PTR-FIRST TO ADDRESS OF SALARY-REC
DISPLAY NAME DEPT SALARY
IF PTR-NEXT-REC NOT = NULL
SET ADDRESS OF SALARY-REC
TO PTR-NEXT-REC
END-IF

NRI-IT

BILA L AHM ED SHAIK

Page 87 of 148

Cobol

Non-Nu meric Data Manipulation

SET Indexes
SET index-name-3

UP BY
identifier-3
DOWN BY integer-2

When this form of the SE T statement is executed, the value of the receiving field is increased (UP BY)
or dec reas ed (DOWN BY) by a value that corresponds to the value in the sending field.
The receiving field can be specified by index-name-3. This index-name value both before and after
the SET statement execution must correspond to the occurrence numbers in an associated table.
The sending field can be specified as identifier-3, which must be an elementary integer data item, or
as integer-2, which must be a nonzero int eger.
When the Format 2 SET statement is executed, the contents of the receiving field are inc reased (UP
BY) or decreased (DOWN BY ) by a value that corresponds to the number of occurrences represented
by the value of identifier-3 or integer-2. Receiving fields are acted upon in the left-to-right order in
which they are specified. The value of t he incrementing or dec rementing field at the beginning of SE T
statement execution is used for all receiving fields.

NRI-IT

BILA L AHM ED SHAIK

Page 88 of 148

Cobol

Sub-Program

10. Sub-Program
CALL
Trans fers control from one object program to another within the run unit.
Called program starts executing from:
- Top of program
- ENTRY label (not good programming practice)
Trans fer control methods
- Call nested program
- Static call
- Dynamic call
Parameters to called program:
- By reference
- By content
Use RE TURN-CODE special register to pass return codes
Return of control depends on the termination stmt issued by the called program
- Stop run unit
- Return to called program

CALL { id-1 lit-1} [ USING


{ [BY REFERENCE ]
{ id-2 file- name-1
ADDRESS OF id-3} ...
BY CONTENT
{ [LENGTH OF] id-2
ADDRESS OF id-3
lit-1} ...
} ... ]
[ON {OVERFLOW imperative stmt-1]
EXCEPTION }
[ NOT ON EXCEPTION imperative stmt-2]
[END-CALL]

NRI-IT

BILA L AHM ED SHAIK

Page 89 of 148

Cobol

Sub-Program

CALL - Examples
CALL SUBPGM1.
CALL l-SUBPGM-1 USING
l-PARM1 l-PARM2.
CALL l-SUBPGM1
USING
BY CONTENT
l-PARM1
l-PARM2
BY REFERENCE
l-PARM3.
CALL - Calling pgm

WORKING-STORAGE SECTION.
77 l-subpgm-1 pic x(8) value SUBPGM1.
01 l-parm1.
05 l- name
05 l-emp- no
01 l-parm2.
05 l-salary
05 l- hra
05 l- leave
01 l-parm3.
05 l- gross
05 l-deduct

pic x(30).
pic 9(4).
pic s9(9)v99 comp-3.
pic s9(9)v99 comp-3.
pic s9(2)v9 comp-3.
pic s9(9)v99 comp-3.
pic s9(9)v99 comp-3.

PROCEDURE DIVISION.
....
CALL l-SUBPGM1 USING
BY CONTENT
l-PARM1 l-PARM2
BY REFERENCE l-PARM3.
IDENTIFICATION DIVISION.
PROGRAM-ID. 1-SUBPGM1.

NRI-IT

BILA L AHM ED SHAIK

Page 90 of 148

Cobol

Sub-Program

LINKAGE SECTION.
01 L-PARM3.
05 l- gross
pic s9(9)v99 comp-3.
05 l-deduct pic s9(9)v99 comp-3.
01 L-PARM1.
05 l- name
pic x(30).
05 l-emp- no pic 9(4).
01 L-PARM2.
05 l-salary
pic s9 (9) v99 comp-3.
05 l- hra
pic s9(9)v99 comp-3.
05 l- leave
pic s9(2)v9 comp-3.
PROCEDURE DIVISION USING
L-PARM1 L-PARM2 L-PARM3.

CALL - Rules
The correspondence of identifiers in the usi ng clause of called and calling programs is positional
File-name in using is only for QSAM files
Addre ss of option can be used only for Linkage variables with level 01 or 77
Exception or Overflow cond occurs when the called program cannot be made available.
Called program must not execute a CALL statement that directly or indirectly calls the calling
program (Recursion not allowed)

CANCEL
CANCEL {id-1 lit-1}
Ensures that the next time the referenced subprogram is called it will be ent ered in its initial state.
All programs contained in the Canceled program are also canceled.
Same as executing an E XIT PROGRAM or GOBACK in the called subprogram if it possesses the
INITIAL attrib.

NRI-IT

BILA L AHM ED SHAIK

Page 91 of 148

Cobol

Sub-Program

ENTRY
ENTRY lit-1 [USING id-1 ...]
Establishes an alternate entry point
Execution of the called program begins at the first executable stmt
following the E NTRY stmt whose literal corresponds to the CA LL stmt literal or identifier
Not a recommended way of entering a program

Entry - Watch out


Static calls to alternate entry points work without restriction.
Dynamic calls to alternate ent ry points require:
- NAME or ALIAS linkage editor control statements.
- NAME (ALIAS) compiler option to generate link -edit ALIAS card for each ENTRY statement.

EXIT PROGRAM
EXIT PROGRAM
Specifies the end of a called program and returns control to the calling program
When no CALL statement is active, control passes through t he exit point to the next executable
stmt
When there is no next executable stmt in a called program, an implicit E XIT PROGRAM stmt is
executed
E XIT PROGRAM stmt in a called program with INITIAL attribute is equivalent to executing a
CANCEL
An E XIT PROGRAM ex ecuted in a main program has no effect.

STOP
STOP {RUN
lit-1}
Halts execution of the program :
- Permanently (RUN option)
- Temporarily (Lit-1 option)
literal communicated to operator and execution suspended

NRI-IT

BILA L AHM ED SHAIK

Page 92 of 148

Cobol

Sub-Program

Program execution is resumed only after operator intervention


STOP RUN statement closes all files defined in any of the programs comprising the run
unit.
GOBACK
GOBACK
Functions like:
- E XIT P ROGRAM statement when coded in a called program
- STOP RUN statement when coded in a main program.

END PROGRAM
END PROGRAM program- name .
An END PROGRAM header terminates a nested program or separates one program from another
in a sequence of programs.
The program-name must be same as the program-name declared in the corresponding
PROGRAM-ID paragraph.
An END P ROGRAM is optional for the last program in a sequence only if that program does not
contain any nested source programs.

NRI-IT

BILA L AHM ED SHAIK

Page 93 of 148

11. FILE OPERATIONS


OPEN
OPEN { INPUT file-name1 ...
OUTPUT file-name2 ...
I-O file- name3 ...
EXTEND file-name4 ...

} ...
Opens the file for processing
E XTE ND is allowed only for sequential files (not for VSE)
OUTP UT clears the file of its existing records

Open - File position indicator


The successful execution of OPEN INP UT or OPEN I-O statement sets the file position indicator
to
- 1 for non-empty QSAM file
- For VSAM sequential and indexed files, to the characters with the lowest
ordinal position in the collating sequence associated with the file.
- For VSAM relative files, to 1.

OPEN - Extend Rules


When the E XTEND is specified the file positioned immediat ely after the last record written in the
file
- For ESDS or RRDS file the added records are placed after the last existing
records
- For KSDS your add must have a record key higher than the highest record
in the file

CLOSE
CLOSE file- name1 ...
Closes the open file
Terminates the file processing

COBOL performs automatic closing if not closed


- At termination of run-unit
- CANCEL command
- Return from program with INITIAL attribute

READ
Format-1 - Sequential Read
READ file-name-1 NEXT RECORD
[ INTO identifier-1 ]
[ AT END imperative-stmt-1]
[ NOT AT END imperative-stmt-2 ]
[ END-READ ]
NE XT phrase is optional for SEQUENTIA L access mode & a must for DYNAMIC
When the REA D NE XT statement is the first statement to be executed aft er the OPE N statement
on the file, the next record is the first record in the file
USAGE:1.

The sequential read is used when the exact key value is not known and if we want to

search the vs am file for a particular key for proc essing.


2.

This sequential read is also used when Alternate key is used as key to the indexed file.

This is because the alternate key may not be unique.


3.

When we need to process records with part of the key matching, we use sequential read.

For E.G, The key field of the EMP-MA TE R file is Emp-no, Designation., date-of-joining, if we want
to process all employees belonging to designation Associates, we use sequential read of the
indexed file

Format-2 - Random read


READ file-name-1 RECORD
[ INTO identifier-1 ]
[ KEY IS data-name-1 ]
[ INVALID KEY imperative-stmt-3 ]
[ NOT INVALID KEY imperative-stmt-4 ]
[ END-READ ]
Data-name-1 is either a RECORD KEY or ALTE RNA TE RECORD KEY of the Indexed file

The result of the execution of a READ statement with the INTO phrase

is equivalent to the

application of the following rules in the order specified:


The execution of the same READ statement without the INTO phrase.
The current record is moved from the record area to the area specified by identifier-1 according to
the rules for the MOVE statement without the CORRESPONDING phrase. The size of the current
record is determined by rules specified for the RE CORD clause. If the file description entry contains a
RECORD IS VARY ING clause, the implied move is a group move. The implied MOVE statement does
not occur if the execution of the READ statement was unsuccessful. Any subscripting or reference
modification associated with identifier-1 is evaluated after the record has been read and immediat ely
before it is moved to the data item. The record is available in both the record area and the data item
referenced by identifier-1.
This format of REA D is used when the A CCESS mode is either random or dynamic
USAGE:- The random reading of indexed file is used when the key value for the file is exactly
known. The random read can be used in real time systems like Patient monitoring system in hospitals.
Here there might be necessary to retrieve a particular patients record. The full key value for the
Patient master file is known. Hence we use random read in this case. The random read of indexed file
is faster.

READ Random - Indexed file


Key of reference :
- Data name specified in KEY phrase
- The prime RECORD KEY data name if KEY phrase not specified
The KEY IS phrase can be specified only for indexed files. Data-name-1 must identify a record key
associated with file-name-1
When dynamic access is specified, this key of reference is used for subsequent executions of
sequential REA D
Execution of a Format 2 REA D statement causes the value of the key of reference to be compared
with the value of the corresponding key data item in the file records, until the first record having an
equal value is found. The file position indicator is positioned to this record, which is then made
available. If no rec ord can be so identified, an INVA LID KEY condition exists, and READ statement
execution is unsuccessful.

If the KEY phras e is not specified, the prime RE CORD KEY becomes the key of reference for this
request. When dynamic access is specified, the prime RE CORD KEY is also used as the key of
reference for subsequent executions of sequential READ statements, until a different key of reference
is established.
KEY Phrase: - When the KEY phrase is specified, dat a-name becomes the key of reference for this
request. When dynamic access is specified, this key of reference is used for subsequent executions
of sequential REA D statements, until a different key of reference is established.

READ Random - Relative file


Execution of a Format 2 REA D statement reads the record whose relative record number is
contained in the RELA TIVE KEY data item,
The KEY phrase must not be specified

Multiple Record Processing


If more than one record description entry is associated with file-name-1 in the File Description, these
records automatically share the same storage area; that is, they are implicitly redefined. After a REA D
statement is executed, only those data items within the range of the current record are replaced; data
items stored beyond that range are undefined. The below example illustrat es this concept. If the range of
the current record exceeds the rec ord description entries for file-name-1, the record is truncated on the
right to the maximum size. In either of these cases, the READ statement is successful and an I-O status
(04) is set indicating a rec ord length
Conflict has occurred.

EXAMPLE: The FD entry is:


FD INPUT-FILE LABEL RECORDS OMITTED.
01 RECORD-1 PICTURE X(30).
01 RECORD-2 PICTURE X(20).
Contents of RECORD-1 when READ statement is executed:
ABCDEFGHIJKLMNOPQRSTUVWXYZ1234
When the next record from the file is read into RECORD-2,
Contents of record being read in RECORD-2:
01234567890123456789

But since the record description contains two 01 levels and its a variable length file
Contents of record area after second READ is executed:
01234567890123456789??????????
The last 10 characters of the record area is undefined. I.e. This storage area can hold any
characters depending on the sequence of reads and any process done inside the program using
RECORD-1. In the above example, assume there was no processing then the last 10 bytes would
contain UVWXYZ1234. But this area cannot be accessed, when we use RECORD-2 layout
because this is implicitly redefined item
More on File Position Indicators
The file position indicator is a conceptual entity used to facilitate exact specification of the next
record to be accessed within a given file during certain sequences of input-output operations. Only the
OPEN, CLOSE, READ and S TART statements affect the setting of the file position indicator. The
concept of a file position indicator has no meaning for a file opened in the output or extends mode.
Indicates the next record to be accessed for sequential COBOL requests
You do not specify them anywhere in your program
It is set by successful:
1.

OPEN, START, REA D, and READ NE XT statements

2.

The successful execution of an OPE N INPUT or OPE N I-O statement for sequential files sets
the file position indicator to 1.

3.

Execution of an OPE N INPUT or OPE N I-O statement sets the file position indicat or:

4.

For VSAM sequential and indexed files, to the characters with the lowest ordinal position in the
collating sequence associated with the file.

5.

For VSAM relative files, to 1.


Subsequent READ or REA D NE XT requests then uses & updat es it
It is not used or affected by the output statements :

6.

WRITE, REWRITE, or DELE TE.

If the record is no longer accessible , i.e. it has been deleted, the file position indic ator is updated
to point to the next existing record in the file
The file position indicator has no meaning for random processing

READ - Example
File- Indexed, Dynamic Access
Record Description:
01 ASSOC-REC
05 ASSOC-NO-KEY PIC 9(4).
05 ASSOC-NAME PIC X(10).
Assoc #
Assoc Name
0004
RAJESH
0010
RAMESH
0015
GOPAL
0016
RAGHAVAN
0100
SARITA
0401
RANI

Operation
OPEN input
READ next
READ Key 0100
READ next
READ key 0015
READ key 0090
READ next

File Position Pointer


0004
0010
0401
end of file
0016
Undefined
Undefined

Record Area
Not defined
0004 Rajesh
0100 Sarita
0401 Rani
0015 Gopal
Undefined (Invalid key)
Undefined

Table 11.1 File position indicator example


START
Enables the positioning of the pointer at a specific point in an indexed or relative file
File should be opened in Input or I-O mode
Access mode must be Sequential or Dynamic
Does not read the record

START file- name


[ KEY IS { EQUAL TO
data-name]
=
GREATER THAN
>
NOT LESS THAN
NOT < THAN }
[ INVALID KEY imperative-stmt-1 ]
[ NOT INVALID KEY imperative-stmt-2 ]
[ END-START ]

START - Rules
Invalid Key arises if the record position is empty
When KEY phrase is not specified KEY EQUAL TO primary key is
implied
File position indicator points to the first record in the file whose key
field satisfies the comparison
When the KEY phrase is specified, the file position indicator is
positioned at the logical record in the file whose key field satisfies the comparison.
When the KEY phrase is not specified, KEY IS EQUAL (t o the prime
record key) is implied.
When the S TART statement is executed, a comparison is made
between the current value in the key data-name and the corresponding key field in the file's index.
PROGRAM COLLA TING SEQUENCE clause, if specified, has no
effect
The file position indicator points to the first record in the file whose
key field satisfies the comparison. If the operands in the comparis on are of unequal lengths, the
comparis on proceeds as if the longer field were trunc ated on the right to the length of the shorter field.
All other numeric and nonnumeric comparison rules apply

START
File- Indexed, Dynamic Access
Record Description:
01 ASSOC-REC
05 ASSOC-NO-KEY PIC 9(4).
05 ASSOC-NAME PIC X(10).
Assoc # Assoc Name
0004
RAJESH
0010
RAMESH
0015
GOPAL
0016
RAGHAVAN
0100
SARITA
0401
RANI
OPERATION
OPEN I-O
START ASSOC.NOKEY = 0004
READ NEXT
START ASSOC-NOKEY > 0016
READ NEXT
START ASSOC-NOKEY > 0401

POINTER VALUE
TOP OF FILE
0004

REC-AREA
NOT DEFINED
NOT DEFINED

0010
0100

0004 RAJESH
0004 RAJESH

0401
UNKNOWN

0100 SARITA
0100 SARITA

Table 11.2 Illustration of START state ment


WRITE
WRITE rec-name [FROM id-1]
[ { BEFORE ADVANCING
AFTER }
{ int-1 { LINE
id-2
LINES }
mnemonic- name
PAGE } ]
[AT { END-OF-PAGE stmt-1
EOP }
[NOT AT { END-OF-PAGE stmt-2
EOP } [END-WRITE]

Releases a rec ord onto the output file


ADVANCING phrase is only for Print er Files
when this phrase is specified, the following rules apply:
1. When BEFORE ADVA NCING is specified, the line is printed before the page is advanced.
2. When AFTE R ADVA NCING is specified, the page is advanced before the line is printed.
3. When identifier-2 is specified, the page is advanced the number of lines equal to the current value in
identifier-2. Identifier-2 must name an elementary integer dat a item.
File Position is not affected by this statement
When END-OF-PAGE is specified, and the logical end of the printed page is reached during
execution of the WRITE statement, the END-OF-PAGE imperative-statement is executed

WRITE for Seq. Files


From its Record Area defined at 01 Level
WRITE ASSOC-RE C
First Copy into File Area and then Write
WRITE ASSOC-RE C FROM COPY-REC
Note that File Name is not mentioned in the Write Statement
Facilitates Multiple-Rec ord Type Files also known as Non-Homogeneous Files.
The various 01 levels defined for the same file implicitly redefine each other. That is they share the
same record area. Therefore, in case of Non-Homogeneous Files the Rec ord Layouts must contain a
Record Type Field for identification.
The WRITE statement can only be executed for a sequential file opened in OUTPUT or E XTE ND mode
for a sequential file.

WRITE for Printer Files


Facilities for Paper Movement are provided
- Print and Advance
- Advance and Print
- Position to New Page
- Advance by given number of lines
- End of P age Logic (FD entry for this file must contain a LINAGE clause)
When ADVA NCING option is used
- First char of record reserved for printer control
- If compile has ADV the LRE CL of file should be one more than FD entry record area length
- If compile option is NOA DV then LRE CL of file is same as FD entry record area length
leave the 1st char for printer control

WRITE for Disk Files


WRITE record- name
[ FROM id-1 ]
[ INVALID KEY imperative-stmt-1 ]
[ NOT INVALID KEY
imperative-stmt-2 ]
[ END-WRITE ]
WRITE - Invalid key
Not Allowed for ESDS
Attempt to write beyond file boundary
Record with specified key already present (KS DS, RRDS )
FROM phrase: The result of the execution of the WRITE statement with the FROM identifier-1 phrase is
equivalent to the execution of the following statements in the order specified.
MOVE identifier-1 TO record-name-1.
WRITE record-name-1.

WRITE - Rules for VSAM


When access is sequential
- For KSDS, records must be released in ascending order of RECORD KEY values
Else INVALID KEY condition will be raised
- For RRDS system returns the RE LA TIVE KEY if clause is specified in SELE CT stmt
When access is random or dynamic
- For KSDS populate RE CORD key data item and ALTERNA TE key data item (if any )
- For RRDS populat e the RELA TIVE key data item
When an attempt is made to writ e beyond the externally defined boundaries of the file, the
execution of the WRITE statement is unsuccessful, and an E XCEP TION/ERROR condition exists.
The contents of record-name are unaffected. If specified, the status key is updated, and, if an explicit
or implicit E XCEP TION/E RROR procedure is specified for the file, the procedure is then executed; if
no such procedure is specified, the results are unpredictable.

Before the WRITE statement is executed, you must set the prime record key (the RECORD KEY
data item, as defined in the File-Control ent ry) to the desired value.
If the ALTE RNA TE RECORD KEY clause is also specified in the File-Control entry, each alternate
record key must be unique, unless the DUPLICA TES phrase is specified. If the DUPLICA TES phrase
is specified, alternate record key values may not be unique. In this case, the system stores the
records so that later sequential access to the records allows ret rieval in the same order in whic h they
were stored.
When ACCESS IS SEQUENTIA L is specified in the File-Cont rol entry, records must be released in
ascending order of RE CORD KEY values.

REWRITE
REWRITE record- name
[ FROM id-1]
[ INVALID KEY imperative-stmt-1]
[ NOT INVALID KEY
imperative-stmt-2 ]
[ END-REWRITE ]
Updates an existing record in a file
File should be opened in I-O mode

REWRITE - Invalid Key


When access mode is sequential, and the value of RECORD KEY of the record to be replaced not
= RECORD KEY data item of the last-retrieved rec ord
Value cont ained in RE CORD KEY not = any record in file
Duplicate ALTERNA TE RE CORD KEY when duplicates are not allowed

REWRITE - Rules
File should be opened in I-O
After REWRITE record is not available in the rec area
After a REWRITE statement with the FROM phrase is executed, the information is still available in
identifier-1
File position ind not affected
For Sequential files

- INVALID KEY not allowed


- Record length cant change
For random or dynamic access the record to be rewritten need not be read first

DELETE
DELETE file- name-1 RECORD
[ INVALID KEY imperative-stmt-1]
[ NOT INVALID KEY imperative-stmt-2]
[ END-DELETE ]
Removes a record from an indexed or relative file
For indexed files, the key can then be reused for record addition.
For relative files, the space is then available for a new record with the
same RELA TIVE KEY value.
If the FILE STA TUS claus e is specified in the File-Control entry, the associated status key is updated
when the DE LE TE statement is executed.
The file position indicator is not affected by execution of the DE LE TE statement.
For a file in sequential access mode, the last input/output statement must have been a successfully
executed READ statement. When the DELE TE statement is executed, the system removes the record
retrieved by that READ statement.
For a file in sequential access mode, the INVALID KEY and NOT INVALID KEY phrases must not be
specified. However, an E XCEP TIONERROR procedure can be specified.
When the DELE TE statement is executed, the system removes the record identified by the contents of
the prime RE CORD KEY dat a item for VSAM indexed files, or the RELA TIVE KEY data item for VSAM
relative files. If the file does not contain such a record, an INVA LID KEY condition exists.

DELETE - Rules
File should opened for I-O
In sequential access mode, the last input/output statement must have been a successfully
executed READ

- INVALID key not allowed


For Random or Dynamic access system removes record pointed by the RE CORD key(KS DS) or
RELA TIVE key(RRDS )

SORT
While processing sequential files, it is sometimes necessary that the records should appear in
some predetermined sequence. The proc ess of sequencing records in file in some predetermined
order on some fields is called SORTING
The fields based on which the records are sequenced are called SORT KEYS.
The sequencing can be ascending or descending order of the KEY.

SORT file-1 {ON


{ASCENDING
DESCENDING} KEY id-1... } ...
{USING file-2 {GIVING file-3
This is a simple sort verb that accepts a input file and creates a sorted output file. The Sort verb
needs a work file for sorting the given input file. Hence t his sort requires 3 files for processing
unsorted input file, works file and sorted output file.
In the above format file-1 is the work file , file-2 is the unsorted input file, file-3 is the sorted output
file
File-2 and file-3 are defined in the FD section
The work file File-1 is defined in the file section as SD entry sort description entry
The format of S D entry is same as the FD entry
The sort verb opens input, output and the work files before the sorting begins and closed these
files when sorting is over.
Example
Assume the following record description for the input file

FD
1

EMP-FILE.
EMP-REC.
02
ID-NUM
02
NAME
02
DEPARTMENT
02
BASIC-PAY
02
ALLOWANCE
02
DEDUCTION

PIC 9(6).
PIC X(24).
PIC X(10).
PIC 9(5)V99.
PIC 9(4)V99.
PIC 9(4)V99.

We want to sort this file on DEPARTME NT on ascending sequence and then within each
DEPARTME NT, arrange BAS IC-PAY on descending sequence. This means that the records with same
DEPARTME NT value are to be arranged from highest to lowest value of the BASIC-PAY. The work file
and output files are S ORT-FILE and OUTPUT-FILE. The FD and SD entries for these files are as follows

SD
01

FD
1

SORT-FILE
SORT-REC.
02
FILLER
02
DEPARTMENT
02
BASIC-PAY
02
FILLER
OUTPUT-FILE
OUT-REC

PIC X(30).
PIC X(10).
PIC 9(5)V99.
PIC X(12).
PIC X(59).

The sort statement for this is


SORT SORT-FILE ON ASCENDING KEY DEPARTMENT
DESCENDING KEY BASIC-PAY
USING
EMP-FILE GIVING OUTPUT-FILE.
Sometimes its necessary to edit records before sorting or after sorting before writing it to the output file.
Editing in this context can mean selection of appropriate rec ords from the input file for sorting.
For example, a file with variable length records will require some padding with some characters to make it
fixed length for the purpose of sorting.
The sort verb allows user to specify the INP UT & OUTPUT P ROCEDURE in the sort statement, which
perform the necessary processing of the records.
The input and output proc edures are not hing but sections placed outside the SORT statement.

INPUT PROCEDURE:The sort statement before the start of the sorting process implicitly performs the specified input procedure.
This procedure reads the records from input file, performs the necessary processing and then release the
records to Sorting operation by RELEASE statement which is discussed later in this chapt er

OUTPUT PROCEDURE:The output procedure is performed implicitly by sort statement in order to perform editing on the sorted
records. The output procedure gets the sorted records by means of RE TURN statement that is discussed
later in this chapter.

SORT file-1 { ON
{ASCENDING
DESCENDING} KEY id-1... } ...
[WITH DUPLICATES IN ORDER]
[COLLATING SEQUENCE IS alphabet- name-1]
{USING file-2
INPUT PROCEDURE IS
proc-nm-1 [THRU proc-nm-2]}
{GIVING file-3
OUTPUT PROCEDURE IS
proc-nm-3 [THRU proc-nm-4]}
SORT - Examples
SORT sorted-emp- file
ASCENDING s-last-nm
s-first- nm
DESCENDING s-emp- nbr
USING emp- file
OUTPUT PROCEDURE
write-emp-list THRU
write-emp-list-exit
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT EMP-FILE ASSIGN TO EMPMSTR.
SELECT SORTED-EMP-FILE ASSIGN TO EMPSORT.
SELECT EMP-LIST ASSIGN TO REPORT.
DATA DIVISION.
FILE SECTION.

FD EMP-FILE
LABEL RECORDS ARE OMITTED.
01 EMP-REC.
05 EMP-NBR
PIC 9(4).
05 LAST-NM
PIC X(20).
05 FIRST-NM
PIC X(20).
05 MID-NM
PIC X(20).

SD SORTED-EMP-FILE
LABEL RECORDS ARE OMITTED.
01 SORT-EMP-REC.
05 S-EMP-NBR PIC 9(4).
05 S-LAST-NM PIC X(20).
05 S-FIRST-NM PIC X(20).
05 S-MID-NM
PIC X(20).
PROCEDURE DIVISION.
.....
SORT sorted-emp- file
ASCENDING s-last-nm s- first-nm
DESCENDING s-emp- nbr
USING emp- file
OUTPUT PROCEDURE write-emp- list THRU
write-emp-list-exit
...
WRITE-EMP-LIST.
......
WRITE-EMP-LIST-EXIT.
EXIT.

Collating Sequences
- COLLATING SEQUENCE option of the SORT statement that is defined in SPECIALNAMES paragraph
- PROGRAM COLLATING SEQUENCE if specified in the Configuration Section
- Default is EBCDIC

RELEASE
Transfers records to the initial phase of sort operation
Its like WRITE statement
RELEASE sort-rec-name-1
[FROM id-1]
If INPUT PROCEDURE is used, at- least one RELEASE stmt must be executed
RELEASE - Examples
MOVE
emp-rec
RELEASE sort-emp-rec

TO

sort-emp-rec

RELEASE sort-emp-rec
FROM emp-rec
RETURN
Trans fers records from the final phase of a sorting or merging operation to an OUTP UT
PROCEDURE.
Its like READ statement

RETURN sort-file- name-1


[RECORD INTO id-1]
[AT END imperative stmt1 ]
[NOT AT END imperative stmt2]
[END-RETURN]
RETURN - Rules
If OUTPUT PROCEDURE is used, at- least one RETURN stmt must be executed
RETURN Examples
read-sorted-rec.
RETURN sorted-emp-file
AT END
SET c-sort-eof TO TRUE
END-RETURN
.
read-sorted-rec-exit.
EXIT.

WRITE-EMP-LIST.
SET c-not-sort-eof TO TRUE
PERFORM read-sorted-rec
THRU read-sorted-rec-exit
PERFORM UNTIL c-sort-eof
PERFORM string-emp-name
THRU string-emp-name-exit
MOVE w-emp-name TO rep- name
MOVE s-emp- nbr TO rep-emp-nbr
WRITE emp- list-rec
PERFORM read-sorted-rec
THRU read-sorted-rec-exit
END-PERFORM
.
WRITE-EMP-LIST-EXIT.
EXIT.
MERGE
Sometimes it becomes necessary to create a new output file from 2 input files. These 2 files needs to be
merged and new file needs to be created
For example A Company has its marketing operations divided into 2 zones and for each zone there is file.
Each of these files contains zone name, district name, salesman name, product name and amount of sales
for a particular product. The files are sorted on product name. We need to merge these 2 files into a single
file to get a single transaction file to update the master file.
The MERGE verb is used to merge 2 or more identical files sorted on the same field

MERGE file-1 { ON
{ASCENDING
DESCENDING} KEY id-1... } ...
[COLLATING SEQUENCE IS alphabet-name-1]
USING file-2 [file-3 ...]
{GIVING file-4
OUTPUT PROCEDURE IS
proc-nm-1 [THRU proc-nm-2]}
The input files to be merged through ME RGE statement are file-2, file-3. The file-1 is the work file, which
should be defined in the SD entry. The file-2 and file-3 should be sorted on the key used to
merge these 2 files.

MERGE - Examples
MERGE sorted-emp-ph- file
ASCENDING s-last-nm
s-first- nm
DESCENDING s-emp- nbr
USING emp-ph- file
emp-addon-ph- file
GIVING new-emp-ph- file

MERGE - Rules
When US ING / GIV ING option is specified the input / output file(s) to merge must not be open
The key used in the ME RGE statement cannot be variably located.
When the file referenced by filename-1 is merged control passes to first stmt in the OUTPUT
PROCEDURE.
Collating Sequences
-

COLLA TING

SEQUENCE

option

of

MERGE

statement

SPECIAL-NAMES paragraph
- PROGRAM COLLA TING SEQUENCE specified in the Configuration Section

Default is EBCDIC

that

is

defined

in

INPUT/OUTPUT ERROR HANDLING TECHNIQUES


The following are techniques of intercepting and Handling input/output Errors.
The end-of-file phrase (A T END)
The E XCEP TION/ERROR declarative
The FILE S TA TUS key
The INVALID KEY phrase.

THE END-OF-FILE PHRASE (AT END)


An end-of-file condition may or may not represent an error. In many designs, reading sequentially to the
end of a file is done intentionally, and the A T END condition is expected.
For example, suppose you are processing a file containing transactions in
order to update a master file:

PERFORM UNTIL TRANSACTION-EOF = "TRUE"


READ UPDATE-TRANSACTION-FILE INTO WS-TRANSACTION-RECORD
AT END
DISPLAY "END OF TRANSACTION UPDATE FILE REACHED"
MOVE "TRUE" TO TRANSACTION-EOF
END READ
.
.
.
END-PERFORM
In some cases, however, the condition will reflect an error. You code the A T END phrase of the READ
statement to handle either case, according to your program design.

If you code an A T END phrase, upon end-of-file the phrase is executed. If you do not code an A T END
phrase, the associated E RROR declarative is executed. Following an A T END condition, the contents of
the associated record area are undefined, and attempts to move data to or from the associated rec ord may
result in a protection exception.

EXCEPTION/ERROR Declarative
You can code one or more ERROR declarative procedures in your program that will be given
control if an input/output error occurs. You can have:
A single, common procedure for the entire program
Group procedures for each file open mode (whether INP UT, OUTPUT, I-O, or E XTE ND)
Individual proc edures for each particular file

FILE STATUS key


The system updates the FILE S TA TUS key after each input/output statement executed for a file placing
values in the two digits of the file status key. In general, a zero in the first digit indicates a successful
operation, and a zero in both digits means "nothing abnormal to report". Establish a FILE S TA TUS key
using the FILE S TA TUS clause in the FILE-CONTROL and data definitions in the Data Division.

INVALID KEY phrase


This phrase will be given control in the event that an input/output error occurs because of a faulty index
key. You can include INVALID KEY phrases on REA D, STA RT, WRITE, REWRITE, and DELE TE
requests for index ed and relative files.
You can also include INVA LID KEY on WRITE requests for QSAM files. In the case of QSAM files,
however, the INVA LID KEY phrase has limited meaning. It is used only when you attempt to write to a disk
that is full.
INVA LID KEY phrases differ from E RROR declaratives in three ways:
1.

INVALID KEY phrases operate for only limited types of errors, whereas the ERROR declarative
encompasses all forms.

2.

INVALID KEY phrases are coded directly onto the input/output verb, whereas ERROR declaratives are
coded separately.

3.

INVALID KEY phrases are specific for one single input/output operation, whereas ERROR declaratives
are more general.

If you specify INVALID KEY in a statement that causes an INVA LID KEY condition, control is transferred
to the INVALID KEY imperative statement. In this case, any ERROR declaratives you have coded are not
executed.

Cobol

EXERCISES

EXERCISES
1. Assume there is a Transaction sequential file with record length 80 characters. The following
are the fields in the transaction file
Emp- no
10 chars
Emp- name
30 chars
Emp-birth-date
8 chars(ddmmyyyy)
Emp-designation
8 chars
Emp-department
6 chars
date-of-joining
8 chars
Emp-status
2 chars
Gross-salary
8 numeric with 2 decimal
The master file is the indexed file with the same fields as above.
This transaction file records needs to be inserted in the master indexed file if the emp- no is not
present and if the emp-status id NA (new active). If the records is present and if the emp-status id
is TT the emp record from the master file needs to be deleted as he is an terminated employee. If
the record is present, and the emp status is OA which is old active, the record in the indexed file
needs to be updated.
Write the COBOL code to do the processing of the transaction and master files. COBOL code
includes environment division, data division and procedure division entries.

Cobol

Table Handling

12. Table handling


Sometimes it becomes necessary to handle group of dat a consisting of similar items. Such a group is
called a Table or Array. An array is used to store similar items or elements. For eg. A series of totals in the
working storage with the same format.
A table is a list of stored fields that are looked up or referenced by the program. It also eliminates the need
for separate entries for repeated data items. The usage of tables can be illustrat ed by the following
example
For example when we need to list the months normal way of representing it is

MONTH-TABLE.
02
MON-1
02
MON-2
02
MON-3
02
MON-4
02
MON-5
02
MON-6
02
MON-7
02
MON-8
02
MON-9
02
MON-10
02
MON-11
02
MON-12

PIC X(9)
PIC X(9)
PIC X(9)
PIC X(9)
PIC X(9)
PIC X(9)
PIC X(9)
PIC X(9)
PIC X(9)
PIC X(9)
PIC X(9)
PIC X(9)

VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE
VALUE

JANUARYbb.
FEBRUARYb .
MARCHbbbb.
APRILbbbb.
MAY bbbbbb.
JUNEbbbbbb.
JULYbbbbbb.
AUGUSTbbb.
SEPTEMBER.
OCTOBERbb.
NOVEMBERb.
DECEMBERb.

In the above example, the same data month name is being repeated 12 times. Instead of defining the
elements like this we can define it as a table with 12 elements. Each element of the table can be referred
using a Subscript or an index. Now lets us look at how the table can be defined in COBOL

01

MONTH-TABLE.
02
MON-NAME PIC X(9) OCCURS 12 TIMES.

This table can be fixed length tables and Variable length tables. The tables or Arrays are define using
OCCURS in COBOL. Now lets look at Occurs clause in detail.

Cobol

Table Handling

OCCURS
Used for defining Tables(A rrays)
The OCCURS clause specifies tables whose elements can be referred to by indexing or
subscripting.
It also eliminates the need for separate entries for repeated data items.
Occurs clause can be specified for element ary or group item.
VALUE clause cannot be specified for associated data name defined with OCCURS clause or any
sub item to the occurs clause
REDEFINES and OCCURS clause cannot appear for the same data item. However RE DEFINES
clause can appear for a group item whos e sub item contains occurs clause
The occurs clause is used to define single dimension and multi-dimensional tables.
Tables can be Fixed Length or Variable Lengt h
Cant be defined for a data item which:
- Has a level number of 01, 66, 77, or 88.
- Describes a redefined data item

FIXED LENGTH TABLES


OCCURS integer-2 TIMES
[ {ASCENDING
KEY IS
DESCENDING }
dataname-2 [ ... ] ]
[ INDEXED BY index-name-1 [ ... ] ]

OCCURS - Index Name


In COBOL, INDE XING can do the subscripting of table.
An index can be defined for a particular table or dimension of table using INDE XED BY phrase.
Required if item is indexed anywhere in the program
Conceptually, an index similar to subscript. The internal representation of a subscript and index
are different. A subscript is an int eger data item. But index is referenced in a more efficient manner
internally. INDE X is an offset or displacement of the element from the beginning of the table

Cobol

Table Handling
Example

03 YEAR PIC

9(4)

OCCURS

10 TIMES INDE XE D BY I1.

In the above example the displacement of first element is zero, 2nd is 4, 3rd is 8 and so on. I.e. the
index I1 assumes these values for occurrenc e numbers 1,2,3 and so on.
The value of Index item is set by the occurrence number and not the internal value
The value of index is set using SET clause. The statements like Move or Add cannot be used on
index
Index name is implicitly defined
Index name cannot be associated with any other data hierarchy
Must be initialized before it can be used using SE T and PERFORM VARY ING

VARIABLE LENGTH TABLES


OCCURS - Depending On
When a table of variable size needs to be defined, Occurs Depending clause may be used
E XAMPLE
77 A1
1

PIC

99

P1

PIC

REC-1.
2

02 P2 PIC

XX.

99 OCCURS 1 TO 90 TIMES DEPENDING ON A1.

In this example depending on the value of A1, the size of the table may vary from 1 to 90.
The syntax is

OCCURS int1 TO int2 TIMES


DEPENDING ON data-name-1
[ {ASCENDING
KEY IS
DESCENDING }
dataname-2 [ ... ] ]
[ INDEXED BY index-name-1 [ ... ] ]
Object of the OCCURS DEPENDING ON (ODO) clause cannot be variably located;

Cobol

Table Handling
If subject of OCCURS is defined as E XTE RNA L then ODO ought to be defined as E XTE RNA L
The int-1 and int-2 defined must be positive integers.
The data name-1 can be defined at the same level as ODO but it cannot be defined as sub item to

ODO.

Example
01 REC-1.
02
A1
PIC
99.
02
P1
PIC
XX.
02
P2
PIC
99 OCCURS 1 TO 90 DEPENDING ON A1.
The above example is valid.
01 REC-1.
02
P1
PIC XX.
02
P2
PIC 99 OCCURS 1 TO 90 DEPENDING ON A1.
02
A1
PIC 99.
This definition is invalid
GLOBAL definition needs rules similar to E XTE RNA L
ODO cannot be RE DEFINE D

Example. This is invalid


01 REC-1.
02
A1
02
P1
02
P2
02
P3

PIC 99.
PIC XX.
PIC 99
OCCURS 1 TO 90 TIMES DEPENDING ON A1.
REDEFINES P2

Length of group item containing Occurs depending


- If ODO is outside the group the ODO value decides
- If ODO is inside and group item is sending field then also ODO value decides
- If ODO is inside and group item is receiving field then max lengt h of group value used provided
there are no non-subordinate to the group item

Cobol

Table Handling

SET
SET { id-1
index- name-1 } ...
TO
{ id-2
index- name-2
int-1 }
SET

index-name-1 ...
{ UP
BY
{ id-3
DOWN BY }
int-1 }

SET - Examples
05 TABLE-ITEM OCCURS 10
INDEXED BY INX-A
PIC X (8).
To set the index INX-A to 5th occurrence of TABLE-ITEM use stmt:
SET INX-A TO 5
The Value in INX-A would be
(5 - 1) * 8 = 32.
To refer to 6th element we could use relative indexing
- TABLE-ITEM (INX-A+1)
Or Set the index first using
- SET INX-A UP BY 1 and then refer as TABLE-ITEM(INX-A)

Sending flds
Index Name
Index data ite m
Integer data item
Numeric literal

Index Name
V
V*
V
V

Receiving Fields
Index Data Item Integer Data Item
V*
V
V*
-

Table 12.1 Set - Sending and Receiving Fields

Cobol

Table Handling

Note : * - No Conversion
COMPLEX TABLES
Data item wit h Occurs Depending On is followed by
- Non-subordinate item
- Non-subordinate item with Occurs Depending On
Data item wit h Occurs Depending On is nested

01

FILLER.
05
CTR1
05
CTR2
05
FIELD-A.
1
10
TABLE-1.
15
REC-1 OCCURS 1 TO 5
DEPENDING ON CTR1
10
EMP-NR
2
10
TABLE-2 OCCURS 5
3
INDEXED BY INDX.
4
15
TABLE-ITEM

PIC S99.
PIC S99.

PIC X(3).
PIC X (5).

PIC 99.

5
15
20

REC-2 OCCURS 1 TO 3 DEPENDING ON CTR2.


DATA-NUM
PIC S99.
Complex ODO item

1 - A group item of variable length


2 - An elementary data item following, and not subordinate to, a variable length table (variably
located item)
3 - A group item following, and not subordinate to, a variable-length table
4 - An index name for a table that has variable length elements
5 - An element of a table that has variable-length elements

Cobol

Table Handling

Watch out...
The location of non-subordinate items following the item with OCCURS claus e is affected by new
value of the ODO object.
- If you want to preserve the contents of these items, prior to the change in the ODO object, save
all non subordinate items following the variable item and after the change in the ODO object,
restore all the items back.

Careful when using complex-ODO index names.


- In the ex ample if the value of the ODO object CTR2 is changed then the offset in index INDX is
no longer valid for the table TABLE-2.

To avoid making this error :


- Save the value of index as an occurrence number before changing ODO object.
- After changing ODO object, restore the value of index name from the integer data item

77 INT-DATA-1 PIC 99.


77 NEW-VALUE PIC S99. SET
INT-DATA-1 TO INDX MOVE
NEW-VALUE TO CTR2
SET INDX TO INT-DATA-1
OCCURS - Example
WORKING STORAGE SECTION.
01
TABLE- RECORD.
05
EMP-TABLE OCCURS 100 ASCENDING KEY IS
WAGE-RATE EMP-NO INDEXED BY A, B.
10
EMP-NAME
PIC X (20).
10
EMP-NO
PIC 9(6).
10
WAGE-RATE
PIC 9999V99.
10
WEEK-RECORD OCCURS 52 ASCENDING
KEY IS WEEK-NO INDEXED BY C.
15
WEEK-NO
PIC 99.
15
ABSENCES
PIC 99.
TABLE PROCESSING
Now we have seen how to define tables of various sizes and dimension, we now see how to proc ess these
tables using PE RFORM verb.

Cobol

Table Handling

EXAMPLE: Consider the following example


77
01
1

A1
PRICE-1
DATA-REC.
05
PRODUCT-CODE
05
PRICE-REC OCCURS 36
10
PERIOD
10
PROD-PRICE

PIC 99.
PIC S9 (7) V99.
PIC X (6)
TIMES.
PIC X (10).
PIC S9 (7) V99.

Now we want to find the average price of the product for a period.
MOVE ZERO TO TOTAL.
MOVE 1 TO A1.
PERFORM ADD-PRICE-PARA 36 TIMES.
COMPUTE AVERAGE = TOTAL / 36
ADD-PRICE-PARA.
COMPUTE TOTAL = PROD-PRICE (A1) + TOTAL
ADD 1 TO A1.
This is one form of PERFORM statement used for FIXE D length tables.
Now we want to find the price of a product for period 011999 (mmyyyy)

MOVE 1 TO A1
PERFORM FIND-PRICE-PARA UNTIL
(PERIOD = 011999 OR
A1 > 36)
FIND-PRICE-PARA
IF PERIOD = 011999
MOVE PROD-PRICE (A1)
TO PRICE-1
END-IF
ADD 1 TO A1
In this form, the paragraph is executed repetitively until the period id 011999 or until the subscript of the
table is greater than the maximum table limits.
The same fixed length table can be defined as variable length table.

Cobol

Table Handling

In this case again we want to find the price of a product for period 011999(mmyyyy)

77 PRICE-1
PIC S9 (7) V99.
01 DATA-REC.
05 PRODUCT
PIC X(10).
05 TAB-CNT
PIC S9(04) COMP.
05 DATA-TABLE OCCURS 1 TO 37 TIMES
DEPENDING ON TAB-CNT
INDEXED BY INX-1.
07 PERIOD
PIC X(6).
07 PROD-PRICE
PIC S9(7)V9(02).
PROCEDURE DIVISION.
SET INX-1 TO 1.
PERFORM FIND-PRICE-PARA VARYING INX-1 BY 1 UNTIL
INX-1 > TAB-CNT OR
PERIOD = 011999
FIND-PRICE-PARA
IF PERIOD = 011999
MOVE PROD-PRICE(INX-1)
END-IF

TO PRICE-1

In the above statement the increment of the INDE X is not given explicitly.
It is done automatically.

Either fixed length or variable length the table can be in the sorted order by defining a key for the table.
The sorted table reduces the time of search, when a search is performed on the table.
The example for SORTE D TAB LES

02 ASSOC-DATA OCCURS 10
TIMES ASCENDING KEY IS
A-NAME INDEXED BY INX-1.
05 A-NAME

PIC X(20).

05 A-NUM

PIC 9(04).

The data have to be sorted in the correct order (ascending or descending) by the programmer.

Cobol

Table Handling

SEARCH
To search a table element that satisfies a specified condition
Options
- SEARCH VARY ING
Linear Search
- SEARCH ALL
Binary Search, valid only for sorted tables with key specified.

SEARCH - Sequential
SEARCH id-1
[ VARYING { id-2
index- name-1 } ]
[ AT END imperative-statement-1 ]
WHEN condition-1 { imper-stmt2
NEXT SENTENCE }
[ WHEN condition-2 { imper-stmt3
NEXT SENTENCE } ] ...
[ END-SEARCH ]
This search is serial search or linear search.
The table may sorted or not
WHENs are performed one after another for each table entry until TRUE or NO more WHEN cond
AT END executed if no match
Set starting points of id-2 or index. The inc rement of the index or id-2 is taken care of by the
search statement itself.
The search statement can be performed on he table defined by OCCURS and INDE XE D BY
phrase.
The search verb starts with initial value of index and tests whet her condition stated in the when
clause have been satisfied or not. If none of the conditions are satisfied the index is incremented by 1
automatically. The process is continued until the index value exceeds the size of the table and the
search is terminated. When one of conditions is satisfied before the index value reaches the size of the
table, the statements following the WHEN claus e is executed. If these statements are not present,
then execution is transferred to next statement. The value of the index remains set at the point where
the condition has been satisfied.

Cobol

Table Handling
When the SEARCH terminates without finding the necessary value, the index contains

unpredictable values.

Example
77 NAME
PIC X(20).
05 ASSOC-TABLE OCCURS 350 TIMES
INDEXED BY I-1.
10 ASSOC-NAME
PIC X (20).
10 ASSOC-NUM
PIC 9(4).
SET I-1 TO 1.
SEARCH ASSOC-TABLE
AT END
DISPLAY NAME NOT FOUND
WHEN NAME = ASSOC-NAME (I-1)
DISPLAY NAME FOUND.

Cobol

Table Handling

START

If the value of
index
associated
with id-1 is >
size of the
table

YES

Execute imperat ive


statement-1

Go to
next
executabl
e
statement

NO

Is
condition-1
true?

YES
Execute imperat ive
statement-2

Go to
next
executabl
e
statement

NO

Is
condition2 true?

YES
Execute imperat ive
statement-3

NO
Index associated with
id-1 is incremented by
1

id-2/ index-name-1 is
incremented by 1

Figure 12.1 Flow Chart for SEARCH with Varying and When option

Go to
next
executabl
e
statement

Cobol

Table Handling

SEARCH ALL
SEARCH ALL id-1
[ AT END imperative-statement-1 ]
WHEN { dataname-1= equal-clause
Condition-name-1}
[ AND { dataname-1= equal-clause
Condition-name-1} ] ...
{ imper-stmt2
NEXT SENTENCE }
[ END-SEARCH ]
Equal-clause can be { id-2 lit-1
arithexp-1}
This SEARCH all is the Binary search.
For

this

search

the

table

needs

to

be

in

sorted

order

using

ASCENDING/ DESCE NDING option in occurs clause


When the binary search is used, it is assumed that at the time of search t he
table is arranged in the sorted order depending on the definition of the table.
In this search, the table is split into 2 halves and determines in which half
the item to be searc hed is pres ent. Then item to be searched is compared with
the last item of the first half or first item of the second to determine in which the
item to be searched is likely to be present. Then again the half which is selected
is split into 2 and the comparis on is done to determine in which half the item to
be searched is present. Like wise the search continues until the item to be
searched is found or the final division is just a single item. Now a single
comparis on with this item determines whether the item is present or not.
This type of search minimizes the number of c omparison t hat needs to be
done on the table elements.
Initial setting of index ignored, but if set it must not be greater than the
maximum size
Duplic ate index will indicate the first entry it encountered
Unpredictable results if table is not in sorted order

Cobol

Table Handling

77 NAME
PIC X(20).
05 ASSOC-TABLE OCCURS 350 TIMES
ASCENDING KEY IS A-NAME
INDEXED BY I-1.
10 A-NAME
PIC X(20).
10 A-NUM
PIC 9(4).
SEARCH ALL ASSOC-TABLE
AT END
DISPLAY NAME NOT FOUND
WHEN NAME = A-NAME(I-1)
DISPLAY NAME FOUND

Cobol

Table Handling

MERGE
Combines two or more identically sorted files and makes records available
in merged order

MERGE file-1 { ON
{ASCENDING
DESCENDING} KEY id-1... } ...
[COLLATING SEQUENCE IS alphabet-name-1]
USING file-2 [file-3 ...]
{GIVING file-4
OUTPUT PROCEDURE IS
proc-nm-1 [THRU proc-nm-2]}
MERGE - Examples
MERGE sorted-emp-ph- file
ASCENDING s- last-nm
s-first- nm
DESCENDING s-emp-nbr
USING emp-ph-file
emp-addon-ph- file
GIVING new-emp-ph- file

MERGE - Rules
When US ING / GIVING option is specified the input / output file(s) to merge
must not be open
The key used in the ME RGE statement cannot be variably located.
When the file referenced by filename-1 is merged control passes to first
stmt in the OUTP UT PROCE DURE.
Collating Sequences
-

COLLA TING SEQUENCE option of MERGE statement that is defined in


SPECIAL-NAMES paragraph

- PROGRAM COLLA TING SEQUENCE specified in the Configuration Section

Default is EBCDIC

Cobol

Exercises

EXERCISES
1.

Write the data division statements for the following table.


a. The table contains marks of student for the each month for the whole year. The marks will
be 3 digits.
b. The insurance company maintains the premium paid by the policy holders on a periodic
basis. The period depends on the policy. It can be a monthly, half- yearly, quarterly or
annual premium. The premium is 13 digits with 2 decimal places. Write the table structure
with policy number, period and premium as fields. This is a variable length table

2. How many times will the procedure named PROCESS-ROUTINE be executed by the
following PERFORM statements?
a. PERFORM PROCESS-ROUTINE VARYING A FROM 1 BY 1 UNTIL A = 15.
b. PERFORM PROCESS-ROUTINE VARYING A FROM 1 BY 1 UNITL A > 15.
3. The following are DATA DIVISION entries.
77
I
PIC 99.
77
TOTAL
PIC 99.
1
TABLE-1.
02
FILLER
PIC
X (9) VALUE
IS
123456789.
01
TABLE-2
REDEFINES TABLE-1.
02
A
OCCURS
9
TIMES
PIC 9.
Indicate how many elements of the array A would be added to TOTAL and what will be the final
value of TOTAL when the control goes to PARA-2 in the following program segment?
MOVE ZERO TO TOTAL.
PERFORM PARA-1 VARYING I FROM 1 BY 2 UNTIL I > 9.
GO TO PARA-2
PARA-1.
ADD A (I) TO TOTAL.
PARA-2.
4. A table contains the monthly sales data for 12 months of the year and for the 4 sales zones
where each zone has 8 districts. Write the PROCEDURE DIVISION statements to find the
total sale of each district within each zone and then find the total sale of each zone. Store these
totals in 2 tables - one district total and the other containing the zone totals. Write the Data
division entries to define all these tables.
5. The following is a PROCEDURE DIVISION statement.
PERFORM PARA-AGAIN VARYING I FROM 1 BY 1 UNTIL I > 4
AFTER J FROM 0 BY 1 UNTIL J < -2
AFTER K FROM 1 BY 2 UNTIL K > 8.
How many times is the procedure named PARA-AGAIN executed?
Which data name varied least rapidly and which varied most rapidly.

13. Compiler Directive - COPY

Cobol

Exercises

The COPY statement is a library statement that places prewritten text in a COBOL
program.
Prewritten source program entries can be included in a source program at compile
time. Thus, an installation can use standard file descriptions, record descriptions, or
procedures without re-coding them. These entries and proc edures can then be
saved in user-created libraries; they can then be included in the source program by
means of the COPY statement.
Compilation of the source program containing COPY statements is logically
equivalent to processing all COPY statements before processing the resulting
source program.
The effect of processing a COPY statement is that the library text associated with
text-name is copied into the source program, logic ally replacing the entire COPY
statement, beginning with the word COPY and ending with the period, inclusive.
When the REP LACING phrase is not specified, the library text is copied unchanged
Each COPY statement must be preceded by a space and ended with a separator
period.
A COPY statement can appear in the source program anywhere a character string
or a separat or can appear.

COPY { text-name
lit-1 }
[ { OF
{ lib-name
IN }
lit-2 } ]
[ SUPPRESS ] [ REPLACING
( op-1 BY op-2 ) ... ] .
op-1 and op-2 can be either pseudo-text, an identifier, a literal, or a
COBOL word

(except COPY).

Compile r Directive
COPY Example
01 :TAG:.
02 :TAG:-WEEK
PIC S99.
02 :TAG:- GROSS-PAY PIC 9(5)V99.
02 :TAG:- HOURS
PIC S999
OCCURS 1 TO 52 TIMES DEPENDING ON :TAG:-WEEK OF :TAG:.
COPY PAYLIB REPLACING ==:TAG:== BY ==Payroll==.

Cobol

Co mpiler Directives

01 PAYROLL.
02 PAYROLL-WEEK
PIC S99.
02 PAYROLL-GROSS-PAY PIC S9(5)V99.
02 PAYROLL-HOURS
PIC S999
OCCURS 1 TO 52 TIMES
DEPENDING ON PAYROLL-WEEK OF PAYROLL.
Compile r Directive
COPY - Rules
Copy statement can be nested but
- Cant contain REPLA CING option
Should not cause recursion
If S UPPRESS
- Specified then listing will not contain the statement within the COPY member
- If not then listing will contain the statements with a C after the source program
line number

Cobol

Co mp iler Options

14. Compiler Options


Helps to control the compilation
Specify these options in
- PARM field of the JCL
- CBL or PROCESS statement in program
Most of the options come in pairs
- XREF/NOXREF
Some options have sub-parameters.
- LINECOUNT (44)
Watch out
- There are default options when compiler is installed
Precedence of Compiler Options
- Level 1: (Highest precedence) Installation defaults, fixed by your installation
- Level 2: Those on PROCESS (or CB L) stmt
- Level 3: Those on the JCL PARM
- Level 4: (Lowest precedence) Installation defaults, but not fixed.
Object code generation
- COMP ILE, CMP R2, DE CK, NAME, OBJE CT
Use of virtual storage
- BUFSIZE, SIZE
Object code ex ecution
- ADV, ADW, DATA, DY NAM, FASTS RT, OP TIMIZE, OUTDD, NUMPROC
- RENT, RES IDENT, SSRA NGE, TRUNC, ZWB
Maps, listing, and diagnostics
- DUMP, FLA G, FLAGMIG, FLAGSAA, FLAGS TD, LANGUA GE, LINECOUNT, LIS T, MAP, NUMBER,
OFFSE T, SEQUENCE, SOURCE, SPACE, TE RMINAL, VBREF, XREF
Debugging
- FDUMP, TES T
Literal delimiters
- APOST, QUOTE, DB CS

NRI-IT

BILA L AHM ED SHAIK

Page 134 of 148

Cobol

Co mp iler Options
Reserved word list

- WORD
Processing of COPY ETC..
- LIB
Provision of User Exit
- E XIT
ADV / NOADV
Default is: ADV
ADV has meaning only if you use WRITE . . . ADVANCING in your source code.
With ADV in effect, the compiler adds 1 byte to the record length to account for the printer control
character. Use NOA DV if you have already adjusted your record length to include 1 byte for the printer
control character
CMPR2 / NOCMPR2
Default is: NOCMP R2
Use CMPR2 when you want the compiler to generate code that is compatible wit h code generated by
VS COBOL II Release 2.

Valid COB OL source programs that compiled successfully under VS

COBOL II Release 2 will also compile successfully under IB M COBOL for MVS & VM wit h CMPR2 in
effect and will provide compatible results.
COMP ILE / NOCOMP ILE (W/E/S)
Default is: NOCOMP ILE(S )
Abbreviations are: C / NOC
Use the COMPILE option only if you want to force full compilation even in the presence of serious
errors. All diagnostics and object code will be generated. Do not try to run the object code generated
if the compilation resulted in serious errors--the results could be unpredictable or an abnormal
termination could occur.
DA TA(24/31)
Default is: DATA(31)

Language E nvironment provides services that control the storage used at run time. IBM COBOL for
MVS & VM uses these servic es for all storage requests.
For reent rant programs, the DA TA (24|31) compiler option and the HEAP run-time option control
whet her storage for dynamic data areas (such as WORKING-S TORAGE section and FD record areas)
is obtained from below the 16-megabyte line or from unrestricted storage.

NRI-IT

BILA L AHM ED SHAIK

Page 135 of 148

Cobol

Co mp iler Options

When you specify the run-time option HEAP (BE LOW), the DA TA (24|31) compiler option has no
effect; the storage for all dynamic data areas is allocated from below the 16-megabyte line. However,
with HEAP (A NYWHERE ) as the run-time option, storage for dynamic data areas is allocated from
below the line if you compiled the program wit h the DA TA (24) compiler option or from unrestricted
storage if you compiled with the DA TA (31) compiler option.
Specify the DA TA (24) compiler option for programs running in 31-bit addressing mode that is passing
data parameters to programs in 24-bit addressing mode. This ensures that the data will be
addressable by the called program.- With NORE NT compiler option, DA TA (31) has no effect
DECK / NODECK
Default is: NODECK
Abbreviations are: D / NOD
Use DE CK to produce object code in the form of 80-column card images. If you use the DECK option,
be certain that SYSPUNCH is defined in your JCL for compilation.
- SYSPUNCH ddname must for DE CK opt
DYNAM / NODY NAM Default
is: NODYNAM Abbreviations are:
DYN / NODY N
Use DY NAM to cause separately compiled programs invoked through the CALL literal statement to be
loaded dynamically at run time. DY NAM causes dynamic loads (for CALL) and deletes (for CA NCE L)
of separately compiled programs at object time. Any CALL identifier statements that cannot be
resolved in your program are also handled as dynamic calls.
- DYNAM forced RES IDE NT option

NRI-IT

BILA L AHM ED SHAIK

Page 136 of 148

Cobol

Co mp iler Options
FLAG(x,y) / NOFLA G

Default is: FLAG(I)


Abbreviations are: F / NOF
x :- I, W, E, S, or U
y:- I, W, E, S, or U
Use FLA G (x) to produce diagnostic messages for errors of a severity level x or above at the end of
the source listing. Us e FLAG (x, y) to produce diagnostic messages for errors of severity level x or
above at the end of the source listing, with error messages of severity y and above to be embedded
directly in the source listing. The severity coded for y must not be lower t han the severity coded for x.
To use FLAG (x, y), you must also specify the SOURCE compiler option.
Error messages in the source listing are set off by embedding the statement number in an arrow that
points to the message code. The message code is then followed by the message text
Use NOFLAG to suppress error flagging. NOFLAG will not suppress error messages for compiler
options.
- Control listing of error messages
LIB / NOLIB
- Default is: NOLIB
Abbreviation is: None
If your program uses COPY, BASIS, or REPLA CE statements, you need to specify the LIB compiler
option. In addition, for COPY and BAS IS statements, include in your JCL DD statements for the library
or libraries from which the compiler can take the copied code, and also include a JCL DD statement to
allocate SYSUT5.- Allocate - SYSLIB and SYSUT5 ddnames
LIS T / NOLIS T
Default is: NOLIS T
Use LIS T to produce a listing of the assembler-language expansion of your source code. You will also
get these in your output listing:
Global tables
Literal pools
Information about Working-Storage
Size of the program's Working-Storage and its location in t he object code if the program is
compiled with the NORE NT option
- LIS T and OFFSE T are mut ually exclusive and if both given LIS T ignored

NRI-IT

BILA L AHM ED SHAIK

Page 137 of 148

Cobol

Co mp iler Options
MAP / NOMAP

Default is: NOMAP


Use MAP to produce a listing of the items you defined in the DA TA DIV ISION. Map output includes:
DA TA DIVIS ION map
Global tables
Literal pools
Nested program structure map, and program attributes
Size of the program's Working-Storage and its location in the object code if the program is compiled
with the NORE NT option
By selecting the MAP option, you can also print an embedded MAP report in the source code listing.
The condensed MAP information is printed to the right of data-name definitions in the FILE SECTION,
WORKING-S TORAGE SECTION, and LINKAGE SECTION of the DA TA DIVIS ION.
NUMBE R / NONUMBE R
Default is: NONUMBER
Abbreviations are: NUM / NONUM
Use NUMBER if you have line numbers in your source code and want those numbers to be used in
error messages and MAP, LIS T, and XREF listings.
If you request NUMBER, columns 1 through 6 are checked to make sure that they contain only
numbers, and the sequence is checked according to numeric collating sequence. When a line number
is found to be out of sequence, the compiler assigns to it a line number with a value one number
higher than the line number of the preceding statement. Sequence checking continues with the next
statement, based on the newly assigned value of the previous line.
If you use COPY statements and NUMBE R is in effect, be sure that your source program line numbers
and the COPY member line numbers are coordinated. If you are doing a batch compilation and LIB
and NUMBE R are in effect, all programs in the batch compile will be treated as a single input file. The
sequence numbers of the entire input file must be in ascending order.
Use NONUMBER if you do not have line numbers in your source code, or if you want the compiler to
ignore the line numbers you do have in your source code. With NONUMBE R in effect, the compiler
generates line numbers for your source statements and uses those numbers as references in listings.

NRI-IT

BILA L AHM ED SHAIK

Page 138 of 148

Cobol

Co mp iler Options
NUMP ROC(PFD or NOP FD or MIG)

Default is: NUMPROC(NOPFD)


Use NUMPROC (NOPFD) if you want the compiler to perform invalid sign processing. This option is
not as efficient as NUMP ROC (PFD); object code size will be increased, and there could be an
increase in run-time overhead to validate all signed data.
NUMP ROC (PFD) is a performanc e option that can be used to bypass invalid sign processing. Using
NUMP ROC (PFD) can affect class tests for numeric data
Use NUMP ROC (MIG) to aid in-migrating OS/VS COBOL programs to IBM COBOL for MVS & VM.
When NUMPROC (MIG) is in effect, the following processing occurs:
Preferred signs are created only on the output of MOVE statements and arithmetic
operations.
No explicit sign repair is done on input.
Some implicit sign repair might occur during conversion.
Numeric comparisons are performed by a decimal compare, not a logical compare.
OBJECT / NOOB JECT
Default is: OBJECT
Abbreviations are: OBJ / NOOBJ
Use OBJE CT to place the generated object code on disk or tape to be later used as input for the
linkage editor.
If you specify OBJE CT, include a SYSLIN DD statement in your JCL for compilation.
The only difference between DE CK and OB JE CT is in the routing of the data sets:
DECK output goes to the data set associated with SYSPUNCH ddname.
OBJECT output goes to the data set associated with SYSLIN ddname.
NOOB JECT & TES T - mutually exclusive
OFFSE T / NOOFFSE T
Default is: NOOFFSE T
Abbreviations are: OFF / NOOFF
Use OFFSE T to produce a condensed PROCE DURE DIV IS ION listing. With OFFSE T, the condensed
PROCEDURE DIVIS ION listing will contain line numbers, statement references, and the location of the
first instruction generated for each statement. In addition, the following are produced:
Global tables
Literal pools
Size of the program's Working-Storage, and its location in the object code if the program is
compiled with the NORE NT option.
- OFFSET & LIS T are mutually exclusive.

NRI-IT

BILA L AHM ED SHAIK

Page 139 of 148

Cobol

Co mp iler Options
OPTIMIZE / NOOP TIMIZE

The COBOL optimizer is activated when you use the OP TIMIZE compiler option. The purpose of the
OPTIMIZE compiler option is to do the following:
Eliminate unnecessary transfers of control or simplify inefficient branches, including thos e generated
by the compiler that are not evident from looking at the source program.
Simplify the compiled code for both a PERFORM statement and a CALL statement to a contained
(nested) program. Where possible, the optimizer places the statement inline, eliminating the need for
linkage code.
This optimization, known as procedure integration, is further discussed in "PERFORM Procedure
Integration" If procedure integration cannot be done, the optimizer uses the simplest linkage possible
(perhaps as few as two instructions) to get to and from the called program.
Eliminate duplicate computations (such as subscript computations and repeated statements) that have
no effect on the results of the program.
Eliminate constant computations by performing them when the program is compiled.
Eliminate constant conditional expressions.
Aggregate moves of contiguous items (such as those that often occur with the use of MOVE
CORRESP ONDING) into a single move. Both the source and target must be contiguous for the
moves to be aggregated.
Delete from the program, and identify with a warning message, code that can never be performed
(unreachable code elimination).
The FULL suboption requests that the compilers discard any unreferenced data items from the DA TA
DIV IS ION, and suppress generation of code to initialize these data items to their VALUE clauses.
For unit testing your programs, you might find it easier to debug code that has not been optimized. But
when the program is ready for final test, specify OPTIMIZE, so that the tested code and the production
code are identical. You might also want to use the option during development, if a program is used
frequently without recompilation. However, the overhead for OP TIMIZE might outweigh its benefits if
you re-c ompile frequently, unless you are using the assembler language expansion (LIS T option) to
fine tune your program.
OPTIMIZE & TES T - mutually exclusive
OUTDD(ddname)
- To get run-time DISP LAY output on a data set other than SYSOUT

NRI-IT

BILA L AHM ED SHAIK

Page 140 of 148

Cobol

Co mp iler Options
QUOTE / APOS T Default

is: QUOTE Abbreviations are:


Q / APOST
Use QUOTE if you want the figurative constant [ALL] QUOTE or [ALL] QUOTES to represent one or
more quotation mark (") characters.
Use APOS T if you want the figurative constant [ALL] QUOTE or [ALL] QUOTES to represent one or
more apostrophe (') characters.
Note: Either quotes or apostrophes can be used as literal delimiters, regardless of whether the
APOST or QUOTE option is in effect. The delimiter character used as the opening delimiter for a literal
must be used as the closing delimiter for that literal.
RENT / NORE NT
- object code is to be reentrant
- Have RES IDENT option for all programs in a unit unless the run-time option MIXRES has been
specified.
SOURCE / NOS OURCE
Default is: SOURCE
Abbreviations are: S / NOS
Use SOURCE to get a listing of your source program. This listing will include any statements
embedded by PROCESS or COPY statements.
SOURCE must be specified if you want embedded messages in the source listing.
Use NOS OURCE to suppress the source code from the compiler output listing.
SPACE (1/2/3)
- to select single, double, or triple spacing in your source code listing.
TES T / NOTES T
Default is: NOTES T
Use TES T to produce object code that enables Debug Tool to perform batch and interactive
debugging. The amount of debugging support available depends on which TES T suboptions you use.
The TES T option also allows you to request that symbolic variable be included in t he formatted dump
produced by Language Environment.
Use NOTES T if you do not want to generate object code with debugging information and do not want
the formatted dump to include symbolic variables.
TES T has two suboptions; you can specify both, just one of the suboptions, or neither of the
suboptions:

NRI-IT

BILA L AHM ED SHAIK

Page 141 of 148

Cobol

Co mp iler Options

Hook: - The hook-loc ation suboption controls where compiled-in hooks will be generated to provide
information to the debugger.
NONE: - No hooks will be generated.
BLOCK: - Hooks will be generated at all program entry and exit points.
PATH: - Hooks will be generated at all program entry and exit points and at all path points. A
path point is anywhere in a program where the logic flow is not necessarily sequential or can change.
Some examples of path points are IF-THE N-E LSE constructs, PERFORM loops, ON S IZE ERROR
phrases, and CALL statements.
STMT: - Hooks will be generated at every statement and label, as well as at all program entry
and exit point. In addition, if the DA TEPROC option is in effect, hooks will be generat ed at all date
processing statements.
ALL: - Hooks will be generated at all statements, all path points, and at all program entry and
exit points. In addition, if the DA TEPROC option is in effect, hooks will be generated at all date
processing statements.
Symbol: - The symbol-table suboption controls whether dictionary tables will be generated.
SYM: - Dictionary and calculation tables will be generated.
NOSYM: - Dictionary and calculation tables will not be generat ed.
SSRANGE / NOSS RA NGE
Default is: NOSSRANGE
Abbreviations are: SSR / NOSSR
Use SSRA NGE to generate code that checks if subscripts (including ALL subscripts) or indexes try to
reference an area outside the region of the table. Each subscript or index is not individually checked
for validity; rather, the effective address is checked to ensure that it does not cause a reference
outside the region of the table. Variable-length items will also be checked to ensure that the reference
is within their maximum defined length.
Reference modification expressions will be checked to ensure that:
The reference modification starting position is greater than or equal to 1.
The reference modification starting position is not greater than the current length of the
subject data item.
The reference modification length value (if specified) is greater than or equal to 1.
The reference modification starting position and length value (if specified) do not reference
an area beyond the end of the subject data item.
- Use it while testing

NRI-IT

BILA L AHM ED SHAIK

Page 142 of 148

Cobol

Co mp iler Options
TRUNC (OP T or S TD or BIN)

Default is: TRUNC(S TD)


TRUNC (S TD): -

Use TRUNC(S TD) to cont rol the way arithmetic fields are truncated during MOVE

and arithmetic operations. TRUNC (S TD) applies only to USAGE BINA RY receiving fields in MOVE
statements and arithmetic expressions. When TRUNC (S TD) is in effect, the final result of an
arithmetic expression, or the sending field in the MOVE statement, is truncated to the number of digits
in the PICTURE clause of the B INA RY receiving field.
TRUNC (OP T): - TRUNC (OP T) is a performance option. When TRUNC (OP T) is specified, the
compiler assumes that the data conforms to PICTURE and USAGE specifications of the USAGE
BINA RY receiving fields in MOVE statements and arithmetic expressions. The results are
manipulated in the most optimal way, either truncating to the number of digits in the PICTURE claus e,
or to the size of the binary field in storage (halfword, fullword, or doubleword).
TRUNC (B IN) :-

The TRUNC(BIN) option applies to all COB OL language that processes USAGE

BINA RY data. When TRUNC (B IN) is in effect:


BINA RY receiving fields are trunc ated only at halfword, fullword, or doubleword
boundaries.
BINA RY sending fields are handled as halfwords, fullwords, or doublewords when the
receiver is numeric; TRUNC (B IN) has no effect when the receiver is not numeric.
The full binary content of the field is significant.
DISP LAY will convert the entire content of the binary field, with no truncation.
VBREF / NOVBREF
Default is: NOVBREF
Use VBREF to get a cross-reference among all verb types used in the source program and the line
numbers in which they are used. VBREF also produces a summary of how many times each verb was
used in the program.
Use NOVBREF for more efficient compilation.

NRI-IT

BILA L AHM ED SHAIK

Page 143 of 148

Cobol

Co mp iler Options

WORD(xxxx) / NOWORD
Default is: NOWORD
Abbreviations are: WD / NOWD
xxxx :- Are the ending characters of the name of the reserved word table (IGY Cxxxx) to be used in
your compilation. IGY C are the first 4 standard characters of the name, and xxxx can be 1 to 4
characters in length.
Use WORD(xxxx) to specify that an alternate reserved word table is to be used during compilation.
Alternate reserved word tables provide changes to the IBM-supplied default reserved word table.
XREF(FULL or S HORT) / NOXREF
Default is: NOXRE F
Abbreviations are: X / NOX
You can choose XREF, XREF (FULL), or XREF (S HORT).
Use XREF to get a sort ed cross-reference listing. EBCDIC data-names and procedure-names are
listed in alphanumeric order. DBCS data-names and proc edure-names are listed based on their
physical order in the program, and appear before the EB CDIC data-names and procedure-names,
unless the DB CS XREF installation option is selected wit h a DB CS ordering program. In this case,
DBCS data-names and procedure-names are ordered as specified by the DBCS ordering program.
Also included is a section listing all the program names that are referenced in your program, and the
line number where they are defined. External program names are identified as such.
If you use XREF and SOURCE, cross-reference information will also be printed on the same line as
the original source in the listing. Line number references or other information, will appear on the right
hand side of the listing page. On the right of source lines that reference intrinsic functions, the letters
'IFN' will appear with the line numbers of the location where the function's arguments are defined.
Information included in the embedded references lets you know if an identifier is undefined or defined
more than once. (UND or DUP will be printed); if an item is implicitly defined (IMP), such as special
registers or figurative constants; and if a program name is external (E XT).
If you use XREF and NOSOURCE, you'll get only the sorted cross-reference listing.
XREF (SHORT) will print only the explicitly referenced variables in the cross-reference listing. XREF
(SHORT) applies to DBCS data names and procedure-names as well as EBCDIC names.
NOXREF suppresses this listing.

NRI-IT

BILA L AHM ED SHAIK

Page 144 of 148

Cobol

Co mp iler Options
ZWB / NOZWB

Default is: ZWB


With ZWB, the compiler removes the sign from a signed external decimal (DISP LAY) field when
comparing this field to an alphanumeric elementary field during execution.
If the external decimal item is a scaled item (contains the symbol 'P ' in its PICTURE characterstring), its use in comparisons is not affected by ZWB. Such items always have their sign removed
before the comparison is made to the alphanumeric field.
ZWB affects how the program runs; the same COBOL source program can give different results,
depending on the option setting.
Use NOZWB if you want to test input numeric fields for SPACES.

Compiler option - Coding Example

//COB EXEC PGM=IGYCRCTL,


// PARM='LIST, NOCOMPILE (S), OBJECT'
CBL LIST,NOCOMPILE(S),OBJECT
IDENTIFICATION DIVISION.
PROGRAM-ID. myprog.
PROCESS LIST,NOCOMPILE(S),OBJECT
IDENTIFICATION DIVISION.
PROGRAM-ID. myprog.

NRI-IT

BILA L AHM ED SHAIK

Page 145 of 148

Cobol

APPENDIX 1

APPENDIX 1
FILE STATUS CODES AND MEANING
2 char code
- Status key 1
- Status key 2
Status key 1 tells the type of error
Status key 2 gives the detail
Status key 1
0 - Successful Completion
1 - At end condition
2 - Invalid key condition
3 - Permanent error condition
4 - Logic error
9 - Implementor defined (VSAM)
Successful Completion-0
0 - No further info
1 - Duplicate - Read, (Re) Write
2 - Length error for Fixed files
5 - Optional file not present
At end condition-1
0 - End of file
4 - Relative key > max possible
Invalid Key-2
1 - Ascending key violation/Rewrite change primary Key
2 - Duplicate key when not allowed (Primary, Alternate or relative key)
3 - Record not found
4 - Write beyond boundary
Permanent error-3
0 - no further info
4 - Due to boundary violation
5 - File not available (ddname not found/defined)
7 - Invalid open mode on open
8 - Open of file closed with lock
9 - DCB conflict during open
Logic error-4

NRI-IT

BILA L AHM ED SHAIK

Page 146 of 148

Cobol

APPENDIX 1

1 - Open of file in open status


2 - Close of file not in open stat
3 - Rewrit e or Delete after unsuccessful Read
4 - Rewrit e changed record len or Write record len > max
5 - No position for Read next
7 - Read on file not opened for Input or I-O
8 - Write on file not opened for Output or I-O or Extend
9 - Rewrit e on file not opened for I-O
Implementor def- 9(VSAM)
0 - No further info
1 - Password failure
2 - Logic error
3 - Resource not available
4 - No file position for cmpr2 opt
5 - Invalid/Incomplete file info
6 - No DDname found
7 - Open successful; File verified

NRI-IT

BILA L AHM ED SHAIK

Page 147 of 148

Cobol

References

References
1.
2.
3.
4.

Stern and Stern Structured COBOL Programming


Structured COBOL
COBOL Programming
How to design & develop COBOL programs
VS COBOL II - guide for programmers 2 ed.

- Nancy stern
- Philippakis and Kazmier
- Roy & Dastidar
- Paul N.
- Anne prince

Vous aimerez peut-être aussi