Top Banner
Common Business oriented Language Sridhar Babu Purama
158
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Cobol Notes

Common Business oriented Language

Sridhar Babu Purama

Page 2: Cobol Notes

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.

Page 3: Cobol Notes

History of COBOL

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

• In 1950’s, 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.

Page 4: Cobol Notes

COBOL Versions

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.

Standardizing COBOL programming language, many versions of COBOL evaluated.

Page 5: Cobol Notes

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.

Page 6: Cobol Notes

COBOL Program Structure

COBOL Program

DIVISIONS

SECTIONS

PARAGRAPHS

SENTENCES

STATEMENTS

Page 7: Cobol Notes

COBOL Program Structure

1. IDENTIFICATION DIVISION.

2. ENVIRONMENT DIVISION.

3. DATA DIVISION.

4. PROCEDURE DIVISION.

There are four DIVISIONS in a COBOL program.

Page 8: Cobol Notes

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.

Page 9: Cobol Notes

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 program name.

Page 10: Cobol Notes

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.

Page 11: Cobol Notes

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.

Page 12: Cobol Notes

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.

Page 13: Cobol Notes

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.

Page 14: Cobol Notes

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.

Page 15: Cobol Notes

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.

Page 16: Cobol Notes

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.

Page 17: Cobol Notes

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. All the files used in the program are declared here.

Page 18: Cobol Notes

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.

Page 19: Cobol Notes

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.

Page 20: Cobol Notes

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 file related fields are declared here

Page 21: Cobol Notes

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

Page 22: Cobol Notes

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.

Fields used to pass data between programs are declared here.

Page 23: Cobol Notes

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. These SECTIONS are no more used.

Page 24: Cobol Notes

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.

Page 25: Cobol Notes

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

Page 26: Cobol Notes

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.

Page 27: Cobol Notes

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.

Page 28: Cobol Notes

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.

Page 29: Cobol Notes

Questions

1. COBOL stands for2. 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?

Page 30: Cobol Notes

Topics to be covered on Day3

- Field Declaration

- Level Numbers

- Data Types

Page 31: Cobol Notes

Field Declaration

DATA DIVISION.WORKING-STORAGE SECTION.01 EMP-NAME PIC A (30) VALUE ‘ABDUL KALAM J’.--- ----------------- ------ --- ---- ---------- --------------------------------

Level Number

Field Name /Variable Name /

Data Name / Data Item

PIC Clause

Data Type

Data Length

VALUE Clause

Literal

Page 32: Cobol Notes

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

Page 33: Cobol Notes

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

Page 34: Cobol Notes

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

Page 35: Cobol Notes

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)

Page 36: Cobol Notes

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 KALAM J’.

1 30

ABDUL KALAM J

Page 37: Cobol Notes

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 , A M E E R P E T

Page 38: Cobol Notes

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.

0 0 0 3 5 0 0

Page 39: Cobol Notes

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

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

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

0 0 0 3 5 0 0 . 2 5

0 0 0 3 5 0 0 2 5 0 0

Page 40: Cobol Notes

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.

Page 41: Cobol Notes

Data Type

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

Page 42: Cobol Notes

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

Page 43: Cobol Notes

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.

Page 44: Cobol Notes

Field Declaration

DATA DIVISION.WORKING-STORAGE SECTION.01 EMP-NAME PIC A (30) VALUE ‘ABDUL KALAM J’.--- ----------------- ------ --- ---- ---------- --------------------------------

Level Number

Field Name /Variable Name /

Data Name / Data Item

PIC Clause

Data Type

Data Length

VALUE Clause

Literal

Page 45: Cobol Notes

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.

Page 46: Cobol Notes

Level Number

Level Numbers 01 to 49 are used as follows :

01 EMP-NAME PIC A(30) VALUE ‘ABDUL KALAM J’.

EMP-NAME

MN LNFN

01 EMP-NAME.

03 FN PIC A(10) VALUE ‘ABDUL’.

03 MN PIC A(10) VALUE ‘KALAM’.

03 LN PIC A(10) VALUE ‘J’.

ABDUL KALAM J

Page 47: Cobol Notes

Level Number

Example 2

01 WS-DATE PIC X(8) VALUE ‘20110727’.

WS-DATE

MN LNYYYY

01 WS-DATE.

02 YYYY.

04 CC PIC X(2) VALUE ’20’.

04 YY PIC X(2) VALUE ’11’.

02 MM PIC X(2) VALUE ‘07’.

02 DD PIC X(2) VALUE ‘27’.

2011 07 27

CC YY

Page 48: Cobol Notes

Level Number

Example 3

01 WS-TIME PIC X(6) VALUE ‘102030’.

WS-TIME

MIN SSHH

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

Page 49: Cobol Notes

Level NumberExercise for you

01 EMP-DET PIC X(57) VALUE ‘E22 RAM PRASAD K 25000D120110227’.

EMP-DET

EMP-SAL DEPT-IDEMP-ID EMP-NAME EMP-JOIN-DT

MN LNFNMM DDYYYY

CC YY

Page 50: Cobol Notes

Level NumberExercise for you

01 EMP-DET PIC X(57) VALUE ‘E22 RAM PRASAD K 25000D120110227’.

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

Page 51: Cobol Notes

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?

Page 52: Cobol Notes

Topics to be covered on Day4

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

Page 53: Cobol Notes

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.

Page 54: Cobol Notes

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

0 0 2 0 0 0 0

E111RAMU0020000

SYSIN

Page 55: Cobol Notes

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

0 0 2 0 0 0 0

E111RAMU0020000

SYSIN E111

RAMU

0020000

EMP-ID

EMP-ID : E111

E111 RAMU

E111 RAMU 0020000

SPOOL

Page 56: Cobol Notes

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.

Page 57: Cobol Notes

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.

Page 58: Cobol Notes

Used to copy data from one field to another field or copy a literal to a field.

Eg : MOVE FIELD1 TO FIELD2, FIELD3.

ABC ABC ABC

MOVE Statement

Eg : MOVE ‘PQ’ TO FIELD2, FIELD3.

PQ PQ

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

Page 59: Cobol Notes

1. 9 9

2. 9 X

3. AA

4. AX

5. XX

Possible when only numeric data is moved otherwise abends with SOC7

6. X 9

7. X A Possible when only alphabetic data is moved otherwise abends with SOC7

8. 9 A

9. A 9

SOC7

SOC7

MOVE Rules

Page 60: Cobol Notes

Types of MOVE Statements

1. Elementary MOVE

2. Group MOVE

3. Corresponding MOVE

4. MOVE Reference Modification

Page 61: Cobol Notes

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

01 GRP1. 03 A PIC X(5) VALUE ‘ABC12’. 03 B PIC A(4) VALUE ‘PQRS’. 03 C PIC 9(3) VALUE ‘345’.

01 GRP2. 03 D PIC 9(2). 03 E PIC A(3). 03 F PIC X(2). 03 A PIC A(2).

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

Example

Elementary MOVE

Page 62: Cobol Notes

Moving data from one Group to another Group.

01 GRP1. 03 A PIC X(5) VALUE ‘ABC12’. 03 B PIC A(4) VALUE ‘PQRS’. 03 C PIC 9(3) VALUE ‘345’.

01 GRP2. 03 D PIC 9(2). 03 E PIC A(3). 03 F PIC X(2).

PROCEDURE DIVISION.MOVE GRP1 TO GRP2.

Example

ABC12PQRS345 ABC12PQ

Group MOVE

Page 63: Cobol Notes

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

01 WS-DATE1. 03 DD PIC X(2) VALUE ‘23’. 03 HYP1 PIC X(1) VALUE ‘-’. 03 MM PIC 9(2) VALUE 07. 03 HYP2 PIC X(1) VALUE ‘-’. 03 YYYY PIC X(4) VALUE ‘2011’.

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

PROCEDURE DIVISION. MOVE CORRESPONDING WS-DATE1 TO WS-DATE2.

Example

23-07-2011 2011/23/07

Corresponding MOVE

Page 64: Cobol Notes

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

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

Example

23

2011/23/07

2011/23 07

2011 23 07

23 07

MOVE Reference Modification

Page 65: Cobol Notes

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

have different level numbers?

Page 66: Cobol Notes

PERFORM StatementPERFORM 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

1. As INLINE PERFORM

2. As OUTLINE PERFORM

The above PERFORM statements can be coded in two ways :

Page 67: Cobol Notes

PERFORM StatementDifference 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 END-PERFORM.

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.

Page 68: Cobol Notes

Simple PERFORM StatementIt 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.

Page 69: Cobol Notes

Simple PERFORM StatementIt 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 DISPLAY A

ACCEPT A END-PERFORM.

DISPLAY A. PERFORM

DISPLAY A ACCEPT 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. DISPLAY A.

ACCEPT A.

Page 70: Cobol Notes

PERFORM Times StatementIt is used to execute the statements for a certain number of times.

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

PERFORM 3 TIMES ACCEPT ADISPLAY A

END-PERFORM.

Page 71: Cobol Notes

PERFORM Times StatementIt is used to execute the statements for a certain number of times.

INLINE 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. STOP RUN.

OUTLINE PERFORM

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.

Page 72: Cobol Notes

PERFORM Until StatementIt 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. ACCEPT A. PERFORM UNTIL A < 30 ACCEPT A DISPLAY A END-PERFORM. STOP RUN.

OUTLINE PERFORM

DATA DIVISION. WORKING-STORAGE SECTION. 01 APIC 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.

Page 73: Cobol Notes

PERFORM Until StatementIt 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 I PIC 9(1).

PROCEDURE DIVISION.

PERFORM UNTIL I > 10 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 UNTIL I > 10.

STOP RUN. PARA1.

ACCEPT A. DISPLAY A. ADD +1 TO I.

Page 74: Cobol Notes

PERFORM Until StatementIt 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 PERFORMDATA DIVISION. WORKING-STORAGE SECTION. 01 A PIC X(5) VALUE ‘0’. 01 I PIC 9(1).PROCEDURE DIVISION. PERFORM UNTIL I > 10

ACCEPT A DISPLAY A ADD +1 TO I END-PERFORM. STOP RUN.

OUTLINE PERFORMDATA 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 TO I.

Page 75: Cobol Notes

PERFORM Varying Until StatementIt is used to execute the statements based on conditions similar to PERFORM UNTIL

statement.INLINE PERFORM

PROCEDURE DIVISION. MOVE 1 TO I. PERFORM UNTIL I > 10

ACCEPT A DISPLAY A

ADD +1 TO I END-PERFORM. STOP RUN.

OUTLINE PERFORMPROCEDURE DIVISION. MOVE 1 TO I. PERFORM PARA1 UNTIL I > 10. STOP RUN. PARA1.

ACCEPT A. DISPLAY A. ADD +1 TO I.INLINE PERFORM

PROCEDURE DIVISION. PERFORM VARYING I FROM 1 BY 1

UNTIL I > 10 ACCEPT A DISPLAY A

END-PERFORM. STOP RUN.

OUTLINE PERFORMPROCEDURE DIVISION. PERFORM PARA1 VARYING I FROM 1

BY 1 UNTIL I > 10.

STOP RUN. PARA1. ACCEPT A. DISPLAY A.

Page 76: Cobol Notes

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

Page 77: Cobol Notes

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.

A123 RAMU 10000 HYDA124 SOMU 20000 CHEA125 SOMU 30000 HYDA126 SOMU 25000 MUM

ACCT-FILE

Page 78: Cobol Notes

Steps involved in using files in a COBOL program

1. Declaring the files.

2. Declaring the record structures for each file.

3. Opening the files.

4. Processing the file data.

5. Closing the files.

Page 79: Cobol Notes

Declaring files

Files to be used in the program must be declared as follows :

ENVIRONMENT DIVISION.INPUT-OUTPUT SECTION.FILE-CONTROL.

SELECT EMP-FILE1 ASSIGN TO DISK1.SELECT EMP-FILE2 ASSIGN TO DISK2.

Logical filename Physical Hardware Device Name /

Physical File name

Page 80: Cobol Notes

Declaring the record structures

Record structures are declared as follows :

DATA DIVISION.FILE SECTION.FD EMP-FILE1.01 EMP-REC1.

03 EMP-ID PIC X(10).03 EMP-NAME PIC A(30).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(07). 05 NET PIC 9(07).

FD EMP-FILE2.01 EMP-REC2 PIC X(74).

Page 81: Cobol Notes

Opening the files

OPEN statement is used to make the files available for the program’s 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.

Page 82: Cobol Notes

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.

Page 83: Cobol Notes

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.

Page 84: Cobol Notes

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 ENDis executed 1 time i.e., for (N+1)th time. So, READ statement is executed N+1 times.

It is executed when it is unable to retrieve records

It is executed when it retrieves a record

Page 85: Cobol Notes

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 PIC X(74).FD EMP-FILE2.01 EMP-REC2 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 TO EMP-REC2 WRITE EMP-REC2END-READ.

Page 86: Cobol Notes

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-REC1END-READ.

Page 87: Cobol Notes

Closing Files

CLOSE EMP-FILE1, EMP-FILE2, EMP-FILE3.CLOSE EMP-FILE4.

CLOSE statement is used to terminate the program access on the file data.

Page 88: Cobol Notes

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.

Page 89: Cobol Notes

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.

Page 90: Cobol Notes

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.

Page 91: Cobol Notes

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 PIC X(74).FD EMP-FILE2.01 EMP-REC2 PIC X(74).FD EMP-FILE3.01 EMP-REC3 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.

Page 92: Cobol Notes

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 PIC X(74).FD EMP-FILE2.01 EMP-REC2 PIC X(74).FD EMP-FILE3.01 EMP-REC3 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.

Page 93: Cobol Notes

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 PIC X(74).FD EMP-FILE2.01 EMP-REC2 PIC X(74).FD EMP-FILE3.01 EMP-REC3 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.

Page 94: Cobol Notes

Questions

1. Files are declared in which DIVISION?2. Why do we OPEN files?3. What type of dataset is a file?4. How do you retrieve records from a file?5. To retrieve N records, how many times READ statement must be executed?6. 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?

Page 95: Cobol Notes

Topics to be covered on Day7

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

Page 96: Cobol Notes

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

Page 97: Cobol Notes

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

Page 98: Cobol Notes

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.

Page 99: Cobol Notes

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.

Page 100: Cobol Notes

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.

Page 101: Cobol Notes

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

Page 102: Cobol Notes

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 PIC X(83).FD OT-FILE.01 OT-REC. 03 EMP-NUM PIC X(10). 03 OT-AMT PIC 9(07). 03 FILER PIC X(83).WORKING-STORAGE SECTION.01 WS-EOF-EMP PIC X(1) VALUE ‘N’.01 WS-EOF-OT PIC X(1) VALUE ‘N’.

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.

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.

Page 103: Cobol Notes

Topics to be covered on Day4

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

Page 104: Cobol Notes

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.

Page 105: Cobol Notes

REDEFINES clause

Example 1

01 A PIC X(5) VALUE ‘ABC12’.

01 B REDFINES A PIC X(4).

Page 106: Cobol Notes

REDEFINES clause

Example 2

01 A PIC X(5) VALUE ‘ABC12’.

01 B REDFINES A PIC 9(4).

PROCEDURE DIVISION.

MOVE 56 TO B.

DISPLAY A.

DISPLAY B.

Page 107: Cobol Notes

REDEFINES clause

Example 3

01 A PIC X(5) VALUE ‘ABC12’.

01 B REDFINES A PIC 9(4).

01 C REDFINES A PIC A(4).

01 D REDFINES A PIC X(3).

Page 108: Cobol Notes

REDEFINES clause

Example 3

01 A PIC X(5) VALUE ‘ABC12’.

01 B REDFINES A PIC 9(4).

01 C REDFINES B PIC A(4).

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

Page 109: Cobol Notes

REDEFINES clause

Example 3

01 A PIC X(5) VALUE ‘ABC12’.

01 B REDFINES A PIC 9(4).

01 C PIC A(4).

01 D REDFINES C PIC 9(4).

Page 110: Cobol Notes

REDEFINES clause

Example 3

01 A PIC X(5) VALUE ‘ABC12’.

01 B REDEFINES A PIC 9(7).

It is valid.

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

Page 111: Cobol Notes

REDEFINES clause

Example 3

01 A.

03 B PIC X(5) VALUE ‘ABC12’.

03 C REDEFINES B PIC A(4).

Page 112: Cobol Notes

REDEFINES clause

Example 3

01 A.

03 B PIC X(5) VALUE ‘ABC12’.

01 C

03 D REDEFINES B PIC A(4).

Invalid since B & D are not within same groups.

Page 113: Cobol Notes

REDEFINES clause

Example 3

01 A.

03 B PIC X(5) VALUE ‘ABC12’.

01 C REDEFINES A.

03 D PIC A(4).

Valid since C immediately follows A.

Page 114: Cobol Notes

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 PIC X(5). 03 B PIC A(5). 03 C. 05 D PIC 9(5). 05 E PIC A(5). 03 F. 05 G PIC 9(5). 05 H PIC A(5). 03 I PIC X(5). 03 J PIC A(5).

66 NEW-GRP2 RENAMES GRP1 B THRU G.66 NEW-GRP3 RENAMES GRP1 C THRU I.

Page 115: Cobol Notes

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.

Page 116: Cobol Notes

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-13. COMP-24. COMP-3 / PACKED-DECIMAL

Page 117: Cobol Notes

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 :

1 2 3 4

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

4321

Page 118: Cobol Notes

COMP USAGE

It is used to store data internally in binary format.Memory is occupied as follows :

S9(1) – S9(4) 2 BYTESS9(5) – S9(9) 4 BYTESS9(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.

Page 119: Cobol Notes

COMP-1 vs COMP-2

COMP-1

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

COMP-2

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

Page 120: Cobol Notes

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.

Page 121: Cobol Notes

COMP-3

Example for ODD Data Length :

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

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

1 3 5 7

2 4 6 D

Formula : (n+1) / 2

Page 122: Cobol Notes

COMP-3

Example for EVEN Data Length :

01 A PIC S9(6) COMP-3 VALUE 123456.

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

0 2 4 6

1 3 5 C

Formula : (n/2)+1

Page 123: Cobol Notes

STRING statement

STRING is used to concatenate more than one field into a single field.

Example : 01 FN PIC A(10) VALUE ‘ABDUL’.01 MN PIC A(10) VALUE ‘KALAM’.01 LN PIC A(10) VALUE ‘J’.

01 FULL-NAME PIC A(30).

PROCEDURE DIVISION.STRING FN,

MN,LN

INTO FULL-NAMEEND-STRING.DISPLAY FULL-NAME.

Page 124: Cobol Notes

STRING statement

STRING is used to concatenate more than one field into a single field.

Example : 01 FN PIC A(10) VALUE ‘ABDUL’.01 MN PIC A(10) VALUE ‘KALAM’.01 LN PIC A(10) VALUE ‘J’.

01 FULL-NAME PIC A(30).

PROCEDURE DIVISION.STRING FN DELIMITED BY ‘ ‘,

MN DELIMITED BY SPACE,LN

INTO FULL-NAMEEND-STRING.DISPLAY FULL-NAME.

Page 125: Cobol Notes

STRING statement

STRING is used to concatenate more than one field into a single field.

Example : 01 FN PIC A(10) VALUE ‘ABDUL’.01 MN PIC A(10) VALUE ‘KALAM’.01 LN PIC A(10) VALUE ‘J’.

01 FULL-NAME PIC A(30).01 WS-PNT PIC 9(5) VALUE 1.

PROCEDURE DIVISION.STRING FN DELIMITED BY ‘ ‘,

MN DELIMITED BY SPACE,LN

INTO FULL-NAMEWITH POINTER WS-PNTEND-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.

Page 126: Cobol Notes

UNSTRING statement

UNSTRING is used to deconcatenate/ distribute a single field into multiple fields.

Example : 01 FULL-NAME PIC A(30) VALUE ‘ABDUL KALAM J’.

01 FN PIC A(10).01 MN PIC A(10).01 LN PIC A(10).

PROCEDURE DIVISION.UNSTRING FULL-NAME INTO FN,

MN,LN

END-UNSTRING.

Page 127: Cobol Notes

UNSTRING statement

UNSTRING is used to deconcatenate/ distribute a single field into multiple fields.

Example : 01 FULL-NAME PIC A(30) VALUE ‘ABDUL KALAM J’.

01 FN PIC A(10).01 MN PIC A(10).01 LN PIC A(10).

PROCEDURE DIVISION.UNSTRING FULL-NAME

DELIMITED BY SIZE INTO FN,

MN,LN

END-UNSTRING.

Page 128: Cobol Notes

Report Generation Program

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

LICPOLICIES GENERATED FOR THE MONTH AUGUST

POLICY TYPE #COUNT $ PREM AMT

JB 3,124

$42,135,621.85 JS 4,345

$1,223,575,489.55

TOTAL 7,469 $1,265,711,111.40

P001 RAMU 100000 JB 2000P002 SOMU 200000 JS 3500P003 PINKY 300000 JS 5000P004 RINKY 250000 JS 4000P005 CINKY 350000 JB 4500P006 DINKY 150000 JS 2500

POL-FILE

POL-RPT

1 100

1331

Page 129: Cobol Notes

ID DIVISION. PROGRAM-ID. RPTPGM. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT POL-FILE ASSIGN TO DISK1. SELECT POL-RPT ASSIGN TO DISK2. DATA DIVISION. FILE SECTION. FD POL-FILE. 01 POL-REC. 03 POL-NUM PIC X(10). 03 POL-AMT PIC 9(9)V9(2). 03 PREM-AMT PIC 9(9)V9(2). 03 POL-TYPE PIC X(5). 03 FILLER PIC X(63). FD POL-RPT. 01 POL-RPT-REC PIC X(133). WORKING-STORAGE SECTION. 01 WS-EOF PIC X(1) VALUE 'N'. * REPORT LAYOUT BEGINS 01 WS-HEADER1. 03 FILLER PIC

X(65) VALUE SPACES. 03 FILLER PIC X(03) VALUE 'LIC'. 03 FILLER PIC X(65) VALUE SPACES. 01 WS-HEADER2. 03 FILLER PIC X(65) VALUE SPACES. 03 FILLER PIC X(03) VALUE ALL '-'. 03 FILLER PIC X(65) VALUE SPACES. 01 WS-HEADER3. 03 FILLER PIC X(35) VALUE SPACES. 03 FILLER PIC X(50) VALUE 'POLICIES - GENERATED FOR THE MONTH'. 03 WS-MONTH PIC X(13) VALUE SPACES. 03 FILLER PIC X(35) VALUE SPACES. 01 WS-HEADER4. 03 FILLER PIC X(35) VALUE SPACES. 03 FILLER PIC X(20) VALUE 'POL-TYPE'. 03 FILLER PIC X(20) VALUE '#POLICES'. 03 FILLER PIC X(23) VALUE ‘POL-AMT'. 03 FILLER PIC X(35) VALUE SPACES.

01 WS-RPT-LINE. 03 FILLER PIC X(25) VALUE SPACES. 03 WS-RPT-POL-TYPE PIC X(20) VALUE SPACES. 03 WS-RPT-POL-CNT PIC ZZZ,ZZZ,ZZ9. 03 WS-RPT-PREM-AMT PIC $$$,$$$,$$$,$$9.99. 03 FILLER PIC X(35) VALUE SPACES. * REPORT LAYOUT ENDS. 01 WS-COUNTERS. 03 WS-JB-PREM PIC 9(9). 03 WS-JB-CNT PIC 9(9). 03 WS-JS-CNT PIC 9(9). 03 WS-JS-PREM PIC 9(9)V9(2). 03 WS-TOT-CNT PIC 9(9). 03 WS-TOT-PREM PIC 9(9)V9(2). 01 WS-DATE PIC X(6). PROCEDURE DIVISION. 0000-MAIN-PARA. PERFORM 1000-INITIALIZE-PARA. PERFORM 2000-READ-PARA. PERFORM 3000-PROCESS-PARA UNTIL WS-EOF = 'Y'. PERFORM 4000-WRITE-REPORT. PERFORM 9000-CLOSE-PARA. STOP RUN. 1000-INITIALIZE-PARA. INITIALIZE WS-COUNTERS , WS-DATE. ACCEPT WS-DATE FROM DATE. EVALUATE WS-DATE(3:2) WHEN'01' MOVE 'JANUARY' TO WS-MONTH WHEN '02' MOVE 'FEBRUARY' TO WS-MONTH END-EVALUATE. OPEN INPUT POL-FILE. OPEN OUTPUT POL-RPT.

2000-READ-PARA. READ POL-FILE AT END MOVE 'Y' TO WS-EDF 3000-PROCESS-PARA. EVALUATE POL-TYPE WHEN 'JB' ADD +1 TO WS-JB-CNT ADD PREM-AMT TO WS-JB-PREM WHEN 'JS' ADD +1 TO WS-JS-CNT ADD PREM-AMT TO WS-JS-PREM END-EVALUATE. PERFORM 2000-READ-PARA. 4000-WRITE-REPORT. WRITE POL-RPT-REC FROM WS-HEADER1. WRITE POL-RPT-REC FROM WS-HEADER2. WRITE POL-RPT-REC FROM WS-HEADER3. WRITE POL-RPT-REC FROM WS-HEADER4.

MOVE 'JB' TO WS-RPT-POL-TYPE. MOVE WS-JB-CNT TO WS-RPT-POL-CNT. MOVE WS-JB-PREM TO WS-RPT-AMT. WRITE POL-RPT-REC FROM WS-RPT-LINE.

MOVE 'JS' TO WS-RPT-POL-TYPE. MOVE WS-JS-CNT TO WS-RPT-POL-CNT. MOVE WS-JS-PREM TO WS-RPT-PREM-AMT. WRITE POL-RPT-REC FROM WS-RPT-LINE.

COMPUTE WS-TOT-CNT = WS-JB-CNT + WS-JS-CNT. COMPUTE WS-TOT-PREM = WS-JB-PREM + WS-JS-PREM.

MOVE 'TOTAL' TO WS-RPT-POL-TYPE. MOVE WS-TOT-CNT TO WS-RPT-POL-CNT. MOVE WS-TOT-PREM TO WS-RPT-PREM-AMT. WRITE POL-REC FROM WS-RPT-LINE.

9000-CLOSE-PARA. CLOSE POL-FILE,POL-RPT.

Page 130: Cobol Notes

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.

Page 131: Cobol Notes

Main Program Vs Sub ProgramID DIVISION.PROGRAM-ID. MP.DATA DIVISION.WORKING-STORAGE SECTION.01 SAL-DET. 03 BASIC PIC 9(5). 03 HRA PIC 9(5). 03 DA PIC 9(5). 03 PFF PIC 9(5).01 TOTALS. 03 GROSS PIC 9(7). 03 NET PIC 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 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, LS-TOTALS. COMPUTE LS-GROSS = LS-BASIC + LS-HRA + LS-DA + LS-PFF. COMPUTE LS-NET = LS-GROSS – LS-PFF. EXIT PROGRAM.

Page 132: Cobol Notes

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.

Page 133: Cobol Notes

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.

Page 134: Cobol Notes

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’ TO WS-PGM ELSE MOVE ‘SP2’ TO WS-PGM END-IF.

CALL WS-PGM.

Page 135: Cobol Notes

Static & Dynamic CALL

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

//DEMO EXEC PGM=IGYCRCTL, PARM=‘DYNAM’

Page 136: Cobol Notes

Initializing variables ID DIVISION.PROGRAM-ID. MP.DATA DIVISION.WORKING-STORAGE SECTION.01 SAL-DET. 03 BASIC PIC 9(5). 03 HRA PIC 9(5). 03 DA PIC 9(5). 03 PFF PIC 9(5).01 TOTALS. 03 GROSS PIC 9(7). 03 NET PIC 9(7).01 WS-SPGM 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, LS-TOTALS. COMPUTE LS-GROSS = LS-BASIC + LS-HRA + LS-DA + LS-PFF. COMPUTE LS-NET = LS-GROSS – LS-PFF. EXIT PROGRAM.

Page 137: Cobol Notes

Initializing variables ID DIVISION.PROGRAM-ID. MP.DATA DIVISION.WORKING-STORAGE SECTION.01 SAL-DET. 03 BASIC PIC 9(5). 03 HRA PIC 9(5). 03 DA PIC 9(5). 03 PFF PIC 9(5).01 TOTALS. 03 GROSS PIC 9(7). 03 NET PIC 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 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, LS-TOTALS. COMPUTE LS-GROSS = LS-BASIC + LS-HRA + LS-DA + LS-PFF. COMPUTE LS-NET = LS-GROSS – LS-PFF. EXIT PROGRAM.

Page 138: Cobol Notes

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.

Page 139: Cobol Notes

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 PIC X(10). 05 STUD10-NAME 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).

Page 140: Cobol Notes

Arrays

Array Life Cycle

1. Declaring array2. Loading the data into array.3. Fetching the data from array.

Page 141: Cobol Notes

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 STUD-ID(1) ACCEPT STUD-NAME(1) ACCEPT STUD-ID(2) ACCEPT STUD-NAME(2) ACCEPT STUD-ID(3) ACCEPT STUD-NAME(3)

Page 142: Cobol Notes

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.

Page 143: Cobol Notes

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

Page 144: Cobol Notes

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 9(2).01 J 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.

Page 145: Cobol Notes

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.

Page 146: Cobol Notes

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

Page 147: Cobol Notes

Files used for programming

S01 RAMU S02 SOMU S03 RINKY S04 DINKY S15 DINKY

1 600

S01 RAMUS02 SAMUS03 EAMUS04 WAMU

S15 QUMU

1 40

STUD-FILE1

STUD-FILE2

S01 RAMU S02 SAMU S03 EAMU S04 WAMU S05 QUMUS06 S10S11 RAMU S15

STUD-FILE3

1 200

Page 148: Cobol Notes

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 FROM STUD-DET.

9000-CLOSE-PARA. CLOSE STUD-FILE1.

Page 149: Cobol Notes

Files used for programming

S01 RAMU S02 SOMU S03 RINKY S04 DINKY S15 DINKY

1 600

S01 RAMUS02 SAMUS03 EAMUS04 WAMU

S15 QUMU

1 40

STUD-FILE1

STUD-FILE2

S01 RAMU S02 SAMU S03 EAMU S04 WAMU S05 QUMUS06 S10S11 RAMU S15

STUD-FILE3

1 200

Page 150: Cobol Notes

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 PIC 9(2) VALUE 1. 01 WS-EOF 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. OPEN OUTPUT STUD-FILE2.

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.

Page 151: Cobol Notes

Files used for programming

S01 RAMU S02 SOMU S03 RINKY S04 DINKY S15 DINKY

1 600

S01 RAMUS02 SAMUS03 EAMUS04 WAMU

S15 QUMU

1 40

STUD-FILE1

STUD-FILE2

S01 RAMU S02 SAMU S03 EAMU S04 WAMU S05 QUMUS06 S10S11 RAMU S15

STUD-FILE3

1 200

Page 152: Cobol Notes

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 PIC 9(2) VALUE 1. 01 WS-EOF PIC X(1) VALUE ‘Y’.

PROCEDURE DIVISION.0000-MAIN-PARA. PERFORM 1000-INITIALIZE-PARA. PERFORM 2000-READ-PARA. PERFORM 3000-PROCESS-PARA UNTIL WS-EOF = ‘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.

Page 153: Cobol Notes

Array Declaration using Subscript and Index

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

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.

ID DIVISION.PROGRAM-ID. FLPROG1.

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

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.

Page 154: Cobol Notes

Index

When array is declared using Index, an INDEX REGISTER is created internally which stores the occurrence number and its corresponding displacement value.

INDEX NUMBER INDEX VALUE 1 0

2 40 3 80 4 120 5 160

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 2 3 4 5

1 40 41 80 81 120 121 160 161 200

Page 155: Cobol Notes

Subscript Vs Index

SUBSCRIPT

1.It is the occurrence number of an array element.

2.It is declared as a separate variable in WORKING-STORAGE 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.

INDEX

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.

Page 156: Cobol Notes

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 multi-dimensional 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.

Page 157: Cobol Notes

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.

Page 158: Cobol Notes

Write a program taking POL-FILE and MED-FILE as input to generate POL-MED-FILE 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 PIC X(30). FD POL-MED-FILE. 01 POL-MED-REC. 03 FILLER 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'. 01 WS-ARRAY. 03 WS-ARR-MED-REC OCCURS 10 TIMES ASCENDING KEY IS WS-ARR-MED-CD

INDEXED BY IX1. 05 WS-ARR-MED-CD PIC X(10). 05 WS-ARR-MED-DESC PIC X(30).

PROCEDURE DIVISION. 0000-MAIN-PARA. PERFORM 1000-INITIALIZATION-PARA. PERFORM 2000-READ-MED. PERFORM 1500-LOAD-ARRAY UNTIL WS-EOF-MED = 'Y'. PERFORM 2500-READ-POL. PERFORM 3000-PROCESS-PARA UNTIL WS-EOF-POL = '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) = POL-MED-CD MOVE WS-ARR-MED-DESC(IX1) TO POL-MED-DESC END-SEARCH. WRITE POL-MED-REC. PERFORM 2500-READ-POL. 9000-CLOSE-PARA. CLOSE POL-FILE, MED-FILE , POL-MED-FILE.