Vous êtes sur la page 1sur 158

Common Business oriented

Language
Sridhar Babu Purama

COBOL
COBOL stands for Common Business Oriented Language.
It is the primary programming language used for developing applications on
Mainframe.
Even today, COBOL is treated as the BEST programming language for
developing business applications.

History of COBOL
In 1950s, Business organizations required a programming language which
can develop application programs to handle their business operations, which
resulted in the development of COBOL programming language.
COBOL was developed in the year 1959.
It was developed by CODASYL (Conference on Data Systems Languages.
CODASYL is a team of Professors and Business men.

COBOL Versions
Standardizing COBOL programming language, many versions of COBOL evaluated.

COBOL Versions :

COBOL 68 (1st Standard COBOL Version Approved by ANSI)

COBOL 74

COBOL 85

COBOL II

VS COBOL

VS COBOL II

Enterprise COBOL (Latest Version used on Mainframe)

In 2002 ,Object oriented COBOL was released which could be


encapsulated objects as normal part of COBOL Programming.

Advantages & Disadvantages of


COBOL
Advantages :
COBOL is a very much English-like Language.

COBOL is first widely used high-level programming Language

It is structured programming language.


It is a free source.
It is platform-independent (Can be run under any OS).
Disadvantages :
.It has a very lengthy coding.
We can use ONLY simple arithmetic operations( + , - , x , / ) and cannot use
for any scientific calculations.

COBOL Program Structure


COBOL Program

DIVISIONS

SECTIONS

PARAGRAPHS
SENTENCES

STATEMENTS

COBOL Program Structure


There are four DIVISIONS in a COBOL program.
1. IDENTIFICATION DIVISION.
2. ENVIRONMENT DIVISION.
3. DATA DIVISION.
4. PROCEDURE DIVISION.

IDENTIFICATION DIVISION
It specifies the program details to the system.
There are no SECTIONS but has the following PARGRAPHS.

IDENTIFICATION DIVISION.
PROGRAM-ID. PROG1.
AUTHOR.
RAMESH. / WIPRO.
DATE-WRITTEN. 25-11-2011.
DATE-COMPILED. 28 NOV 2011.
INSTALLATION.
HDFC.

IDENTIFICATION DIVISION
It specifies the program details to the system.
There are no SECTIONS but has the following PARGRAPHS.

IDENTIFICATION DIVISION.
It specifies the program name.
PROGRAM-ID. PROG1.
AUTHOR.
RAMESH. / WIPRO.
DATE-WRITTEN. 25-11-2011.
DATE-COMPILED. 28 NOV 2011.
INSTALLATION.
HDFC.

IDENTIFICATION DIVISION
It specifies the program details to the system.
There are no SECTIONS but has the following PARGRAPHS.

IDENTIFICATION DIVISION.
PROGRAM-ID. PROG1.
AUTHOR.
RAMESH. / WIPRO.
DATE-WRITTEN. 25-11-2011.
DATE-COMPILED. 28 NOV 2011.
INSTALLATION.
HDFC.

It specifies the coder name who


has written the program.

IDENTIFICATION DIVISION
It specifies the program details to the system.
There are no SECTIONS but has the following PARGRAPHS.

IDENTIFICATION DIVISION.
PROGRAM-ID. PROG1.
AUTHOR.
RAMESH. / WIPRO.
DATE-WRITTEN. 25-11-2011.
DATE-COMPILED. 28 NOV 2011.
INSTALLATION.
HDFC.

It specifies the date on which the program


has been written.

IDENTIFICATION DIVISION
It specifies the program details to the system.
There are no SECTIONS but has the following PARGRAPHS.

IDENTIFICATION DIVISION.
PROGRAM-ID. PROG1.
AUTHOR.
RAMESH. / WIPRO.
DATE-WRITTEN. 25-11-2011.
DATE-COMPILED. 28 NOV 2011.
INSTALLATION.
HDFC.

It specifies the date on which the program


has been compiled.

IDENTIFICATION DIVISION
It specifies the program details to the system.
There are no SECTIONS but has the following PARGRAPHS.

IDENTIFICATION DIVISION.
PROGRAM-ID. PROG1.
AUTHOR.
RAMESH. / WIPRO.
DATE-WRITTEN. 25-11-2011.
DATE-COMPILED. 28 NOV 2011.
INSTALLATION.
HDFC.

It specifies the client name for whom the S/W


program is being developed.

ENVIRONMENT DIVISION
It specifies the system configuration and about the files to be used in the program.
It has two SECTIONS and each SECTION has two PARAGRAPHS. .

ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM 3270.
OBJECT-COMPUTER. IBM 3278.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
I-O-CONTROL.

ENVIRONMENT DIVISION
It specifies the system configuration and about the files to be used in the program.
It has two SECTIONS and each SECTION has two PARAGRAPHS. .

ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM 3270.
OBJECT-COMPUTER. IBM 3278.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
I-O-CONTROL.

It specifies the computer model used for


compilation.

ENVIRONMENT DIVISION
It specifies the system configuration and about the files to be used in the program.
It has two SECTIONS and each SECTION has two PARAGRAPHS. .

ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM 3270.
OBJECT-COMPUTER. IBM 3278.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
I-O-CONTROL.

It specifies the computer model used for


execution.

ENVIRONMENT DIVISION
It specifies the system configuration and about the files to be used in the program.
It has two SECTIONS and each SECTION has two PARAGRAPHS. .

ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM 3270.
OBJECT-COMPUTER. IBM 3278.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
All the files used in the program are declared here.
I-O-CONTROL.

ENVIRONMENT DIVISION
It specifies the system configuration and about the files to be used in the program.
It has two SECTIONS and each SECTION has two PARAGRAPHS. .

ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM 3270.
OBJECT-COMPUTER. IBM 3278.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
I-O-CONTROL.
Checkpoints on file data are set here.

DATA DIVISION
All kinds of field declarations are done here..
It has the following SECTIONS.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
LINKAGE SECTION.
REPORT SECTION.
SCREEN SECTION.

DATA DIVISION
All kinds of field declarations are done here..
It has the following SECTIONS.
DATA DIVISION.
All file related fields are declared here
FILE SECTION.
WORKING-STORAGE SECTION.
LINKAGE SECTION.
REPORT SECTION.
SCREEN SECTION.

DATA DIVISION
All kinds of field declarations are done here..
It has the following SECTIONS.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
LINKAGE SECTION.
REPORT SECTION.
SCREEN SECTION.

All the temporary fields are declared here

DATA DIVISION
All kinds of field declarations are done here..
It has the following SECTIONS.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
LINKAGE SECTION.
Fields used to pass data between programs are declared
REPORT SECTION.
here.
SCREEN SECTION.

DATA DIVISION
All kinds of field declarations are done here..
It has the following SECTIONS.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
LINKAGE SECTION.
REPORT SECTION.
These SECTIONS are no more used.
SCREEN SECTION.

PROCEDURE DIVISION
All COBOL executable statements i.e., Logics i.e., Instructions are written in this
DIVISION. So, execution begins from this DIVISION.
It has no System-defined SECTIONS or PARAGRAPHS.

COBOL Coding Sheet


COBOL coding has to be done in a 80 column sheet as follows.
Column 1 6

=> Sequence Number

Column 1 3

=> Page Number

Column 4 6

=> Line Number

Column 7

=> Special Use


* indicates commenting a line.
- indicates continuation of a string.

/ indicates print from next page.


Column 8 11=> AREA A
(DIVISION, SECTIONS, PARAGRAPHS, Level Numbers)
Column 12 72
=> AREA B
(COBOL Executable Statements)
Column 73 80

=> User Comments

Steps involved in developing a S/W program


1. Design the program logic.
2. Code the program using COBOL programming language.
Eg : IDENTIFICATION DIVISION.
PROGRAM-ID. PROG1.
PROCEDURE DIVISION.
DISPLAY WELCOME TO TALENT WINGS.
STOP RUN.
3. Compile the program using COBOL compiler utility IGYCRCTL.
Compilation is the process of checking syntax errors and converting Source code
(COBOL Program) into Object Module (Machine Language).
4. LINK-EDIT the programs using the utilities IEWL / HEWL.
LINK-EDIT is the process of linking Object Modules of related programs into a
single Executable LOAD MODULE.
5. Test the program by executing the Load Module.

Sample COBOL Program


Write a program to accept Employee Details (EMP-ID, BASIC, HRA, DA, PFF),
calculate the GROSS & NET salaries and display them in the Output.
IDENTIFICATION DIVISION.
PROGRAM-ID. PROG1.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 EMP-DET.
03 EMP-ID PIC X(10).
03 SAL-DET.
05 BASIC
PIC 9(5).
05 HRA
PIC 9(5).
05 DA PIC 9(5).
05 PFF PIC 9(5).
05 GROSS PIC 9(7).
05 NET PIC 9(7).

PROCEDURE DIVISION.
ACCEPT EMP-ID.
ACCEPT BASIC.
ACCEPT HRA.
ACCEPT DA.
ACCEPT PFF.
COMPUTE GROSS = BASIC + HRA + DA + PFF.
COMPUTE NET
= GROSS PFF.
DISPLAY SALARY DETAILS OF EMP-ID.
DISPLAY GROSS SALARY : GROSS.
DISPLAY NET SALARY
: NET.
STOP RUN.

Sample COBOL Program


Write a program to accept Student Details (STUD-ID, SUB1, SUB2, SUB3),
calculate the Total Marks & Percentage and display them in the Output.
IDENTIFICATION DIVISION.
PROGRAM-ID. PROG1.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 STUD-DET..
03 STUD-ID
PIC X(10).
03 MARKS.
05 SUB1
PIC 9(3).
05 SUB2
PIC 9(3).
05 SUB3
PIC 9(3).
05 TOTMKS PIC 9(3).
05 PRCNT PIC 9(3).

PROCEDURE DIVISION.
ACCEPT STUD-ID.
ACCEPT SUB1.
ACCEPT SUB2.
ACCEPT SUB3.
COMPUTE TOTMKS = SUB1 + SUB2 + SUB3.
COMPUTE PRCNT = TOTMKS / 3.
DISPLAY STUDENT DETAILS OF STUD-ID.
DISPLAY TOTAL MARKS : TOTMKS.
DISPLAY PERCENTAGE : PRCNT.
STOP RUN.

Questions
1. COBOL stands for
2. What is COBOL used for?
3. What are the advantages of COBOL?
4. What are the disadvantages of COBOL?
5. What is latest COBOL version used on Mainframe?
6. In which DIVISION, we declare fields?
7. In which SECTION, we declare files?
8. Logics are written in which DIVISION?
9. What is the COBOL compiler utility?
10.What is the LINK-EDIT utility?
11.What is LINK-EDIT?
12.How do we test a program?
13.In COBOL Coding Sheet, what does AREA A signify?
14.In COBOL Coding Sheet, what does AREA B signify?
15.IDENTIFICATION DIVISION has how many SECTIONS?
16.When is ENVIRONMENT DIVISION mandatory?
17.Where do we write COBOL executable statements?
18.Where do you write a COBOL program on Mainframe?
19.How do you compile a COBOL program?
20.How do you execute a COBOL program?

Topics to be covered on
Day3
- Field Declaration
- Level Numbers
- Data Types

Field Declaration
DATA DIVISION.
WORKING-STORAGE SECTION.
01
EMP-NAME
PIC
A (30) VALUE
-------------------------- ---- ----------

Level
Number

Field Name /
Variable Name /
Data Name /
Data Item

PIC
Clause

Data
Type

Data
Length

VALUE
Clause

ABDUL KALAM J.
--------------------------------

Literal

Literal
Literal is a constant data / hard-coded value assigned to a field.
For Alphabetic & Alphanumeric data types, literal must be enclosed within quotes .
For Numeric data types, literal must not be enclosed within quotes.
DATA DIVISION.
WORKING-STORAGE SECTION.
01
EMP-NAME
PIC
A (30) VALUE ABDUL

KALAM

J.

VALUE clause
VALUE clause is used to assign the data statically to a field i.e., before execution (during
compilation).
It is used to reduce the execution time by assigning the data before execution itself.
DATA DIVISION.
WORKING-STORAGE SECTION.
01
EMP-NAME
PIC
A (30) VALUE ABDUL

KALAM

J.

Data Length
It specifies the maximum number of characters that can be assigned to a field.
To store n characters, system allocates n bytes of memory in buffer.
DATA DIVISION.
WORKING-STORAGE SECTION.
01
EMP-NAME
PIC
A (30) VALUE ABDUL

KALAM

J.

Data Type
It is used to control the data entry into the field.
There are three data types in COBOL.
1. A (Alphabetic Data Type)
2. X (Alphanumeric Data Type)
3. 9 (Numeric Data Type)

Data Type
A (Alphabetic data type)

It allows to store only Alphabetic data (A Z).


We can specify a maximum data length of 32767 characters.
Data alignment is Left-Justified.
Default values are SPACES.

Example
DATA DIVISION.
WORKING-STORAGE SECTION.
01
EMP-NAME
PIC
A (30) VALUE ABDUL
1

KALAM

J.

30

ABDUL

KALAM

Data Type
X (Alphanumeric data type)

It allows to store Alphabetic (A Z), Numeric (0 9) and all other special characters.
We can specify a maximum data length of 32767 characters.
Data alignment is Left-Justified.
Default values are SPACES.

Example
DATA DIVISION.
WORKING-STORAGE SECTION.
01
EMP-ADDR
PIC
X (30) VALUE H.NO.717/A, AMEERPET.

H . N O . 7 1 7 / A, AM E E R P E T

Data Type
9 (Numeric data type)

It allows to store only numeric data (0 9).


We can specify a maximum data length of 18 characters.
Data alignment is Right-Justified.
Default values are ZEROES.

Example
DATA DIVISION.
WORKING-STORAGE SECTION.
01
EMP-SAL
PIC
9 (7) VALUE 3500.

0003500

Data Type
V (Assumed Decimal Point)

It is used to store decimal values.


It does not occupy any space for storing decimal point.

Example
DATA DIVISION.
WORKING-STORAGE SECTION.
01
EMP-SAL
PIC
9(7) VALUE 3500.25

0003500

DATA DIVISION.
WORKING-STORAGE SECTION.
01
EMP-SAL
PIC
9(7)V9(4) VALUE 3500.25

00035002500

.25

Note : Data alignment is Right-justified before decimal point and


Left-justified after decimal point.

Data Type
S (Sign)

It is used to store sign value (+ or - ).


It does not occupy any space for storing sign value.

Example
DATA DIVISION.
WORKING-STORAGE SECTION.
01
TEMPR
PIC
9(3) VALUE

12.

DATA DIVISION.
WORKING-STORAGE SECTION.
01
TEMPR
PIC S9(3) VALUE -12.

Data Type
Note : V and S can be used with only numeric data type

PIC Clause
PICTURE clause is used to identify the data type and data length of a field.

01

EMP-NAME

PIC

A (30) VALUE ABDUL

KALAM

J.

Field Name
It is used to identify a specific memory in the buffer.
Rules for defining a field name :
1. Field name can be made of alphabets, numerals, - and national characters ( @, #, $ ).
2. Field name can begin with alphabetic or national character.
3. Field name can be maximum 30 characters long.

Field Declaration
DATA DIVISION.
WORKING-STORAGE SECTION.
01
EMP-NAME
PIC
A (30) VALUE
-------------------------- ---- ----------

Level
Number

Field Name /
Variable Name /
Data Name /
Data Item

PIC
Clause

Data
Type

Data
Length

VALUE
Clause

ABDUL KALAM J.
--------------------------------

Literal

Level Number
It is used to describe the data hierarchy.
We can use level numbers 01 to 49 and special level numbers 66, 77 and 88.

Level Number
Level Numbers 01 to 49 are used as follows :
01 EMP-NAME

PIC A(30)

VALUE ABDUL KALAM J.

EMP-NAME
ABDUL
FN

MN

LN

01 EMP-NAME.
03 FN PIC A(10) VALUE ABDUL.
03 MN PIC A(10) VALUE KALAM.
03 LN PIC A(10) VALUE J.

KALAM

Level Number
Example 2
01 WS-DATE

PIC X(8) VALUE 20110727.


WS-DATE

YYYY

CC

MN

YY

2011 07 27

LN

01 WS-DATE.
02 YYYY.
04 CC
PIC
04 YY
PIC
02 MM
PIC
02 DD PIC X(2)

X(2) VALUE 20.


X(2) VALUE 11.
X(2) VALUE 07.
VALUE 27.

Level Number
Example 3
01 WS-TIME

PIC X(6) VALUE 102030.


WS-TIME

HH

MIN

01 WS-TIME.
04 HH PIC X(2) VALUE 10.
04 MIN
PIC X(2) VALUE 20.
04 SS PIC X(2) VALUE 30.

10 20 30

SS

Level Number
Exercise for you
01 EMP-DET PIC

X(57) VALUE E22

RAM PRASAD K

25000D120110227.

EMP-DET

EMP-ID

FN

EMP-NAME

MN

EMP-SAL

LN

DEPT-ID

EMP-JOIN-DT

YYYY

CC

YY

MM

DD

Level Number
Exercise for you
01 EMP-DET PIC

X(57) VALUE E22

RAM PRASAD K

01 EMP-DET..
05 EMP-ID
PIC X(10) VALUE E22.
05 EMP-NAME.
07 FN
PIC A(2) VALUE RAM.
07 MN
PIC A(2) VALUE PRASAD.
07 LN
PIC A(2) VALUE K.
05 EMP-SAL
PIC 9(5) VALUE 25000.
05 DEPT-ID PIC X(2) VALUE D1.
05 EMP-JOIN-DT.
09 YYYY.
11 CC PIC X(2) VALUE 20.
11 YY PIC X(2) VALUE 11.
09 MM
PIC X(2) VALUE 02.
09 DD
PIC X(2) VALUE 27.

25000D120110227.

Questions
1. In which DIVISION, field declaration is done?
2. Where do you declare file related fields?
3. How do you assign data statically to a field?
4. How do you control the data in a field?
5. What is the maximum data length of a numeric field?
6. How much space V occupies?
7. How is the data alignment in case of decimal declaration?
8. Which level numbers we can use for describing data hierarchy?
9. Is it a valid field name? *EMAIL-ID3 ?
10.What is the importance of PIC clause?
11.Field name can be maximum 32 characters long. True or False?
12.Literal must be specified in quotes for a numeric field. True or False?
13.Where do you write a COBOL program?
14.What is the Compilation JCL?
15.What is the Execution JCL?
16.Where do check output?
17.How do you go to SPOOL?
18.Where do you see the errors in SPOOL?
19.Where do you see the Output in SPOOL?
20.What is Data Length?

Topics to be covered on Day4

ACCEPT Statement
DISPLAY Statement
COMPUTE Statement
Scope Terminator
STOP RUN
MOVE Statement

Sample COBOL Program


Write a program to accept Employee Details (EMP-ID, BASIC, HRA, DA, PFF),
calculate the GROSS & NET salaries and display them in the Output.
IDENTIFICATION DIVISION.
PROGRAM-ID. PROG1.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 EMP-DET.
03 EMP-ID PIC X(10).
03 SAL-DET.
05 BASIC
PIC 9(5).
05 HRA
PIC 9(5).
05 DA PIC 9(5).
05 PFF PIC 9(5).
05 GROSS PIC 9(7).
05 NET PIC 9(7).

PROCEDURE DIVISION.
ACCEPT EMP-ID.
ACCEPT BASIC.
ACCEPT HRA.
ACCEPT DA.
ACCEPT PFF.
COMPUTE GROSS = BASIC + HRA + DA + PFF.
COMPUTE NET
= GROSS PFF.
DISPLAY SALARY DETAILS OF EMP-ID.
DISPLAY GROSS SALARY : GROSS.
DISPLAY NET SALARY
: NET.
STOP RUN.

ACCEPT Statement
ACCEPT Statement is used to dynamically assign data to fields i.e., during
execution.
Each ACCEPT statement can take ONLY one variable value. So, for N values
we need N ACCEPT statements.
It stores the data as Left-Justified irrespective of data types.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 EMP-DET.
03 EMP-ID
PIC X(10).
03 EMP-NAME PIC A(30).
03 EMP-SAL
PIC 9(07).
PROCEDURE DIVISION.
ACCEPT EMP-ID.
ACCEPT EMP-NAME.
ACCEPT EMP-SAL.

E111
RAMU

0020000
SYSIN
E111
RAMU
0020000

DISPLAY Statement
DISPLAY statement is used to show the content of a field or a literal in the
output.
A single DISPLAY statement can display more than one field at a time.
Example :
DATA DIVISION.
WORKING-STORAGE SECTION.
01 EMP-DET.
03 EMP-ID
PIC X(10).
03 EMP-NAME PIC A(30).
03 EMP-SAL
PIC 9(07).
PROCEDURE DIVISION.
ACCEPT EMP-ID.
ACCEPT EMP-NAME.
ACCEPT EMP-SAL.
DISPLAY EMP-ID.
DISPLAY EMP-NAME.
DISPLAY EMP-SAL.
DISPLAY EMP-ID.
DISPLAY EMP-ID : EMP-ID.
DISPLAY EMP-ID, EMP-NAME.
DISPLAY EMP-DET.

E111
RAMU

0020000
SYSIN
E111
RAMU
0020000

SPOOL

E111
RAMU
0020000
EMP-ID

EMP-ID : E111
E111

RAMU

E111

RAMU

0020000

COMPUTE Statement
COMPUTE statement is used to perform all kinds of arithmetic operations.
COMPUTE RES = A + B - C * D / E.
Example
DATA DIVISION.
WORKING-STORAGE SECTION.
01 A PIC 9(2) VALUE 55.
01 B PIC 9(2) VALUE 65.
01 C PIC 9(2).
PROCEDURE DIVISION.
COMPUTE C = A + B
ON SIZE ERROR
DISPLAY DATA TRUNCATED IN C
END-COMPUTE.
ON SIZE ERROR statement executes only when there is data truncation.

Scope Terminator
It is used to terminate a COBOL statement instead of a period.
COMPUTE
------END-COMPUTE.

IF
------END-IF.

EVALUATE
------END-EVALUATE.

READ
------END-READ.

MOVE Statement
Used to copy data from one field to another field or copy a literal to a
field.
Eg : MOVE FIELD1

TO

ABC
Eg : MOVE PQ

FIELD2, FIELD3.

ABC
TO

ABC

FIELD2, FIELD3.

PQ

PQ

There can be only one sending field but there can be more than one
receiving fields.

MOVE Rules
1. 9

2. 9
X
3. A

4. A

5. X

6. X

Possible when only numeric data is moved


otherwise abends with SOC7

7. X

Possible when only alphabetic data is moved


otherwise abends with SOC7

8. 9

SOC7

9. A

SOC7

Types of MOVE Statements


1. Elementary MOVE
2. Group MOVE
3. Corresponding MOVE
4. MOVE Reference Modification

Elementary MOVE
Moving data from one elementary field to another elementary field is
ELEMENTARY MOVE.

Example
01

GRP1.
03 A
03 B
03 C

PIC X(5) VALUE ABC12.


PIC A(4) VALUE PQRS.
PIC 9(3) VALUE 345.

01

GRP2.
03 D
03 E
03 F
03 A

PIC
PIC
PIC
PIC

9(2).
A(3).
X(2).
A(2).

PROCEDURE DIVISION.
MOVE
A
TO D.
MOVE
B
TO E.
MOVE
C
TO F.
MOVE
A OF GRP1 TO A OF GRP2.

Group MOVE
Moving data from one Group to another Group.

Example
01

GRP1.
03 A
03 B
03 C

PIC X(5) VALUE ABC12.


PIC A(4) VALUE PQRS.
PIC 9(3) VALUE 345.

01

GRP2.
03 D
03 E
03 F

PIC 9(2).
PIC A(3).
PIC X(2).

PROCEDURE DIVISION.
MOVE
GRP1
TO GRP2.
ABC12PQRS345

ABC12PQ

Corresponding MOVE
Moving data from one Group to another Group but only to the matching field
names.

Example
01

WS-DATE1.
03 DD
03 HYP1
03 MM
03 HYP2
03 YYYY

01

WS-DATE2.
03 YYYY
PIC 9(4).
03 SLASH1
PIC X(1) VALUE /.
03 DD
PIC 9(2).
03 SLASH2
PIC X(1) VALUE /.
03 MM
PIC X(2).

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

VALUE 23.
X(1) VALUE -.
VALUE 07.
X(1) VALUE -.
X(4) VALUE 2011.

PROCEDURE DIVISION.
MOVE CORRESPONDING WS-DATE1
23-07-2011

TO WS-DATE2.
2011/23/07

MOVE Reference Modification


Moving only a part of a field to a part of another field.

Example
01

WS-DATE1

PIC X(10) VALUE 23-07-2011.

01

WS-DATE2

PIC X(10).

PROCEDURE DIVISION.
MOVE WS-DATE1(1:2)

TO

WS-DATE2(6:2).

MOVE WS-DATE1(4:2)

TO

WS-DATE2(9:2).

MOVE WS-DATE1(7:4)

TO

WS-DATE2(1:4).

MOVE /

TO

WS-DATE2(5:1),

WS-DATE2(8:1).

23
23 07
2011 23 07
2011/23 07
2011/23/07

Questions
1. How do you statically assign data to a field?
2. For fields declared in WORKING-STORAGE SECTION, where is memory
allocated?
3. ACCEPT statement can take more than one variable value?
4. MOVE statement completely moves the data leaving the field blank. True/
False?
5. What is the difference between GROUP and CORRESPONDING MOVE?
6. Can we MOVE an alphanumeric field to a alphabetic field? If so, what
happens?
7. MOVE statement is written in DATA DIVISION. True/ False?
8. What are the types of MOVE statements?
9. DISPLAY can display one one variable at a time?
10.Can we DISPLAY a GROUP?
11.Can we know if data got truncated in COMPUTE statement?
12.What is ON SIZE ERROR statement?
13.What is a SCOPE Terminator?
14.What is MOVE Reference Modification?
15.How do you dynamically assign data to fields?
16.What is SOC7?
17.What is the difference between Error and Abend?
18.Which MOVE rules definitely throw SOC7 abend?
19.What is the data type of a GROUP?
20.Can we move one GROUP to another GROUP when their Elementary fields

PERFORM Statement
PERFORM statement is used for handling looping concept in COBOL i.e., it is used to
execute the statements in a loop.
Types of PERFORM statements
1.

Simple PERFORM

2.

PERFORM Times

3.

PERFORM Until

4.

PERFORM Varying Until

The above PERFORM statements can be coded in two ways :


1.

As INLINE PERFORM

2.

As OUTLINE PERFORM

PERFORM Statement
Difference between INLINE & OUTLINE PERFORM statements
INLINE PERFORM
1. Statements are written
within
PERFORM and
END-PERFORM.
Eg:
PROCEDURE DIVISION.
PERFORM
STMT1
STMT2
END-PERFORM.
STOP RUN.
2. To execute the same
statements again, PERFORM
statement needs to be
explicitly coded again.
3. No periods must be coded
within PERFORM and ENDPERFORM.

OUTLINE PERFORM
1. Statements are written
within
a paragraph.
Eg :
PROCEDURE DIVISION.
PERFORM PARA1.
STOP RUN.
PARA1.
STMT1.
STMT2.
2. Statements coded once in a
paragraph can be executed
any number of times and
anywhere in the program.
3. Periods can be coded within
a paragraph.

Simple PERFORM Statement


It is used to execute the statements only once.
INLINE PERFORM
DATA DIVISION.
WORKING-STORAGE SECTION.
01 A
PIC X(5) VALUE 0.
PROCEDURE DIVISION.
PERFORM
ACCEPT A
DISPLAY A
END-PERFORM.
DISPLAY A.
PERFORM
ACCEPT A
DISPLAY A
END-PERFORM.
STOP RUN.

OUTLINE PERFORM
DATA DIVISION.
WORKING-STORAGE SECTION.
01 A
PIC X(5) VALUE 0.
PROCEDURE DIVISION.
PERFORM PARA1.
DISPLAY A.
PERFORM
PARA1.
STOP RUN.
PARA1.
ACCEPT A.
DISPLAY A.

Simple PERFORM Statement


It is used to execute the statements only once.
INLINE PERFORM

OUTLINE PERFORM

DATA DIVISION.
WORKING-STORAGE SECTION.
01 A
PIC X(5) VALUE 0.
PROCEDURE DIVISION.

DATA DIVISION.
WORKING-STORAGE SECTION.
01 A
PIC X(5) VALUE 0.
PROCEDURE DIVISION.

PERFORM
DISPLAY A
ACCEPT A
END-PERFORM.
DISPLAY A.
PERFORM
DISPLAY A
ACCEPT A
END-PERFORM.
STOP RUN.

PERFORM PARA1.
DISPLAY A.
PERFORM
PARA1.
STOP RUN.
PARA1.
DISPLAY A.
ACCEPT A.

PERFORM Times Statement


It is used to execute the statements for a certain number of times.
PERFORM 3 TIMES
ACCEPT A
DISPLAY A
END-PERFORM.

ACCEPT A
DISPLAY A
ACCEPT A
DISPLAY A
ACCEPT A
DISPLAY A

PERFORM Times Statement


It is used to execute the statements for a certain number of times.
INLINE PERFORM

OUTLINE PERFORM

DATA DIVISION.
WORKING-STORAGE SECTION.
01 A
PIC X(5) VALUE 0.
PROCEDURE DIVISION.
PERFORM 2 TIMES
ACCEPT A
DISPLAY A
END-PERFORM.
ACCEPT A.
PERFORM 3
TIMES
ACCEPT A
DISPLAY A
END-PERFORM.
RUN.

STOP

DATA DIVISION.
WORKING-STORAGE SECTION.
01 A
PIC X(5) VALUE 0.
PROCEDURE DIVISION.
PERFORM PARA1 2 TIMES.
ACCEPT A.
PERFORM PARA1 3 TIMES.
STOP RUN.
PARA1.
ACCEPT A.
DISPLAY A.

PERFORM Until Statement


It is used to execute the statements based on conditions. When the condition is false,
the statements execute and when the condition is true, the control comes our of
PERFORM loop.
INLINE PERFORM
DATA DIVISION.
WORKING-STORAGE SECTION.
01 A
PIC X(5) VALUE 0.
PROCEDURE DIVISION.
PERFORM UNTIL A > 30
ACCEPT A
DISPLAY A
END-PERFORM.
PERFORM UNTIL

ACCEPT A.
A < 30
ACCEPT A

DISPLAY A
PERFORM.

ENDSTOP RUN.

OUTLINE PERFORM
DATA DIVISION.
WORKINGSTORAGE SECTION.
01 A
PIC
X(5) VALUE 0. PROCEDURE DIVISION.
PERFORM PARA1 UNTIL A > 30.
ACCEPT A.
PERFORM
PARA1 UNTIL A < 30.STOP RUN.
PARA1.
ACCEPT A.
DISPLAY A.

PERFORM Until Statement


It is used to execute the statements based on conditions. When the condition is false,
the statements execute and when the condition is true, the control comes our of
PERFORM loop.
INLINE PERFORM
DATA DIVISION.
WORKING-STORAGE SECTION.
01 A
PIC X(5) VALUE 0. 01
PIC 9(1).

OUTLINE PERFORM

DATA DIVISION.
WORKING-STORAGE SECTION.
01 A
PIC X(5) VALUE 0.
PROCEDURE DIVISION.

PROCEDURE DIVISION.
PERFORM PARA1 UNTIL I > 10.
PERFORM UNTIL I > 10
ACCEPT A
DISPLAY A

END-PERFORM.
STOP RUN.

STOP RUN.
PARA1.
ACCEPT A.
DISPLAY A.
ADD +1

TO I.

PERFORM Until Statement


It is used to execute the statements based on conditions. When the condition is false,
the statements execute and when the condition is true, the control comes our of
PERFORM loop.
INLINE PERFORM
DATA DIVISION.
WORKING-STORAGE SECTION.
01 A
PIC X(5) VALUE 0. 01
PIC 9(1).
PROCEDURE DIVISION.
PERFORM UNTIL I > 10
ACCEPT A
DISPLAY A
ADD +1 TO I

OUTLINE PERFORM
DATA DIVISION.
WORKING-STORAGE SECTION.
01 A
PIC X(5) VALUE 0.
PROCEDURE DIVISION.
PERFORM PARA1 UNTIL I > 10.
STOP RUN.
PARA1.
ACCEPT A.
DISPLAY A.
ADD +1

END-PERFORM.
STOP RUN.

TO I.

PERFORM Varying Until


Statement
It is used to execute the statements
based on conditions similar to PERFORM UNTIL
statement.

INLINE PERFORM
PROCEDURE DIVISION.

OUTLINE PERFORM
PROCEDURE DIVISION.

MOVE 1 TO I.
PERFORM UNTIL I > 10
ACCEPT A
DISPLAY A
ADD +1 TO I

MOVE 1 TO I.
PERFORM PARA1 UNTIL I > 10.
STOP RUN.
PARA1.
ACCEPT A.
DISPLAY A.

END-PERFORM.
INLINE PERFORM
STOP
RUN.
PROCEDURE DIVISION.
PERFORM VARYING I FROM 1
BY 1
UNTIL I > 10
ACCEPT A
DISPLAY A
END-PERFORM.
STOP RUN.

ADD +1 TO
I.
OUTLINE
PERFORM
PROCEDURE DIVISION.
PERFORM PARA1 VARYING I FROM 1
BY 1
UNTIL I > 10.
STOP RUN.
PARA1.
ACCEPT
A.
DISPLAY A.

Topics to be covered on
Day6

Introduction to File Programming


- Data organization in files

- Steps involved in using files in a COBOL program


- Sample COBOL programs using files

Data Organization in Files


A PS dataset is usually termed as a FILE.
PS dataset has no partitions and so Directory blocks must always be zero.
A FILE is a collection of RECORDS.
A RECORD is a collection of FIELDS.
A FIELD is a collection of characters.

ACCT-FILE
A123
A124
A125
A126

RAMU
SOMU
SOMU
SOMU

10000
20000
30000
25000

HYD
CHE
HYD
MUM

Steps involved in using files in a COBOL


program
1.
2.
3.
4.
5.

Declaring the files.


Declaring the record structures for each file.
Opening the files.
Processing the file data.
Closing the files.

Declaring files
Files to be used in the program must be declared as follows :
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT
EMP-FILE1
SELECT
EMP-FILE2

Logical filename

ASSIGN TO DISK1.
ASSIGN TO DISK2.

Physical Hardware Device Name /


Physical File name

Declaring the record structures


Record structures are declared as follows :
DATA DIVISION.
FILE SECTION.
FD EMP-FILE1.
01 EMP-REC1.
03 EMP-ID
03 EMP-NAME
03 SAL-DET.
05 BASIC
05 HRA
05 DA
05 PFF
05 GROSS
05 NET
FD EMP-FILE2.
01 EMP-REC2

PIC

X(10).
PIC
A(30).

PIC
PIC
PIC
PIC

9(05).
9(05).
9(05).
9(05).
PIC
9(07).
PIC
9(07).
PIC

X(74).

Opening the files


OPEN statement is used to make the files available for the programs access.
PROCEDURE DIVISION.
OPEN
INPUT
EMP-FILE1.
OPEN
OUTPUT EMP-FILE2.
OPEN
I-O
EMP-FILE3.
OPEN
OUTPUT EMP-FILE4.
OPEN MODES specify the type of access on the file data.

OPEN MODES
OPEN MODES specify the type of access on the file data.
INPUT Mode allows to just read the file data.
File must be an existing one.
More than one program (user) can access the same file in INPUT mode.
OUTPUT Mode allows to write new data into files.
File can be a new one or an existing one.
Only one program (user) can access the file in OUTPUT mode.
I-O Mode allows to read & modify existing data and write new data into files.
File must be an existing one.
Only one program (user) can access the file in I-O mode.
EXTEND Mode allows to write new data into files which is appended.
File can be a new one or an existing one.
Only one program (user) can access the file in EXTEND mode.
Note : When WRITE operation is used on a file used in OUTPUT or I-O mode, the
new record written will replace all records. In case of EXTEND mode, the records
are added to existing records.

Processing the file data


We can process the file data using the OPERATIONS
- READ, WRITE and REWRITE.
READ Statement

: It allows to retrieve records from file.

WRITE Statement

: It allows to save a new record into the file.

REWRITE Statement

: It allows to save the modified record into the file.

READ Statement
READ statement is used to retrieve a single record from the file.
Syntax :
READ EMP-FILE1
AT END
ST1
ST2
NOT AT END
ST3
ST4
END-READ.

It is executed when it is unable to retrieve


records
It is executed when it retrieves a record

Example : Suppose for N records in a file, NOT AT END is executed N times and AT END
is executed 1 time i.e., for (N+1)th time. So, READ statement is executed N+1 times.

Write Statement
It is used to save a new record data into the file permanently.
Example :
DATA DIVISION.
FILE SECTION.
FD EMP-FILE1.
01 EMP-REC1
FD EMP-FILE2.
01 EMP-REC2

PIC X(74).
PIC X(74).

PROCEDURE DIVISION.
OPEN INPUT EMP-FILE1.
OPEN OUTUT EMP-FILE2.
READ EMP-FILE1
AT END
ST1
NOT AT END
MOVE EMP-REC1
WRITE EMP-REC2
END-READ.

TO EMP-REC2

Rewrite Statement
It is used to save a modified record data into the file permanently.
Example :
DATA DIVISION.
FILE SECTION.
FD EMP-FILE1.
01 EMP-REC1.
03 EMP-ID PIC X(10).
03 EMP-NAME PIC A(30).
03 EMP-SAL
PIC 9(05).
PROCEDURE DIVISION.
OPEN I-O EMP-FILE1.
READ EMP-FILE1
AT END
ST1
NOT AT END
ADD 1000 TO EMP-SAL
REWRITE EMP-REC1
END-READ.

Closing Files
CLOSE statement is used to terminate the program access on the file data.
CLOSE EMP-FILE1, EMP-FILE2, EMP-FILE3.
CLOSE EMP-FILE4.

Sample Program
Write a program to accept EMP Details and save them in the Output?
IDENTIFICATION DIVISION.
PROGRAM-ID. FLPROG1.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT EMP-FILE1 ASSIGN TO DISK1.
DATA DIVISION.
FILE SECTION.
FD EMP-FILE1.
01 EMP-REC1.
03 EMP-ID
PIC X(10).
03 SAL-DET.
05 BASIC
PIC 9(05).
05 HRA
PIC 9(05).
05 DA
PIC 9(05).
05 PFF
PIC 9(05).

PROCEDURE DIVISION.
OPEN EXTEND EMP-FILE1.
ACCEPT EMP-ID.
ACCEPT BASIC.
ACCEPT HRA.
ACCEPT DA.
ACCEPT PFF.
WRITE EMP-REC1.
CLOSE EMP-FILE1.
STOP RUN.

Sample Program
Write a program to accept EMP Details, calculate GROSS & NET and save them in the
Output?
IDENTIFICATION DIVISION.
PROGRAM-ID. FLPROG1.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT EMP-FILE1 ASSIGN TO DISK1.
DATA DIVISION.
FILE SECTION.
FD EMP-FILE1.
01 EMP-REC1.
03 EMP-ID
PIC X(10).
03 SAL-DET.
05 BASIC
PIC 9(05).
05 HRA
PIC 9(05).
05 DA
PIC 9(05).
05 PFF
PIC 9(05).
05 GROSS
PIC 9(05).
05 NET
PIC 9(05).

PROCEDURE DIVISION.
OPEN EXTEND EMP-FILE1.
ACCEPT EMP-ID.
ACCEPT BASIC.
ACCEPT HRA.
ACCEPT DA.
ACCEPT PFF.
COMPUTE GROSS = BASIC + HRA + DA + PFF.
COMPUTE NET = GROSS PFF.
WRITE EMP-REC1.
CLOSE EMP-FILE1.
STOP RUN.

Sample Program
Write a program to copy all records from EMP-FILE1 to EMP-FILE2?
IDENTIFICATION DIVISION.
PROGRAM-ID. FLPROG1.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT EMP-FILE1 ASSIGN TO DISK1.
SELECT EMP-FILE2 ASSIGN TO DISK2.
DATA DIVISION.
FILE SECTION.
FD EMP-FILE1.
01 EMP-REC1
PIC X(74).
FD EMP-FILE2.
01 EMP-REC2
PIC X(74).
WORKING-STORAGE SECTION.
01 WS-EOF1
PIC X(1) VALUE N.

PROCEDURE DIVISION.
OPEN INPUT EMP-FILE1.
OPEN OUTPUT EMP-FILE2.
PERFORM UNTIL WS-EOF1 = Y
READ EMP-FILE1
AT END
MOVE Y TO WS-EOF1
NOT AT END
MOVE EMP-REC1 TO EMP-REC2
WRITE EMP-REC2
END-READ
END-PERFORM.
CLOSE EMP-FILE1, EMP-FILE2.
STOP RUN.

Sample Program
Write a program to copy all records from EMP-FILE1 to EMP-FILE2 & EMP-FILE3?
IDENTIFICATION DIVISION.
PROGRAM-ID. FLPROG1.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT EMP-FILE1 ASSIGN TO DISK1.
SELECT EMP-FILE2 ASSIGN TO DISK2.
SELECT EMP-FILE3 ASSIGN TO DISK3.
DATA DIVISION.
FILE SECTION.
FD EMP-FILE1.
01 EMP-REC1
FD EMP-FILE2.
01 EMP-REC2
FD EMP-FILE3.
01 EMP-REC3

PIC

X(74).

PIC

X(74).

PIC

X(74).

WORKING-STORAGE SECTION.
01 WS-EOF1
PIC X(1) VALUE N.

PROCEDURE DIVISION.
OPEN INPUT EMP-FILE1.
OPEN OUTPUT EMP-FILE2, EMP-FILE3.
PERFORM UNTIL WS-EOF1 = Y
READ EMP-FILE1
AT END
MOVE Y TO WS-EOF1
NOT AT END
MOVE EMP-REC1 TO EMP-REC2
WRITE EMP-REC2
MOVE EMP-REC1 TO EMP-REC3
WRITE EMP-REC3
END-READ
END-PERFORM.
CLOSE EMP-FILE1, EMP-FILE2, EMP-FILE3.
STOP RUN.

Sample Program
Write a program to copy all records from EMP-FILE1 & EMP-FILE2 into EMP-FILE3?
IDENTIFICATION DIVISION.
PROGRAM-ID. FLPROG1.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT EMP-FILE1 ASSIGN TO DISK1.
SELECT EMP-FILE2 ASSIGN TO DISK2.
SELECT EMP-FILE3 ASSIGN TO DISK3.
DATA DIVISION.
FILE SECTION.
FD EMP-FILE1.
01 EMP-REC1
FD EMP-FILE2.
01 EMP-REC2
FD EMP-FILE3.
01 EMP-REC3

PIC

X(74).

PIC

X(74).

PIC

X(74).

WORKING-STORAGE SECTION.
01 WS-EOF1
PIC X(1) VALUE N.
01 WS-EOF2
PIC X(1) VALUE N.

PROCEDURE DIVISION.
OPEN INPUT EMP-FILE1, EMP-FILE2.
OPEN OUTPUT EMP-FILE3.
PERFORM UNTIL WS-EOF1 = Y
READ EMP-FILE1
AT END
MOVE Y TO WS-EOF1
NOT AT END
MOVE EMP-REC1 TO EMP-REC3
WRITE EMP-REC3
END-READ
END-PERFORM.
PERFORM UNTIL WS-EOF2 = Y
READ EMP-FILE2
AT END
MOVE Y TO WS-EOF2
NOT AT END
MOVE EMP-REC2 TO EMP-REC3
WRITE EMP-REC3
END-READ
END-PERFORM.
CLOSE EMP-FILE1, EMP-FILE2, EMP-FILE3.
STOP RUN.

Write a program to copy all records from EMP-FILE1 & EMP-FILE2 into EMPFILE3?
IDENTIFICATION DIVISION.
PROGRAM-ID. FLPROG1.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT EMP-FILE1 ASSIGN TO DISK1.
SELECT EMP-FILE2 ASSIGN TO DISK2.
SELECT EMP-FILE3 ASSIGN TO DISK3.
DATA DIVISION.
FILE SECTION.
FD EMP-FILE1.
01 EMP-REC1
FD EMP-FILE2.
01 EMP-REC2
FD EMP-FILE3.
01 EMP-REC3

PIC

X(74).

PIC

X(74).

PIC

X(74).

WORKING-STORAGE SECTION.
01 WS-EOF1
PIC X(1) VALUE N.
01 WS-EOF2
PIC X(1) VALUE N.

PROCEDURE DIVISION.
0000-MAIN-PARA.
PERFORM 1000-INITIALIZE-PARA.
PERFORM 2000-READ-FILE1.
PERFORM 3000-PROCESS-PARA UNTIL WS-EOF1 = Y.
PERFORM 2500-READ-FILE2.
PERFORM 3500-PROCESS-PARA UNTIL WS-EOF2 = Y.
PERFORM 9000-CLOSE-PARA.
STOP RUN.
1000-INTIALIZE-PARA.
OPEN INPUT EMP-FILE1, EMP-FILE2.
OPEN OUTPUT EMP-FILE3.
2000-READ-FILE1.
READ FILE1
AT END MOVE Y TO WS-EOF1.
3000-PROCESS-PARA.
MOVE EMP-REC1 TO EMP-REC3.
WRITE EMP-REC3.
PERFORM 2000-READ-FILE1.
2500-READ-FILE2.
READ FILE2
AT END MOVE Y TO WS-EOF2.
3500-PROCESS-PARA.
MOVE EMP-REC2 TO EMP-REC3.
WRITE EMP-REC3.
PERFORM 2500-READ-FILE2.
9000-CLOSE-PARA.
CLOSE EMP-FILE1, EMP-FILE2, EMP-FILE3.

Questions
1.
2.
3.
4.
5.
6.

Files are declared in which DIVISION?


Why do we OPEN files?
What type of dataset is a file?
How do you retrieve records from a file?
To retrieve N records, how many times READ statement must be executed?
If we do not know how many records are there, then how do we process all
records?
7. How many Input files can be used in a program?
8. Which OPEN MODE allows multiple users to use the file simultaneously?
9. Which OPEN MODEs allow to write new records?
10.What happens when CLOSE statement executes?
11.Where do we declare Record Structure?
12.Record structure can hold how many records at a time?
13.Program can process how many records at a time?
14.Where is the memory allocated for a record structure?
15.What does a WRITE statement do?
16.In which mode we can use REWRITE?
17.What is the difference between OUTPUT and EXTEND modes?
18.Which is the first statement that talks about a file?
19.What are the steps involved in using files in a COBOL program?
20.What is a logical file name?

Topics to be covered on
Day7

File Programming

- IF Statement
- EVALUATE Statement
- COBOL programs using files
(Matching Logic)

IF Statement
IF Statement is used to conditionally execute the statements.
When the condition specified is true, the statements execute.
Syntax :
IF < COND1 >
ST1
ST2
END-IF.
Nested IF ELSE statement :
Syntax :
IF < COND1 >
ST1
ST2
ELSE
IF < COND2 >
ST3
ST4
ELSE
ST5
END-IF
END-IF.

When Condition is true, IF statement executes


When Condition is false, ELSE part executes

Example :
PROCEDURE DIVISION.
ACCEPT STUD-PRCNT.
IF STUD-PRCNT >= 60 AND STUD-PRCNT <= 100
DISPLAY FIRST DIVISION
ELSE
IF STUD-PRCNT >= 50 AND STUD-PRCNT < 60
DISPLAY SECOND DIVISION
ELSE
IF STUD-PRCNT >= 35 AND STUD-PRCNT < 50
DISPLAY THIRD DIVISION
ELSE
DISPLAY FAIL
END-IF
END-IF
END-IF.

PROCEDURE DIVISION.
ACCEPT STUD-PRCNT.
EVALUATE STUD-PRCNT
WHEN 60
THRU
100
DISPLAY FIRST DIVISION
WHEN 50
THRU
59
DISPLAY SECOND DIVISION
WHEN 35
THROUGH 49
DISPLAY THIRD DIVISION
WHEN OTHER
DISPLAY FAIL
END-EVALUATE.

EVALUATE : It is used to execute the statements based on conditions.


WHEN statement is used to specify the conditions.
We can use 255 WHEN statements.
WHEN OTHER is always a true condition and so must be specified as the last WHEN condition.
THRU / THROUGH is used to specify a range of values.
END-EVALUATE is the Mandatory scope terminator.

Write a program taking FILE1 & FILE2 as input and write matched
records into FILE3 and unmatched records into FILE4
Assume FILE1 and FILE2 are in sorted order based on key fields.

IDENTIFICATION DIVISION.
PROGRAM-ID. MATCH.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT FILE1 ASSIGN TO DISK1.
SELECT FILE2 ASSIGN TO DISK2.
SELECT FILE3 ASSIGN TO DISK3.
SELECT FILE4 ASSIGN TO DISK4.
DATA DIVISION.
FILE SECTION.
FD EMP-FILE1.
01 EMP-REC1.
03 F1-KEY
PIC X(05).
03 FILER
PIC X(95).
FD EMP-FILE2.
01 EMP-REC2.
03 F2-KEY
PIC X(05).
03 FILER
PIC X(95).
FD EMP-FILE3.
01 EMP-REC3
PIC X(100).
FD EMP-FILE4.
01 EMP-REC4
PIC X(100).
WORKING-STORAGE SECTION.
01 WS-EOF1
PIC X(1) VALUE N.
01 WS-EOF2
PIC X(1) VALUE N.
PROCEDURE DIVISION.
0000-MAIN-PATA.
PERFORM 1000-INITIALIZE-PARA.
PERFORM 2000-READ-FILE1.
PERFORM 2500-READ-FILE2.
PERFORM 3000-PROCESS-PARA UNTIL
WS-EOF1 = Y OR WS-EOF2 = Y.
PERFORM 4000-WRITE-UNMATCH-PARA.
PERFORM 9000-CLOSE-PARA.
STOP RUN.

1000-INITIALIZE-PARA.
OPEN INPUT FILE1, FILE2.
OPEN OUTPUT FILE3, FILE4.
2000-READ-FILE1.
READ FILE1
AT END MOVE Y TO WS-EOF1.
2500-READ-FILE2.
READ FILE2
AT END MOVE Y TO WS-EOF2.
3000-PROCESS-PARA.
EVALUATE TRUE
WHEN F1-KEY = F2-KEY
WRITE FILE3-REC FROM FILE1-REC
PERFORM 2000-READ-FILE1
PERFORM 2500-READ-FILE2
WHEN F1-KEY > F2-KEY
WRITE FILE4-REC FROM FILE2-REC
PERFORM 2500-READ-FILE2
WHEN F1-KEY < F2-KEY
WRITE FILE4-REC FROM FILE1-REC
PERFORM 2000-READ-FILE1
END-EVALUATE.
4000-WRITE-UNMATCH-PARA.
IF WS-EOF1 = Y
PERFORM UNTIL WS-EOF2 = Y
WRITE FILE4-REC FROM FILE2-REC
PERFORM 2500-READ-FILE2
END-PERFORM
ELSE
IF WS-EOF2 = Y
PERFORM UNTIL WS-EOF1 = Y
WRITE FILE4-REC FROM FILE1-REC
PERFORM 2000-READ-FILE1
END-PERFORM
END-IF
END-IF.

Write a program taking EMP-FILE and OT-FILE as input, add OT-AMT from OTFILE for those employees who have done OT into EMP-FILE.

IDENTIFICATION DIVISION.
PROGRAM-ID. MATCH.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT EMP-FILE ASSIGN TO DISK1.
SELECT OT-FILE ASSIGN TO DISK2.
DATA DIVISION.
FILE SECTION.
FD EMP-FILE.
01 EMP-REC.
03 EMP-ID
PIC X(10).
03 EMP-SAL
PIC 9(07).

03 FILER
FD OT-FILE.
01 OT-REC.
03 EMP-NUM
03 OT-AMT

03 FILER

PIC
PIC
PIC

X(83).
X(10).
9(07).

PIC X(83).

WORKING-STORAGE SECTION.
01 WS-EOF-EMP
PIC X(1) VALUE N.
01 WS-EOF-OT
PIC X(1) VALUE N.

1000-INITIALIZE-PARA.
OPEN INPUT OT-FILE.
OPEN I-O
EMP-FILE.
2000-READ-EMP.
READ EMP-FILE
AT END MOVE Y TO WS-EOF-EMP.
2500-READ-OT.
READ OT-FILE
AT END MOVE Y TO WS-EOF-OT.
3000-PROCESS-PARA.
EVALUATE TRUE
WHEN EMP-ID = EMP-NUM
ADD OT-AMT TO EMP-SAL
REWRITE EMP-REC
PERFORM 2000-READ-EMP
PERFORM 2500-READ-OT
WHEN EMP-ID < EMP-NUM
PERFORM 2000-READ-EMP-FILE
END-EVALUATE.
9000-CLOSE-PARA.
CLOSE EMP-FILE,OT-FILE.

PROCEDURE DIVISION.
0000-MAIN-PATA.
PERFORM 1000-INITIALIZE-PARA.
PERFORM 2000-READ-EMP.
PERFORM 2500-READ-OT.
PERFORM 3000-PROCESS-PARA UNTIL WS-EOF-OT = Y.
PERFORM 9000-CLOSE-PARA.
STOP RUN.

Topics to be covered on Day4

REDEFINES clause
RENAMES clause
COMPUTATIONAL USAGES
STRING & UNSTRING
EXAMINE & INSPECT
INITIALIZE

REDEFINES clause
REDEFINES clause is used to save the storage space by allocating the same
memory to multiple fields.
REDEFINES will allow multiple fields to reuse the memory irrespective of data
types.
REDEFINES RULES :
1. REDEFINES can be used with level numbers 01 to 49.
2. REDEFINING and REDEFINED fields must be at the same level number.
3. REDEFINING field must immediately follow the REDEFINED field.
4. We can REDEFINE only a memory which is shorter or equal in length.

REDEFINES clause
Example 1
01

01

PIC
REDFINES

X(5)

VALUE ABC12.

PIC

X(4).

REDEFINES clause
Example 2
01

01

PIC
REDFINES

X(5)

PROCEDURE DIVISION.
MOVE

56

DISPLAY A.
DISPLAY B.

TO B.

VALUE ABC12.

PIC

9(4).

REDEFINES clause
Example 3
01

PIC

X(5)

VALUE ABC12.

01

REDFINES

PIC

9(4).

01

REDFINES

PIC

A(4).

01

REDFINES

PIC

X(3).

REDEFINES clause
Example 3
01

PIC

X(5)

VALUE ABC12.

01

REDFINES

PIC

9(4).

01

REDFINES

PIC

A(4).

C REDEFINES B is invalid since B is not the owner of the memory.

REDEFINES clause
Example 3
01

01

01

01

PIC
REDFINES

PIC
REDFINES

X(5)

VALUE ABC12.

PIC

9(4).

A(4).
PIC

9(4).

REDEFINES clause
Example 3
01

01

PIC
REDEFINES

X(5)
A

VALUE ABC12.

PIC

9(7).

It is valid.
B will reuse 5 bytes from A and extra 2 bytes are allocated by system.

REDEFINES clause
Example 3
01

A.
03

PIC

X(5)

VALUE ABC12.

03

C REDEFINES B PIC

A(4).

REDEFINES clause
Example 3
01

A.
03

01

PIC

X(5)

VALUE ABC12.

C
03

D REDEFINES B PIC

A(4).

Invalid since B & D are not within same groups.

REDEFINES clause
Example 3
01

A.
03

01

PIC

X(5)

VALUE ABC12.

C REDEFINES A.
03

PIC

A(4).

Valid since C immediately follows A.

RENAMES clause
RENAMES is similar to REDEFINES in reusing memory, thereby saving storage
space.
RENAMES clause is used to regroup a set of elementary fields.
RENAMES can be used with only 66 level number.
Example :
01 GRP1.
03 A
03 B
03 C.
05 D
05 E
03 F.
05 G
05 H
03 I
03 J

PIC X(5).
PIC A(5).
PIC 9(5).
PIC A(5).
PIC
PIC
PIC
PIC

9(5).
A(5).
X(5).
A(5).

66 NEW-GRP2 RENAMES GRP1 B THRU G.


66 NEW-GRP3 RENAMES GRP1 C THRU I.

REDEFINES vs RENAMES
REDEFINES reuses memory from 1st byte onwards whereas RENAMES
reuses memory from any part of the group.
REDEFINES can be used with level numbers 01 to 49 whereas RENAMES
can be used with level number 66 only.

COMPUTATIONAL Usages
COMPUTATIONAL Usages are used with numeric fields only.
These usages compress the data and store in a shorter memory than required.
Types :
1. COMPUTATIONAL / COMP / BINARY.
2. COMP-1
3. COMP-2
4. COMP-3 / PACKED-DECIMAL

DISPLAY USAGE
It is used to store data internally in binary format where each byte occupies only
one byte.
Example :
01 A

PIC S9(4) VALUE 1234.

It occupies 4 bytes as follows :

0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0
1

COMP USAGE
It is used to store data internally in binary format.
Memory is occupied as follows :
S9(1) S9(4) 2 BYTES
S9(5) S9(9) 4 BYTES
S9(10) S9(18) 8 BYTES
Example :
01 A
PIC S9(4) COMP VALUE 1234.
It occupies 2 bytes as follows :

0 0 0 0 0 1 0 0 1 1 0 1 0 0 1 0

SIGN does not occupy any space.


COMP is used to store only integer values and so are used for declaring
counter fields and subscripts.

COMP-1 vs COMP-2
COMP-1

COMP-2

1. Used to store data in floating format.


2. It occupies only 4 bytes to store up to 18
characters.
3. Rounded values are stored.
4. Used to store constant values.
5. No PIC clause must be specified as there
is a pre-defined PIC clause.
6. Example :
01 A
COMP-1 VALUE 12.333333

1. Stores data in hexadecimal format.


2. It occupies only 8 bytes to store up to 18
characters.
3. Precise values are stored.
4. Used to store constant values.
5. No PIC clause must be specified as there
is a pre-defined PIC clause.
6. Example :
01 A
COMP-2 VALUE 12.333333

COMP-3
COMP-3 is used to store the data in PACKED-DECIMAL format.
Each byte holds 2 characters i.e., each character occupies byte.
COMP-3 stores byte for sign value.
For unsigned positive - C is stored.
For signed positive
- F is stored.
For negative
- D is stored.

COMP-3
Example for ODD Data Length :
01

It occupies

PIC S9(7) COMP-3 VALUE -1234567.


7/2 =
3.5 bytes for characters
0.5 bytes for sign
= 4 bytes

Formula : (n+1) / 2

COMP-3
Example for EVEN Data Length :
01

It occupies

PIC S9(6) COMP-3 VALUE 123456.


6/2 =
3 bytes for characters
0.5 bytes for sign
= 3.5 bytes

Formula : (n/2)+1

STRING statement
STRING is used to concatenate more than one field into a single field.
Example :
01
FN
01
MN
01
LN
01

FULL-NAME

PIC
PIC
PIC

A(10)
A(10)
A(10)
PIC

PROCEDURE DIVISION.
STRING
FN,
MN,
LN
INTO
FULL-NAME
END-STRING.
DISPLAY FULL-NAME.

VALUE ABDUL.
VALUE KALAM.
VALUE J.
A(30).

STRING statement
STRING is used to concatenate more than one field into a single field.
Example :
01
FN
01
MN
01
LN
01

FULL-NAME

PIC
PIC
PIC

A(10)
A(10)
A(10)
PIC

VALUE ABDUL.
VALUE KALAM.
VALUE J.
A(30).

PROCEDURE DIVISION.
STRING
FN DELIMITED BY ,
MN DELIMITED BY SPACE,
LN
INTO
FULL-NAME
END-STRING.
DISPLAY FULL-NAME.

STRING statement
STRING is used to concatenate more than one field into a single field.
Example :
01
FN
01
MN
01
LN
01
01

FULL-NAME
WS-PNT

PIC
PIC
PIC

A(10)
A(10)
A(10)
PIC
PIC

VALUE ABDUL.
VALUE KALAM.
VALUE J.
A(30).
9(5) VALUE 1.

PROCEDURE DIVISION.
STRING
FN DELIMITED BY ,
MN DELIMITED BY SPACE,
LN
INTO
FULL-NAME
WITH POINTER WS-PNT
END-STRING.
DISPLAY FULL-NAME.
We can get the count of characters passed to FULL-NAME by subtracting initial WS-PNT value from
the final WS-PNT value.

UNSTRING statement
UNSTRING is used to deconcatenate/ distribute a single field into multiple fields.
Example :
01
FULL-NAME
01
01
01

FN
MN
LN

PIC
PIC
PIC
PIC

A(10).
A(10).
A(10).

PROCEDURE DIVISION.
UNSTRING FULL-NAME
INTO FN,
MN,
LN
END-UNSTRING.

A(30)

VALUE ABDUL

KALAM

J.

UNSTRING statement
UNSTRING is used to deconcatenate/ distribute a single field into multiple fields.
Example :
01
FULL-NAME
01
01
01

FN
MN
LN

PIC
PIC
PIC
PIC

A(30)

A(10).
A(10).
A(10).

PROCEDURE DIVISION.
UNSTRING FULL-NAME
DELIMITED BY SIZE
INTO FN,
MN,
LN
END-UNSTRING.

VALUE ABDUL

KALAM

J.

Report Generation Program


Write a program taking POL-FILE as input to generate POL-RPT as
output.
1

100

POL-FILE

P001 RAMU
P002 SOMU
P003 PINKY
P004 RINKY
P005 CINKY
P006 DINKY

100000
200000
300000
250000
350000
150000

JB
JS
JS
JS
JB
JS

2000
3500
5000
4000
4500
2500

133

POL-RPT

LIC
POLICIES GENERATED FOR THE MONTH
POLICY TYPE

#COUNT

AUGUST
$ PREM AMT

JB
JS

3,124
4,345

$42,135,621.85
$1,223,575,489.55

TOTAL

7,469

$1,265,711,111.40

ID DIVISION.
01 WS-RPT-LINE.
2000-READ-PARA.
PROGRAM-ID. RPTPGM.
03 FILLER PIC X(25) VALUE SPACES. READ POL-FILE
ENVIRONMENT DIVISION.
03 WS-RPT-POL-TYPE PIC X(20) VALUE
AT END MOVE 'Y' TO WS-EDF
INPUT-OUTPUT SECTION.
SPACES.
3000-PROCESS-PARA.
FILE-CONTROL.
03 WS-RPT-POL-CNT PIC ZZZ,ZZZ,ZZ9.EVALUATE POL-TYPE
SELECT POL-FILE ASSIGN TO DISK1.
WHEN 'JB'
SELECT POL-RPT ASSIGN TO DISK2.
03 WS-RPT-PREM-AMT PIC $$$,$$$,$$$, ADD +1 TO WS-JB-CNT
DATA DIVISION.
$$9.99.
ADD PREM-AMT TO WS-JB-PREM
FILE SECTION.
03 FILLER PIC X(35) VALUE SPACES.
WHEN 'JS'
FD POL-FILE.
* REPORT LAYOUT ENDS.
ADD +1 TO WS-JS-CNT
01 POL-REC.
01 WS-COUNTERS.
ADD PREM-AMT TO WS-JS-PREM
03 POL-NUM
PIC
X(10).
03 WS-JB-PREM PIC 9(9).
END-EVALUATE.
03 POL-AMT
PIC
9(9)V9(2).
03
WS-JB-CNT
PIC
9(9).
PERFORM 2000-READ-PARA.
03 PREM-AMT
PIC
9(9)V9(2).
03
WS-JS-CNT
PIC
9(9).
4000-WRITE-REPORT.
03 POL-TYPE
PIC
X(5).
03 WS-JS-PREM PIC 9(9)V9(2).
WRITE POL-RPT-REC FROM WS-HEADER1.
03 FILLER
PIC
X(63).
FD POL-RPT.
03 WS-TOT-CNT PIC 9(9).
WRITE POL-RPT-REC FROM WS-HEADER2.
01 POL-RPT-REC PIC
X(133).
03 WS-TOT-PREM PIC 9(9)V9(2).
WORKING-STORAGE SECTION.
WRITE POL-RPT-REC FROM WS-HEADER3.
01 WS-EOF
PIC
X(1) VALUE 'N'.01 WS-DATE PIC X(6).
* REPORT LAYOUT BEGINS
01 WS-HEADER1.
03 FILLER
PIC
VALUE SPACES.
03 FILLER
PIC
'LIC'.
03 FILLER
PIC
SPACES.
01 WS-HEADER2.
03 FILLER
PIC
SPACES.
03 FILLER
PIC
ALL '-'.
03 FILLER
PIC
SPACES.
01 WS-HEADER3.

X(65)

PROCEDURE DIVISION.
0000-MAIN-PARA.
PERFORM 1000-INITIALIZE-PARA.
PERFORM 2000-READ-PARA.

WRITE POL-RPT-REC FROM WS-HEADER4.


MOVE 'JB' TO WS-RPT-POL-TYPE.

X(03) VALUE PERFORM 3000-PROCESS-PARA UNTIL MOVE WS-JB-CNT TO WS-RPT-POL-CNT.

WS-EOF = 'Y'.

X(65) VALUE PERFORM 4000-WRITE-REPORT.


X(65) VALUE

PERFORM 9000-CLOSE-PARA.

MOVE WS-JB-PREM TO WS-RPT-AMT.


WRITE POL-RPT-REC FROM WS-RPT-LINE.

STOP RUN.
1000-INITIALIZE-PARA.
MOVE 'JS' TO WS-RPT-POL-TYPE.
INITIALIZE
WS-COUNTERS
,
WS-DATE.
MOVE WS-JS-CNT TO WS-RPT-POL-CNT.
X(65) VALUE
ACCEPT WS-DATE FROM DATE.
EVALUATE WS-DATE(3:2)
MOVE WS-JS-PREM TO WS-RPT-PREM-AMT.
WHEN'01'
MOVE 'JANUARY' TO WS-MONTH
WRITE POL-RPT-REC FROM WS-RPT-LINE.
03 FILLER
PIC X(35) VALUE
WHEN
'02'
SPACES.
MOVE 'FEBRUARY' TO WS-MONTH
03 FILLER
PIC X(50) VALUE
END-EVALUATE.
COMPUTE WS-TOT-CNT = WS-JB-CNT + WS'POLICIES
GENERATED FOR THE MONTH'. OPEN INPUT POL-FILE.
JS-CNT.
03 WS-MONTH PIC X(13) VALUE
OPEN OUTPUT POL-RPT.
COMPUTE WS-TOT-PREM = WS-JB-PREM +
X(03) VALUE

Sub-Programs
Sub Programs are used for reusability of code i.e., more than one program can reuse the
same code written in a sub-program.
CALL Statement is used to pass control from one program to another program.
The program which is used to pass the control is Main Program/Calling Program.
The program which is used to receive the control is Sub Program/Sub Routine/Called Program.

Main Program Vs Sub Program


ID DIVISION.
PROGRAM-ID. MP.
DATA DIVISION.
WORKING-STORAGE
01 SAL-DET.
03 BASIC
PIC
03 HRA
PIC
03 DA
PIC
03 PFF
PIC
01 TOTALS.
03 GROSS
PIC
03 NET
PIC

SECTION.
9(5).
9(5).
9(5).
9(5).
9(7).
9(7).

PROCEDURE DIVISION.
ACCEPT BASIC.
ACCEPT HRA.
ACCEPT DA.
ACCEPT PFF.
CALL SP USING SAL-DET, TOTALS.
DISPLAY GROSS .
DISPLAY NET.
STOP RUN.

ID DIVISION.
PROGRAM-ID. SP.
DATA DIVISION.
LINKAGE SECTION.
01 LS-SAL-DET.
03 LS-BASIC PIC
03 LS-HRA
03 LS-DA
PIC
03 LS-PFF
PIC
01 LS-TOTALS.
03 LS-GROSS
03 LS-NET
PIC

9(5).
PIC 9(5).
9(5).
9(5).
PIC 9(7).
9(7).

PROCEDURE DIVISION USING LS-SAL-DET, LSTOTALS.


COMPUTE LS-GROSS = LS-BASIC + LS-HRA + LSDA + LS-PFF.
COMPUTE LS-NET
= LS-GROSS LS-PFF.
EXIT PROGRAM.

Main Program Vs Sub Program


Main Program
1. It is the calling program.
2. Control & data are passed using
CALL statement.
3. Actual Parameters are declared
in WORKNG-STORAGE SECTON.
4. STOP RUN is coded.

Sub-Program
1. It is the Called Program.
2. Control & data are received at
PROCEDURE DIVISION USING statement.
3. Formal Parameters are declared in
LINKAGE SECTION.
4. EXIT PROGRAM is coded.

CALL BY REFERENCE : When formal parameters are changed, the actual


parameters also get affected since both are allocated the same memory.
CALL BY VALUE : When formal parameters are changed, the actual parameters do not get
affected since both are allocated the separate memories.

Main Program Vs Sub Program


Static CALL
1. Linking object modules before
execution.
2. Compiler option is NODYNAM.
3. In terms of processing, it is fast.
4. In terms of load module, it is
large.
5. Sub-program name is specified in
the CALL statement as follows :
CALL SP - - - - 6. Each time sub-program is
compiled, main program also
must be compiled.
7. Example :
IF A > B
CALL SP1
ELSE
CALL SP2
END-IF.

Dynamic CALL
1. Linking object modules during
execution.
2. Compiler option is DYNAM..
3. It is slow.
4. It is small.
5. Variable name is specified.
CALL WS-PGM - - - - 6. Need not be compiled.
7. Example :
IF A > B
MOVE SP1
ELSE
MOVE SP2
END-IF.
CALL WS-PGM.

TO

WS-PGM

TO

WS-PGM

Static & Dynamic CALL


Compiler option is specified in the PARM parameter of Compilation JCL as follows :
//DEMO

EXEC

PGM=IGYCRCTL, PARM=DYNAM

Initializing variables
ID DIVISION.
PROGRAM-ID. MP.
DATA DIVISION.
WORKING-STORAGE
01 SAL-DET.
03 BASIC
PIC
03 HRA
PIC
03 DA
PIC
03 PFF
PIC
01 TOTALS.
03 GROSS
PIC
03 NET
PIC
01 WS-SPGM

SECTION.
9(5).
9(5).
9(5).
9(5).
9(7).
9(7).
PIC X(3).

PROCEDURE DIVISION.
ACCEPT BASIC.
ACCEPT HRA.
ACCEPT DA.
ACCEPT PFF.
ACCEPT WS-PGM
CALL WS-PGM USING SAL-DET,
TOTALS.
DISPLAY GROSS .
DISPLAY NET.
STOP RUN.

ID DIVISION.
PROGRAM-ID. SP. PROGRAM IS INITIAL.
DATA DIVISION.
LINKAGE SECTION.
01 LS-SAL-DET.
03 LS-BASIC PIC 9(5).
03 LS-HRA
PIC 9(5).
03 LS-DA
PIC 9(5).
03 LS-PFF
PIC 9(5).
01 LS-TOTALS.
03 LS-GROSS
PIC 9(7).
03 LS-NET
PIC 9(7).
PROCEDURE DIVISION USING LS-SAL-DET, LSTOTALS.
COMPUTE LS-GROSS = LS-BASIC + LS-HRA + LSDA + LS-PFF.
COMPUTE LS-NET
= LS-GROSS LS-PFF.
EXIT PROGRAM.

Initializing variables
ID DIVISION.
PROGRAM-ID. MP.
DATA DIVISION.
WORKING-STORAGE
01 SAL-DET.
03 BASIC
PIC
03 HRA
PIC
03 DA
PIC
03 PFF
PIC
01 TOTALS.
03 GROSS
PIC
03 NET
PIC

SECTION.
9(5).
9(5).
9(5).
9(5).
9(7).
9(7).

PROCEDURE DIVISION.
ACCEPT BASIC.
ACCEPT HRA.
ACCEPT DA.
ACCEPT PFF.
CALL SP USING SAL-DET, TOTALS.
DISPLAY GROSS .
DISPLAY NET.
CANCEL SP.
CALL SP USING SAL-DET, TOTALS.
DISPLAY GROSS .
DISPLAY NET.
CANCEL SP.
CALL SP USING SAL-DET, TOTALS.
DISPLAY GROSS .
DISPLAY NET.
STOP RUN.

ID DIVISION.
PROGRAM-ID. SP.
DATA DIVISION.
LINKAGE SECTION.
01 LS-SAL-DET.
03 LS-BASIC PIC
03 LS-HRA
03 LS-DA
PIC
03 LS-PFF
PIC
01 LS-TOTALS.
03 LS-GROSS
03 LS-NET
PIC

9(5).
PIC 9(5).
9(5).
9(5).
PIC 9(7).
9(7).

PROCEDURE DIVISION USING LS-SAL-DET, LSTOTALS.


COMPUTE LS-GROSS = LS-BASIC + LS-HRA + LSDA + LS-PFF.
COMPUTE LS-NET
= LS-GROSS LS-PFF.
EXIT PROGRAM.

Arrays
Array is a collection of similar data items (Same Data Types and Data lengths).
In COBOL, we can use upto a 3-dimentional array.
Arrays are declared using OCCURS clause.
Uses of Arrays :
1. Coding effort is reduced in declaring similar fields.
2. Processing array data is fast compared to normal declaration.

Normal Declaration Vs Arrays


DATA DIVISION.
WORKING-STORAGE SECTION.
01 STUD-DET.
03 STUD1.
05 STUD1-ID PIC X(10).
05 STUD1-NAME
PIC A(30).
03 STUD2.
05 STUD2-ID PIC X(10).
05 STUD2-NAME
PIC A(30).

03 STUD10.
05 STUD10-ID
05 STUD10-NAME

PIC X(10).
PIC A(30).

DATA DIVISION.
WORKING-STORAGE SECTION.
01 STUD-DET.
03 STUD
OCCURS 10 TIMES.
05 STUD-ID PIC X(10).
05 STUD-NAME
PIC A(30).

Arrays
Array Life Cycle
1. Declaring array
2. Loading the data into array.
3. Fetching the data from array.

Arrays
Array Life Cycle for 1-D array.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 STUD-DET.
03 STUD
OCCURS 10 TIMES.
05 STUD-ID PIC X(10).
05 STUD-NAME
PIC A(30).

PROCEDURE DIVISION.
ACCEPT
ACCEPT
ACCEPT
ACCEPT
ACCEPT
ACCEPT

STUD-ID(1)
STUD-NAME(1)
STUD-ID(2)
STUD-NAME(2)
STUD-ID(3)
STUD-NAME(3)

Arrays
Array Life Cycle for 1-D array.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 STUD-DET.
03 STUD
OCCURS 10 TIMES.
05 STUD-ID PIC X(10).
05 STUD-NAME
PIC A(30).
01 I PIC

9(2).

PROCEDURE DIVISION.
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 10
ACCEPT STUD-ID(I)
ACCEPT STUD-NAME(I)
END-PERFORM.
PERFORM VARYING I FROM 15 BY -1 UNTIL I < 1
DISPLAY STUD-ID(I)
DISPLAY STUD-NAME(I)
END-PERFORM.

Arrays
Array Life Cycle for 2-D array.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 STUD-DET.
02 CLASS1.
03 STUD
OCCURS 5 TIMES.
05 STUD-ID PIC X(10).
05 STUD-NAME
PIC A(30).
02 CLASS2.
03 STUD
OCCURS 5 TIMES.
05 STUD-ID PIC X(10).
05 STUD-NAME
PIC A(30).
02 CLASS3.
03 STUD
OCCURS 5 TIMES.
05 STUD-ID PIC X(10).
05 STUD-NAME
PIC A(30).

Arrays
Array Life Cycle for 2-D array.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 STUD-DET.
02 CLASS OCCURS 3 TIMES.
03 STUD
OCCURS 5 TIMES.
05 STUD-ID PIC X(10).
05 STUD-NAME
PIC A(30).
01 I PIC
01 J

9(2).
PIC 9(2).

PROCEDURE DIVISION.
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 3
PERFORM VARYING J FROM 1 BY 1 UNTIL J > 5
ACCEPT STUD(I,J)
DISPLAY STUD(I,J)
END-PERFORM
END-PERFORM.
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 3
DISPLAY CLASS(I)
END-PERFORM.
DISPLAY STUD-DET.
STOP RUN.

Exercise
A Bank has 1000 employees distributed evenly in 50 branches. Each District has 5 branches.
The branches are distributed into 2 states with even number of districts. There are 20
departments in each district evenly.
Allocate the memory for all the employees.

Arrays
Array Life Cycle
DATA DIVISION.
WORKING-STORAGE SECTION.
01 EMP-DET.
02 STATE OCCURS 2 TIMES.
03 DISTRICT OCCURS 5 TIMES.
04 BRANCH OCCURS 5 TIMES.
05 DEPT
OCCURS 4 TIMES.
06 EMP
OCCURS 5 TIMES.
05 EMP-ID
PIC X(10).
05 EMP-NAME PIC A(30).

Files used for programming


1

600

S01 RAMU

S02

SOMU

S03

RINKY

S04

DINKY

S15

DINKY

STUD-FILE1
1

40

S01 RAMU
S02 SAMU
S03 EAMU
S04
WAMU
S15 QUMU

STUD-FILE2

200

S01 RAMU S02 SAMU


S05 QUMU
S06
S11 RAMU

S03 EAMU S04 WAMU


S10
S15

STUD-FILE3

Write a program to accept 15 student details and write them as a single record
into the file.
ID DIVISION.
PROGRAM-ID. FLPROG1.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT STUD-FILE1 ASSIGN TO DISK1.
DATA DIVISION.
FILE SECTION.
FD STUD-FILE1.
01 STUD-REC1
PIC X(600).
WORKING-STORAGE SECTION.
01 STUD-DET.
02 STUD OCCURS 15 TIMES.
03 STUD-ID
PIC X(10).
03 STUD-NAME PIC A(30).
01 I

PIC

9(2) VALUE 1.

PROCEDURE DIVISION.
0000-MAIN-PARA.
PERFORM 1000-INITIALIZE-PARA.
PERFORM 3000-PROCESS-PARA UNTIL I >
15.
PERFORM 4000-WRITE-PARA.
PERFORM 9000-CLOSE-PARA.
STOP RUN.
1000-INITIALIZE-PARA.
OPEN OUTPUT STUD-FILE1.

3000-PROCESS-PARA.
ACCEPT STUD-ID(I).
ACCEPT STUD-NAME(I).
ADD +1 TO I.
4000-WRITE-PARA.
WRITE STUD-REC1
9000-CLOSE-PARA.
CLOSE STUD-FILE1.

FROM STUD-DET.

Files used for programming


1

600

S01 RAMU

S02

SOMU

S03

RINKY

S04

DINKY

S15

DINKY

STUD-FILE1
1

40

S01 RAMU
S02 SAMU
S03 EAMU
S04
WAMU
S15 QUMU

STUD-FILE2

200

S01 RAMU S02 SAMU


S05 QUMU
S06
S11 RAMU

S03 EAMU S04 WAMU


S10
S15

STUD-FILE3

Write a program taking STUD-FILE1 as input to generate STUD-FILE2 as output.


ID DIVISION.
PROGRAM-ID. FLPROG2.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT STUD-FILE1 ASSIGN TO
DISK1.
SELECT STUD-FILE2 ASSIGN TO
DISK2.
DATA DIVISION.
FILE SECTION.
FD STUD-FILE1.
01 STUD-REC1
PIC X(600).
FD STUD-FILE2.
01 STUD-REC2
PIC X(40).
WORKING-STORAGE SECTION.
01 STUD-DET.
02 STUD OCCURS 15 TIMES.
03 STUD-ID
PIC X(10).
03 STUD-NAME PIC A(30).
01 I
01 WS-EOF

PIC 9(2) VALUE 1.


PIC X(1) VALUE Y.

PROCEDURE DIVISION.
0000-MAIN-PARA.
PERFORM 1000-INITIALIZE-PARA.
PERFORM 2000-READ-PARA.
PERFORM 3000-PROCESS-PARA.
PERFORM 9000-CLOSE-PARA.
STOP RUN.
1000-INITIALIZE-PARA.
OPEN INPUT
STUD-FILE1.

2000-READ-PARA.
READ STUD-FILE1
AT END MOVE Y

TO

WS-EOF.

3000-PROCESS-PARA.
MOVE STUD-REC1 TO STUD-DET.
PERFORM UNTIL I > 15
MOVE STUD(I) TO STUD-REC2
WRITE STUD-REC2
ADD +1 TO I
END-PERFORM.
9000-CLOSE-PARA.
CLOSE STUD-FILE1, STUD-FILE2.

Files used for programming


1

600

S01 RAMU

S02

SOMU

S03

RINKY

S04

DINKY

S15

DINKY

STUD-FILE1
1

40

S01 RAMU
S02 SAMU
S03 EAMU
S04
WAMU
S15 QUMU

STUD-FILE2

200

S01 RAMU S02 SAMU


S05 QUMU
S06
S11 RAMU

S03 EAMU S04 WAMU


S10
S15

STUD-FILE3

Write a program taking STUD-FILE2 as input to generate STUD-FILE3 as output.


ID DIVISION.
PROGRAM-ID. FLPROG2.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT STUD-FILE2 ASSIGN TO DISK1.
SELECT STUD-FILE3 ASSIGN TO DISK3.
DATA DIVISION.
FILE SECTION.
FD STUD-FILE2.
01 STUD-REC2
PIC X(40).
FD STUD-FILE3.
01 STUD-REC3
PIC X(200).
WORKING-STORAGE SECTION.
01 STUD-DET.
02 CLASS OCCURS 3 TIMES.
03 STUD OCCURS 5 TIMES.
04 STUD-ID
PIC X(10).
04 STUD-NAME PIC A(30).
01 I
01 WS-EOF

PIC 9(2) VALUE 1.


PIC X(1) VALUE Y.

PROCEDURE DIVISION.
0000-MAIN-PARA.
PERFORM 1000-INITIALIZE-PARA.
PERFORM 2000-READ-PARA.
PERFORM 3000-PROCESS-PARA UNTIL WSEOF = Y.
PERFORM 4000-WRITE-PARA.
PERFORM 9000-CLOSE-PARA.
STOP RUN.
1000-INITIALIZE-PARA.
OPEN INPUT
STUD-FILE2.
OPEN OUTPUT STUD-FILE3.

2000-READ-PARA.
READ STUD-FILE2
AT END MOVE Y

TO

WS-EOF.

3000-PROCESS-PARA.
MOVE STUD-REC2 TO STUD(I,J).
IF J = 5
MOVE 0 TO J
ADD +1 TO I
END-IF.
ADD +1 TO J.
PERFORM 2000-READ-PARA.
4000-WRITE-PARA.
PERFORM UNTIL I > 3
MOVE CLASS(I) TO STUD-REC3
WRITE STUD-REC3
ADD +1 TO I
END-PERFORM.
9000-CLOSE-PARA.
CLOSE STUD-FILE1, STUD-FILE3.

Array Declaration using Subscript and Index


ID DIVISION.
PROGRAM-ID. FLPROG1.

ID DIVISION.
PROGRAM-ID. FLPROG1.

DATA DIVISION.
WORKING-STORAGE SECTION.
01 STUD-DET.
02 STUD OCCURS 15 TIMES.
03 STUD-ID
PIC X(10).
03 STUD-NAME PIC A(30).

DATA DIVISION.
WORKING-STORAGE SECTION.
01 STUD-DET.
02 STUD OCCURS 15 TIMES
ASCENDING KEY IS STUD-ID
INDEXED BY IX1.
03 STUD-ID
PIC X(10).
03 STUD-NAME PIC A(30).

01 I

PIC

9(2) VALUE 1.

PROCEDURE DIVISION.
MOVE 1 TO I.
PERFORM UNTIL I > 15
ACCEPT STUD(I)
ACCEPT STUD-NAME(I)
ADD +1 TO I
END-PERFORM.
MOVE 15 TO I.
PERFORM UNTIL I < 1
DISPLAY STUD(I)
DISPLAY STUD-NAME(I)
ADD -1 TO I
END-PERFORM.
STOP RUN.

PROCEDURE DIVISION.
SET IX1 TO I.
PERFORM UNTIL IX1 > 15
ACCEPT STUD(IX1)
ACCEPT STUD-NAME(IX1)
SET IX1 UP BY 1
END-PERFORM.
SET IX1 TO I5.
PERFORM UNTIL IX1 < 1
DISPLAY STUD(IX1)
DISPLAY STUD-NAME(IX1)
SET IX1 DOWN BY 1
END-PERFORM.
STOP RUN.

Index
When array is declared using Index, an INDEX REGISTER is created
internally which stores the occurrence number and its
corresponding displacement value.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 STUD-DET.
02 STUD OCCURS 5 TIMES
INDEXED BY IX1
ASCENDING KEY IS
STUD-ID.
03 STUD-ID
PIC X(10).
03 STUD-NAME
PIC A(30).
1
200

40 41

INDEX NUMBER
VALUE
1
2
40
3
80
4
120
5
160

80 81

120 121

160 161

INDEX
0

Subscript Vs Index
SUBSCRIPT

INDEX

1.It is the occurrence number


of an array element.
2.It is declared as a separate
variable in WORKINGSTORAGE SECTION.
3.It is
incremented/decremented
using arithmetic operations.
4.Array data access is slow
using subscript since
subscript is a separate
memory and so each time
before accessing array
memory, first we need to
access subscript memory.

1.It is the displacement value


of an array element.
2.It is declared using INDEXED
BY clause along with array
declaration.
3.It is
incremented/decremented
using SET clause.
4.Array data access is fast
using index since it is a part
of array memory and so
accessing array memory is
fast as all the displacement
values are pre-defined.

Search Vs Search All


SEARCH
1.It is LINEAR SEARCH i.e.,
array elements are searched
sequentially one after the
other.
2.Data need not be in sorted
order.
3.Multiple WHEN conditions
can be specified.
4.Any relational operator can
be specified.
5.SEARCH is efficient than
PERFORM.
6.Can be used with multidimensional arrays.

SEARCH ALL
1.It is BINARY SEARCH.
2.Data must be in sorted order
to get the required output.
3.Only one WHEN condition
can be specified.
4.Only = Operator can be
used.
5.SEARCH ALL is efficient than
SEARCH.
6.Can be used with only
single-dimensional array.

Binary SEARCH :
1. Array elements are split into two halves.
2. The desired value is compared with the last element of first half and
with the first element of last half.
3. Based on the possibility of finding the desired value in one half, the
other half is ignored and the remaining half is again split, compared
and so on until the desired value is obtained.

Write a program taking POL-FILE and MED-FILE as input to generate POL-MEDFILE as output.

ID DIVISION.
PROGRAM-ID. PROG1.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT POL-FILE
ASSIGN TO
DISK1.
SELECT MED-FILE
ASSIGN TO
DISK2.
SELECT POL-MED-FILE ASSIGN TO
DISK3.
DATA DIVISION.
FILE SECTION.
FD POL-FILE.
01 POL-REC.
03 POL-NUM
PIC X(05).
03 FILLER
PIC X(10).
03 POL-MED-CD PIC X(10).
03 FILLER
PIC X(55).
FD MED-FILE.
01 MED-REC.
03 MED-CD PIC X(10).
03 MED-DESC
FD POL-MED-FILE.
01 POL-MED-REC.
03 FILLER

PIC X(30).
PIC X(80).

03 POL-MED-DESC
PIC X(30).
WORKING-STORAGE SECTION.
01 WS-EOF-POL

PIC X(1) VALUE 'N'.

01 WS-EOF-MED

PIC X(1) VALUE 'N'.

PROCEDURE DIVISION.
0000-MAIN-PARA.
PERFORM 1000-INITIALIZATION-PARA.
PERFORM 2000-READ-MED.
PERFORM 1500-LOAD-ARRAY UNTIL WS-EOFMED = 'Y'.
PERFORM 2500-READ-POL.
PERFORM 3000-PROCESS-PARA UNTIL WS-EOFPOL = 'Y'.
PERFORM 9000-CLOSE-PARA.
STOP RUN.
1000-INITIALIZATION-PARA.
INITIALIZE WS-ARRAY.
SET IX1 TO 1.
OPEN INPUT POL-FILE, MED-FILE.
OPEN OUTPUT POL-MED-FILE.
2000-READ-MED.
READ MED-FILE
AT END MOVE 'Y' TO WS-EOF-MED.
1500-LOAD-ARRAY.
MOVE MED-REC TO WS-ARR-MED-REC(IX1).
SET IX1 UP BY 1.
PERFORM 2000-READ-MED.
2500-READ-POL.
READ POL-FILE
AT END MOVE 'Y' TO WS-EOF-POL.
3000-PROCESS-PARA.
MOVE POL-REC
TO POL-MED-REC.
SET IX1 TO 1.
SEARCH WS-ARR-MED-REC
WHEN
WS-ARR-MED-CD(IX1) = POLMED-CD
MOVE WS-ARR-MED-DESC(IX1) TO POLMED-DESC

Vous aimerez peut-être aussi