Download - Cobol Notes

Transcript

Common Business oriented Language

Sridhar Babu Purama

COBOL

• COBOL stands for Common Business Oriented Language.

• It is the primary programming language used for developing applications on Mainframe.

• Even today, COBOL is treated as the BEST programming language for developing business applications.

History of COBOL

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

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.

Advantages & Disadvantages of COBOL

Advantages :

• COBOL is a very much English-like Language.

• COBOL is first widely used high-level programming Language

• It is structured programming language.

• It is a free source.

• It is platform-independent (Can be run under any OS).

Disadvantages :

• .It has a very lengthy coding.

• We can use ONLY simple arithmetic operations( + , - , x , / ) and cannot use for any scientific calculations.

COBOL Program Structure

COBOL Program

DIVISIONS

SECTIONS

PARAGRAPHS

SENTENCES

STATEMENTS

COBOL Program Structure

1. IDENTIFICATION DIVISION.

2. ENVIRONMENT DIVISION.

3. DATA DIVISION.

4. PROCEDURE DIVISION.

There are four DIVISIONS in a COBOL program.

IDENTIFICATION DIVISION

It specifies the program details to the system.

There are no SECTIONS but has the following PARGRAPHS.

IDENTIFICATION DIVISION.

PROGRAM-ID. PROG1.

AUTHOR. RAMESH. / WIPRO.

DATE-WRITTEN. 25-11-2011.

DATE-COMPILED. 28 NOV 2011.

INSTALLATION. HDFC.

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.

IDENTIFICATION DIVISION

It specifies the program details to the system.

There are no SECTIONS but has the following PARGRAPHS.

IDENTIFICATION DIVISION.

PROGRAM-ID. PROG1.

AUTHOR. RAMESH. / WIPRO.

DATE-WRITTEN. 25-11-2011.

DATE-COMPILED. 28 NOV 2011.

INSTALLATION. HDFC.

It specifies the coder name who has written the program.

IDENTIFICATION DIVISION

It specifies the program details to the system.

There are no SECTIONS but has the following PARGRAPHS.

IDENTIFICATION DIVISION.

PROGRAM-ID. PROG1.

AUTHOR. RAMESH. / WIPRO.

DATE-WRITTEN. 25-11-2011.

DATE-COMPILED. 28 NOV 2011.

INSTALLATION. HDFC.

It specifies the date on which the program has been written.

IDENTIFICATION DIVISION

It specifies the program details to the system.

There are no SECTIONS but has the following PARGRAPHS.

IDENTIFICATION DIVISION.

PROGRAM-ID. PROG1.

AUTHOR. RAMESH. / WIPRO.

DATE-WRITTEN. 25-11-2011.

DATE-COMPILED. 28 NOV 2011.

INSTALLATION. HDFC.

It specifies the date on which the program has been compiled.

IDENTIFICATION DIVISION

It specifies the program details to the system.

There are no SECTIONS but has the following PARGRAPHS.

IDENTIFICATION DIVISION.

PROGRAM-ID. PROG1.

AUTHOR. RAMESH. / WIPRO.

DATE-WRITTEN. 25-11-2011.

DATE-COMPILED. 28 NOV 2011.

INSTALLATION. HDFC. It specifies the client name for whom the S/W program is being developed.

ENVIRONMENT DIVISION

It specifies the system configuration and about the files to be used in the program.

It has two SECTIONS and each SECTION has two PARAGRAPHS. .

ENVIRONMENT DIVISION.CONFIGURATION SECTION.SOURCE-COMPUTER. IBM 3270.OBJECT-COMPUTER. IBM 3278.

INPUT-OUTPUT SECTION.FILE-CONTROL.I-O-CONTROL.

ENVIRONMENT DIVISION

It specifies the system configuration and about the files to be used in the program.

It has two SECTIONS and each SECTION has two PARAGRAPHS. .

ENVIRONMENT DIVISION.CONFIGURATION SECTION.SOURCE-COMPUTER. IBM 3270.OBJECT-COMPUTER. IBM 3278.

INPUT-OUTPUT SECTION.FILE-CONTROL.I-O-CONTROL.

It specifies the computer model used for compilation.

ENVIRONMENT DIVISION

It specifies the system configuration and about the files to be used in the program.

It has two SECTIONS and each SECTION has two PARAGRAPHS. .

ENVIRONMENT DIVISION.CONFIGURATION SECTION.SOURCE-COMPUTER. IBM 3270.OBJECT-COMPUTER. IBM 3278.

INPUT-OUTPUT SECTION.FILE-CONTROL.I-O-CONTROL.

It specifies the computer model used for execution.

ENVIRONMENT DIVISION

It specifies the system configuration and about the files to be used in the program.

It has two SECTIONS and each SECTION has two PARAGRAPHS. .

ENVIRONMENT DIVISION.CONFIGURATION SECTION.SOURCE-COMPUTER. IBM 3270.OBJECT-COMPUTER. IBM 3278.

INPUT-OUTPUT SECTION.FILE-CONTROL.I-O-CONTROL. All the files used in the program are declared here.

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.FILE SECTION.WORKING-STORAGE SECTION.LINKAGE SECTION.REPORT SECTION.SCREEN SECTION.

All file related fields are declared here

DATA DIVISION

All kinds of field declarations are done here..

It has the following SECTIONS.

DATA DIVISION.FILE SECTION.WORKING-STORAGE SECTION.LINKAGE SECTION.REPORT SECTION.SCREEN SECTION.

All the temporary fields are declared here

DATA DIVISION

All kinds of field declarations are done here..

It has the following SECTIONS.

DATA DIVISION.FILE SECTION.WORKING-STORAGE SECTION.LINKAGE SECTION.REPORT SECTION.SCREEN SECTION.

Fields used to pass data between programs are declared here.

DATA DIVISION

All kinds of field declarations are done here..

It has the following SECTIONS.

DATA DIVISION.FILE SECTION.WORKING-STORAGE SECTION.LINKAGE SECTION.REPORT SECTION.SCREEN SECTION. These SECTIONS are no more used.

PROCEDURE DIVISION

All COBOL executable statements i.e., Logics i.e., Instructions are written in this DIVISION. So, execution begins from this DIVISION.

It has no System-defined SECTIONS or PARAGRAPHS.

COBOL Coding Sheet

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

Column 1 – 6 => Sequence Number

Column 1 – 3 => Page Number

Column 4 – 6 => Line Number

Column 7 => Special Use

‘*’ indicates commenting a line.

‘-’ indicates continuation of a string.

‘/’ indicates print from next page.Column 8 – 11 => AREA A

(DIVISION, SECTIONS, PARAGRAPHS, Level Numbers)

Column 12 – 72 => AREA B (COBOL Executable Statements)

Column 73 – 80 => User Comments

Steps involved in developing a S/W program

1. Design the program logic.

2. Code the program using COBOL programming language.

Eg : IDENTIFICATION DIVISION. PROGRAM-ID. PROG1. PROCEDURE DIVISION.

DISPLAY ‘WELCOME TO TALENT WINGS’.STOP RUN.

3. Compile the program using COBOL compiler utility – IGYCRCTL.

Compilation is the process of checking syntax errors and converting Source code (COBOL Program) into Object Module (Machine Language).

4. LINK-EDIT the programs using the utilities IEWL / HEWL.

LINK-EDIT is the process of linking Object Modules of related programs into a single Executable LOAD MODULE.

5. Test the program by executing the Load Module.

Sample COBOL Program

Write a program to accept Employee Details (EMP-ID, BASIC, HRA, DA, PFF), calculate the GROSS & NET salaries and display them in the Output.

IDENTIFICATION DIVISION.PROGRAM-ID. PROG1.DATA DIVISION.WORKING-STORAGE SECTION.01 EMP-DET. 03 EMP-ID PIC X(10). 03 SAL-DET. 05 BASIC PIC 9(5). 05 HRA PIC 9(5). 05 DA PIC 9(5). 05 PFF PIC 9(5). 05 GROSS PIC 9(7). 05 NET PIC 9(7).

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

Sample COBOL Program

Write a program to accept Student Details (STUD-ID, SUB1, SUB2, SUB3), calculate the Total Marks & Percentage and display them in the Output.

IDENTIFICATION DIVISION.PROGRAM-ID. PROG1.DATA DIVISION.WORKING-STORAGE SECTION.01 STUD-DET.. 03 STUD-ID PIC X(10). 03 MARKS. 05 SUB1 PIC 9(3). 05 SUB2 PIC 9(3). 05 SUB3 PIC 9(3). 05 TOTMKS PIC 9(3). 05 PRCNT PIC 9(3).

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

Questions

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

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

Level Number

Field Name /Variable Name /

Data Name / Data Item

PIC Clause

Data Type

Data Length

VALUE Clause

Literal

Literal

Literal is a constant data / hard-coded value assigned to a field.

For Alphabetic & Alphanumeric data types, literal must be enclosed within quotes ‘ ‘.

For Numeric data types, literal must not be enclosed within quotes.

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

VALUE clause

VALUE clause is used to assign the data statically to a field i.e., before execution (during compilation).

It is used to reduce the execution time by assigning the data before execution itself.

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

Data Length

It specifies the maximum number of characters that can be assigned to a field.

To store n characters, system allocates n bytes of memory in buffer.

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

Data Type

It is used to control the data entry into the field.

There are three data types in COBOL.

1. A (Alphabetic Data Type)

2. X (Alphanumeric Data Type)

3. 9 (Numeric Data Type)

Data Type

A (Alphabetic data type)

• It allows to store only Alphabetic data (A – Z).• We can specify a maximum data length of 32767 characters.• Data alignment is Left-Justified.• Default values are SPACES.

Example

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

1 30

ABDUL KALAM J

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

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

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

Data Type

S (Sign)

• It is used to store sign value (+ or - ).• It does not occupy any space for storing sign value.

Example

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

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

Data Type

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

PIC Clause

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

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

Field Name

It is used to identify a specific memory in the buffer.

Rules for defining a field name :

1. Field name can be made of alphabets, numerals, ‘-’ and national characters ( @, #, $ ).

2. Field name can begin with alphabetic or national character.

3. Field name can be maximum 30 characters long.

Field Declaration

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

Level Number

Field Name /Variable Name /

Data Name / Data Item

PIC Clause

Data Type

Data Length

VALUE Clause

Literal

Level Number

It is used to describe the data hierarchy.

We can use level numbers 01 to 49 and special level numbers 66, 77 and 88.

Level Number

Level Numbers 01 to 49 are used as follows :

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

EMP-NAME

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

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

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

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

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

Questions

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

Topics to be covered on Day4

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

Sample COBOL Program

Write a program to accept Employee Details (EMP-ID, BASIC, HRA, DA, PFF), calculate the GROSS & NET salaries and display them in the Output.

IDENTIFICATION DIVISION.PROGRAM-ID. PROG1.DATA DIVISION.WORKING-STORAGE SECTION.01 EMP-DET. 03 EMP-ID PIC X(10). 03 SAL-DET. 05 BASIC PIC 9(5). 05 HRA PIC 9(5). 05 DA PIC 9(5). 05 PFF PIC 9(5). 05 GROSS PIC 9(7). 05 NET PIC 9(7).

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

ACCEPT Statement

ACCEPT Statement is used to dynamically assign data to fields i.e., during execution.

Each ACCEPT statement can take ONLY one variable value. So, for N values we need N ACCEPT statements.

It stores the data as Left-Justified irrespective of data types.

DATA DIVISION.WORKING-STORAGE SECTION.01 EMP-DET. 03 EMP-ID PIC X(10). 03 EMP-NAME PIC A(30). 03 EMP-SAL PIC 9(07).

PROCEDURE DIVISION. ACCEPT EMP-ID. ACCEPT EMP-NAME. ACCEPT EMP-SAL.

E111

RAMU

0 0 2 0 0 0 0

E111RAMU0020000

SYSIN

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

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.

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.

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

Types of MOVE Statements

1. Elementary MOVE

2. Group MOVE

3. Corresponding MOVE

4. MOVE Reference Modification

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

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

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

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

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?

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 :

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.

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.

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.

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.

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.

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.

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.

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.

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.

Topics to be covered on Day6

Introduction to File Programming

- Data organization in files

- Steps involved in using files in a COBOL program

- Sample COBOL programs using files

Data Organization in Files

• A PS dataset is usually termed as a FILE. PS dataset has no partitions and so Directory blocks must always be zero.

• A FILE is a collection of RECORDS.• A RECORD is a collection of FIELDS.• A FIELD is a collection of characters.

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

ACCT-FILE

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.

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

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

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.

OPEN MODES

OPEN MODES specify the type of access on the file data.

• INPUT Mode allows to just read the file data. File must be an existing one. More than one program (user) can access the same file in INPUT mode.

• OUTPUT Mode allows to write new data into files. File can be a new one or an existing one. Only one program (user) can access the file in OUTPUT mode.

• I-O Mode allows to read & modify existing data and write new data into files. File must be an existing one. Only one program (user) can access the file in I-O mode.

• EXTEND Mode allows to write new data into files which is appended. File can be a new one or an existing one. Only one program (user) can access the file in EXTEND mode.

Note : When WRITE operation is used on a file used in OUTPUT or I-O mode, the new record written will replace all records. In case of EXTEND mode, the records are added to existing records.

Processing the file data

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

READ Statement : It allows to retrieve records from file.

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

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

READ Statement

READ statement is used to retrieve a single record from the file.

Syntax :

READ EMP-FILE1 AT END ST1 ST2 NOT AT END ST3 ST4 END-READ.

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

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.

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.

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.

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

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.

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.

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?

Topics to be covered on Day7

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

IF Statement

IF Statement is used to conditionally execute the statements.When the condition specified is true, the statements execute.

Syntax :IF < COND1 >

ST1 ST2 END-IF. Nested IF ELSE statement :Syntax :

IF < COND1 > ST1 ST2

ELSE IF < COND2 > ST3 ST4 ELSE ST5 END-IF

END-IF.

When Condition is true, IF statement executes

When Condition is false, ELSE part executes

Example : PROCEDURE DIVISION.

ACCEPT STUD-PRCNT.IF STUD-PRCNT >= 60 AND STUD-PRCNT <= 100 DISPLAY ‘FIRST DIVISION’ELSE

IF STUD-PRCNT >= 50 AND STUD-PRCNT < 60 DISPLAY ‘SECOND DIVISION’

ELSE IF STUD-PRCNT >= 35 AND STUD-PRCNT < 50

DISPLAY ‘THIRD DIVISION’ ELSE

DISPLAY ‘FAIL’ END-IF END-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.

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

Write a program taking FILE1 & FILE2 as input and write matched records into FILE3 and unmatched records into FILE4

Assume FILE1 and FILE2 are in sorted order based on key fields.

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

WS-EOF1 = ‘Y’ OR WS-EOF2 = ‘Y’. PERFORM 4000-WRITE-UNMATCH-PARA. PERFORM 9000-CLOSE-PARA. STOP RUN.

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

Write a program taking EMP-FILE and OT-FILE as input, add OT-AMT from OT-FILE 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 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.

Topics to be covered on Day4

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

REDEFINES clause

REDEFINES clause is used to save the storage space by allocating the same memory to multiple fields.

REDEFINES will allow multiple fields to reuse the memory irrespective of data types.

REDEFINES RULES :

1. REDEFINES can be used with level numbers 01 to 49.

2. REDEFINING and REDEFINED fields must be at the same level number.

3. REDEFINING field must immediately follow the REDEFINED field.

4. We can REDEFINE only a memory which is shorter or equal in length.

REDEFINES clause

Example 1

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

01 B REDFINES A PIC X(4).

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.

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

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.

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

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.

REDEFINES clause

Example 3

01 A.

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

03 C REDEFINES B PIC A(4).

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.

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.

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.

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

DISPLAY USAGE

It is used to store data internally in binary format where each byte occupies only one byte.

Example : 01 A PIC S9(4) VALUE 1234.

It occupies 4 bytes as follows :

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

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.

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

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

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

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.

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.

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.

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.

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.

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

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.

Sub-Programs

Sub Programs are used for reusability of code i.e., more than one program can reuse the same code written in a sub-program.

CALL Statement is used to pass control from one program to another program.

The program which is used to pass the control is Main Program/Calling Program.

The program which is used to receive the control is Sub Program/Sub Routine/Called Program.

Main Program Vs Sub 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.

Main Program Vs Sub Program

Main Program

1. It is the calling program.2. Control & data are passed using

CALL statement.3. Actual Parameters are declared

in WORKNG-STORAGE SECTON.4. STOP RUN is coded.

Sub-Program

1. It is the Called Program.2. Control & data are received at

PROCEDURE DIVISION USING statement.3. Formal Parameters are declared in

LINKAGE SECTION.4. EXIT PROGRAM is coded.

CALL BY REFERENCE : When formal parameters are changed, the actual parameters also get affected since both are allocated the same memory.

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

Main Program Vs Sub Program

Static CALL

1. Linking object modules before execution.

2. Compiler option is NODYNAM.3. In terms of processing, it is fast.4. In terms of load module, it is

large.5. Sub-program name is specified in

the CALL statement as follows : CALL ‘SP’ - - - - -

6. Each time sub-program is compiled, main program also must be compiled.

7. Example :IF A > B CALL ‘SP1’

ELSE CALL ‘SP2’END-IF.

Dynamic CALL

1. Linking object modules during execution.

2. Compiler option is DYNAM..3. It is slow.4. It is small.5. Variable name is specified.

CALL WS-PGM - - - - -

6. Need not be compiled.

7. Example :

IF A > B MOVE ‘SP1’ TO WS-PGM ELSE MOVE ‘SP2’ TO WS-PGM END-IF.

CALL WS-PGM.

Static & Dynamic CALL

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

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

Initializing variables ID DIVISION.PROGRAM-ID. MP.DATA DIVISION.WORKING-STORAGE 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.

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.

Arrays

Array is a collection of similar data items (Same Data Types and Data lengths).In COBOL, we can use upto a 3-dimentional array.

Arrays are declared using OCCURS clause.

Uses of Arrays :1. Coding effort is reduced in declaring similar fields.2. Processing array data is fast compared to normal declaration.

Normal Declaration Vs Arrays

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

03 STUD10. 05 STUD10-ID 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).

Arrays

Array Life Cycle

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

Exercise

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

Arrays

Array Life Cycle

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

Files used for programming

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

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.

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

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.

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

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.

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.

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

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.

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.

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