Académique Documents
Professionnel Documents
Culture Documents
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 74
COBOL 85
COBOL II
VS COBOL
VS COBOL II
DIVISIONS
SECTIONS
PARAGRAPHS
SENTENCES
STATEMENTS
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.
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.
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.
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.
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.
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.
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.
Column 1 3
Column 4 6
Column 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.
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)
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)
Example
DATA DIVISION.
WORKING-STORAGE SECTION.
01
EMP-SAL
PIC
9 (7) VALUE 3500.
0003500
Data Type
V (Assumed 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
Data Type
S (Sign)
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
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)
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
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)
Level Number
Example 3
01 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
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
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?
ACCEPT Statement
DISPLAY Statement
COMPUTE Statement
Scope Terminator
STOP RUN
MOVE Statement
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
7. X
8. 9
SOC7
9. A
SOC7
Elementary MOVE
Moving data from one elementary field to another elementary field is
ELEMENTARY MOVE.
Example
01
GRP1.
03 A
03 B
03 C
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
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
Example
01
WS-DATE1
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.
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.
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.
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.
ACCEPT A
DISPLAY A
ACCEPT A
DISPLAY A
ACCEPT A
DISPLAY A
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.
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.
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.
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.
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
ACCT-FILE
A123
A124
A125
A126
RAMU
SOMU
SOMU
SOMU
10000
20000
30000
25000
HYD
CHE
HYD
MUM
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.
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).
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.
WRITE Statement
REWRITE Statement
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.
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.
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.
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.
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.
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).
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).
REDEFINES clause
Example 3
01
A.
03
01
PIC
X(5)
VALUE ABC12.
C REDEFINES A.
03
PIC
A(4).
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).
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
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
COMP-1 vs COMP-2
COMP-1
COMP-2
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
Formula : (n+1) / 2
COMP-3
Example for EVEN Data Length :
01
It occupies
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.
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.
WS-EOF = 'Y'.
PERFORM 9000-CLOSE-PARA.
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.
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).
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.
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
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).
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.
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).
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
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.
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
STUD-FILE3
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.
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
STUD-FILE3
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.
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
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
01 WS-EOF-MED
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