Cobol Day 3and4

  • Uploaded by: api-3838727
  • 0
  • 0
  • November 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Cobol Day 3and4 as PDF for free.

More details

  • Words: 3,349
  • Pages: 84
COBOL (COMMON BUSINESS ORIENTED LANGUAGE)

Overview

COBOL Fundamentals DAY3

SEQUENCE CONTROL verbs 

GO TO



IF . . . THEN . . .



PERFORM



EVALUATE



STOP RUN

GO TO Verb



Syntax-1 GO TO paragraph-name.



Example GO TO 400-READ-PARA.

GO TO . .



Syntax-2 GO TO paragraph-name-1 [paragraph-name-2 ]

Example GO TO 500-INSERT-PARA, 600-UPDATE-PARA, 700-DELETE-PARA DEPENDING ON TRANS-CODE.

IF statement 

Syntax-1 IF condition [ THEN ] {statement-1, NEXT SENTENCE} [ELSE {statement-2, NEXT SENTENCE}] [ END-IF ].



Examples (1) IF MARKS >= 80 THEN MOVE ‘A’ TO GRADE ELSE MOVE ‘B’ TO GRADE END-IF. (2) IF NOT OK-BALANCE THEN MOVE 2 TO BALANCECODE ELSE NEXT-SENTENCE END-IF

Relation Conditions [ NOT] GREATER THAN    [ NOT] >    [ NOT] LESS THAN   [ NOT] <   Identifier      [ NOT] EQUAL TO   Literal  IS    ArithmeticExpression  [ NOT] =       GREATER THAN OR EQUAL TO   >=     LESS THAN OR EQUAL TO   <= 

 Identifier     Literal   ArithmeticExpression   

IF statement 

Syntax-2 ( Nested IF ) IF condition-1 [ THEN ] statement-1 ELSE IF condition-2 [ THEN ] statement-2 ELSE statement-3 END-IF END-IF.



Example IF ( Var1 < 10 ) THEN DISPLAY “Zero” ELSE IF Var2 = 14 THEN DISPLAY “First” ELSE DISPLAY “Second” END-IF END-IF.

Sign condition



Syntax

POSITIVE    Arithmetic Expression IS [ NOT] NEGATIVE ZERO    Example IF DISCRIMINANT IS NEGATIVE THEN DISPLAY “The roots are imaginary”.

Class condition  NUMERIC   ALPHABETIC    Identifier IS [NOT]  ALPHABETIC - LOWER   ALPHABETIC - UPPER     UserDefinedClassName 



Syntax

Example IF REGNO IS NOT NUMERIC THEN DISPLAY “Records will not be sorted”.

Compound Condition



Syntax Condition-1 { AND, OR } Condition-2



Examples (1) IF PERCENT > 80 AND TOTAL > 480 THEN MOVE ‘A’ TO GRADE. (2) IF ROW-NUMBER > 24 OR COLUMN > 80 THEN DISPLAY “Page Error ! “.

Defining Condition Names.  VALUE   88 ConditionName   VALUES 

 Literal     THROUGH     HighValue   LowValue  THRU    



Condition Names are defined using the special level number 88 in the DATA DIVISION of a COBOL program.



They are defined immediately after the definition of the data item with which they are associated with.



We can use Condition Names for a group as well as an elementary item.



A condition name takes the value TRUE or FALSE depending on the value of the data item with which it is associated. The VALUE clause of the associated data item is used to identify the values which make the Condition Name TRUE.

Condition Names 

Are essentially boolean variables.



Are always associated with data names called condition variables.



Is defined in the DATA DIVISION with level number 88.



Syntax 88 condition-name {VALUE IS, VALUES ARE } literal-1 [ { THRU, THROUGH } literal-2 ].

Condition-Names .. example 01 MARITAL-STATUS PIC 9.

Condition Names

88 88 88 88 88 88

SINGLE VALUE IS ZERO. MARRIED VALUE IS 1. WIDOWED VALUE IS 2. DIVORCED VALUE IS 3. ONCE-MARRIED VALUES ARE 1, 2, 3. VALID-STATUS VALUES ARE 0 THRU 3.

PROCEDURE DIVISION Statements. DISPLAY ‘ENTER MARTIAL STATUS.:’. ACCEPT MARITAL-STATUS. IF SINGLE SUBTRACT 125 FROM DEDUCTIONS. IF ONCE-MARRIED ADD 300 TO SPECIAL-PAY. IF MARRIED PERFORM B000-MARRIAGE-GIFT.

Martial-status = 0

Martial-status = 2

Martial-status = 1

JCL 000100 //ER4857C JOB ,,NOTIFY=&SYSUID,CLASS=B 000500 //STEP1 EXEC PGM=COND88 000700 //STEPLIB DD DSN=OPERN.CICS3.LOADLIB,DISP=SHR 000800 //SYSIN DD * 000900 050 Before

001000 081 001100 /*

WS00-MARKS

000

WS00-DISP After

Before WS00-MARKS WS00-DISP

WS00-MARKS

050

WS00-DISP

NOT CLEARED COMPRE

After 000

WS00-MARKS

081

WS00-DISP

PASSED COMPRE

The PERFORM Verb 

Iteration constructs are used when we need to repeat the same instructions over and over again in our programs.



Other programming languages have a variety of iteration / looping constructs (e.g. WHILE, FOR, REPEAT). Each of these in turn facilitate the creation of different ‘types’ of iteration structure.



In COBOL we have ‘PERFORM’ verb which is used to create these looping constructs. The PERFORM has several variations each of which simulates different looping constructs of other programming languages.

Paragraphs - Revisited 

A PARAGRAPH comprises of one or more sentences.



The paragraph-name indicates the start of a paragraph. The next paragraph or section name or the end of the program text terminates the paragraph.



Paragraph names are either user defined or language enforced. They are followed by a full stop.

 B0000-PERF-PARA.  PROGRAM-ID.

PERFORM Verb - variations 

Simple PERFORM



In-line PERFORM



Nested PERFORM



PERFORM . . . THRU



PERFORM . . . UNTIL



PERFORM . . . TIMES



PERFORM . . . VARYING

PERFORM Verb - Simple PERFORM 

Syntax PERFORM Paragraph-Name.



Example PERFORM 500-PROCESS-PARA.



This is not iterative but instructs the computer to execute the chunk of code inside the mentioned paragraph before reverting back to the sentence following the PERFORM coded.

PERFORM Verb – Simple PERFORM example

**************************************** WE ARE INSIDE B000-LAST-PARA

Output SPOOL

WE ARE INSIDE B001-FIRST-PARA WE ARE INSIDE B002-MIDDLE-PARA

PERFORM Verb 

In-line PERFORM

Syntax PERFORM imperative-statements.



Example PERFORM MOVE NUM-1 TO MAX IF NUM-2 > MAX THEN MOVE NUM-2 TO MAX DISPLAY “Maximum is ” MAX. END-PERFORM

INLINE PERFORM PROGRAM

JCL FOR THE INLINE PERFORM PROGRAM

When SYSIN data satisfies the condition WS-STRING = ‘KARINA’ the scope of the INLINE PERFORM gets terminated

PERFORM Verb – Nested PERFORM 

Syntax Paragraph-Name-1. PERFORM Paragraph-Name-2. . . . . . . . . . . Paragraph-Name-2. PERFORM Paragraph-Name-3. . . . . . . . . . . Paragraph-Name-3. MOVE A TO B. . . . . . . . . . .

PERFORM Verb – Nested PERFORM

**************************************** WE ARE INSIDE B000-LAST-PARA

Output SPOOL

WE ARE INSIDE B001-FIRST-PARA WE ARE INSIDE B002-MIDDLE-PARA

PERFORM Verb – PERFORM … THRU …



Syntax PERFORM Paragraph-Name-1 [ { THRU, THROUGH } Paragraph-Name-2 ].



Example PERFORM 300-READ-PARA THRU 600-UPDATEPARA.

PERFORM … THRU …

- example

****************************

Output SPOOL

WE ARE INSIDE B000-DISP-PARA WE ARE INSIDE B001-DISP-PARA WE ARE INSIDE B002-DISP-PARA ****************************

PERFORM Verb – PERFORM .. UNTIL ..



Syntax PERFORM THROUGH } condition.



Paragraph-Name-1 [ { THRU, Paragraph-Name-2 ] UNTIL

Example PERFORM 300-READ-PARA UNTIL EOF = ‘N’.

PERFORM Verb – PERFORM . . UNTIL .. WITH TEST AFTER OPTION



Syntax PERFORM Paragraph-Name-1 [ { THRU, THROUGH } Paragraph-Name-2 ] [WITH TEST {BEFORE, AFTER}] UNTIL condition.

PERFORM Verb … PERFORM . . UNTIL .. WITH TEST AFTER OPTION 

This format is used where the WHILE or REPEAT constructs are used in other languages.



If the WITH TEST BEFORE phrase is used the PERFORM behaves like a WHILE loop and the condition is tested before the loop body is entered.



If the WITH TEST AFTER phrase is used the PERFORM behaves like a REPEAT loop and the condition is tested after the loop body is entered.



The WITH TEST BEFORE phrase is the default and so is rarely explicitly stated.

PERFORM Verb – PERFORM . . UNTIL .. WITH TEST BEFORE

Output SPOOL

**************************** ****************************

PERFORM Verb – PERFORM . . UNTIL .. WITH TEST AFTER

10 Times!! Why?

**************************** WE ARE INSIDE B000-PERF-PARA WE ARE INSIDE B000-PERF-PARA WE ARE INSIDE B000-PERF-PARA WE ARE INSIDE B000-PERF-PARA WE ARE INSIDE B000-PERF-PARA

Output SPOOL

WE ARE INSIDE B000-PERF-PARA WE ARE INSIDE B000-PERF-PARA WE ARE INSIDE B000-PERF-PARA WE ARE INSIDE B000-PERF-PARA WE ARE INSIDE B000-PERF-PARA ****************************

PERFORM Verb – PERFORM .. TIMES 

Syntax PERFORM

Paragraph-Name-1 [ { THRU, THROUGH } Paragraph-Name-2 ] { integer,

identifier } TIMES.



Example PERFORM 500-PROCESS-PARA THRU 800-END-PARA 8 TIMES.

PERFORM Verb – PERFORM .. TIMES …… Example

**************************** HELLO GUEST. WELCOME TO E&R TRAINING HELLO GUEST. WELCOME TO E&R TRAINING

Output SPOOL

HELLO GUEST. WELCOME TO E&R TRAINING HELLO GUEST. WELCOME TO E&R TRAINING HELLO GUEST. WELCOME TO E&R TRAINING ****************************

PERFORM Verb - PERFORM . . . VARYING



Syntax PERFORM Paragraph-Name-1 [ { THRU, THROUGH } Paragraph-Name-2 ] VARYING identifier-1 FROM {identifier-2, integer-1} BY { identifier-3, integer-2 } UNTIL condition.



Example PERFORM 500-WRITE-PARA VARYING I FROM 1 BY 1 UNTIL I > 5.

PERFORM Verb - PERFORM . . . VARYING

**************************** HELLO GUEST. WISH YOU ALL THE BEST

Output SPOOL

HELLO GUEST. WISH YOU ALL THE BEST HELLO GUEST. WISH YOU ALL THE BEST HELLO GUEST. WISH YOU ALL THE BEST ****************************

PERFORM ...VARYING Syntax  THRU    BEFORE  PERFORM 1stProc   EndProc WITH TEST   THROUGH    AFTER     Identifier 2  Identifer1    VARYING  FROM  IndexName2 IndexName1   Literal    Identifier3 BY   UNTIL Condition1 Literal    Identifier 5  Identifier4      AFTER FROM IndexName 4       IndexName3   Literal        Identifier6   BY   UNTIL Condition2   Literal   

[StatementBlock END - PERFORM ]

PERFORM .. VARYING Example

PERFORM .. VARYING Example

Gives the IX1th occurrence of the array

PERFORM .. VARYING Example

OUTPUT SPOOL

EVALUATE Verb 

The EVALUATE verb provides a very powerful construct to carry out DATA validation. It is similar to the SWITCH statement in C programs. It assists us in implementing decision table logic.



Syntax EVALUATE subject-1 [ ALSO subject-2 ] . . . { { WHEN object-1 [ ALSO object-2 ] . . . } . . . } imperative-statement-1 } . . . WHEN subject = { identifier, expression, TRUE, FALSE } and object = { condition, TRUE, FALSE }.

The Evaluate Identifier    Literal   CondExpression   EVALUATE  ArithExpression  TRUE    FALSE         WHEN       

    ANY Condition  TRUE FALSE   Identifier    THRU   [ ]     NOT Literal  THROUGH   ArithExpression       

[ WHEN OTHER StatementBlock] END - EVALUATE

          Identifier    Literal  ArithExpression   

        StatementBlock       

              

EVALUATE Verb .. example

There are two valid ranges which the logic checks for –

1) Marks > 79 2) Marks > 64 & <= 79

*************************************

Output SPOOL

YOU HAVE CLEARED EXAM WITH A GRADE *************************************

STOP RUN statement 

Syntax



Instructs the computer to terminate the program.



Closes all the files that were opened for file operations.



The STOP RUN is usually the last statement in the main paragraph.

:

STOP RUN.

COBOL DAY 4

Overview

Array 

An array is a Linear data structure and is a collection of homogenous data items that can be referred by a single data name.



The data items contained in an array are called its elements.



The elements of an array are internally stored in contiguous memory locations.



The elements of an array may be elementary or group items.



An array can have dimension up to 7 in COBOL-85.

ARRAY – Defining an Array 

Similar to any other data item an array is defined in the DATA DIVISION.



To specify the repeated occurrence of data items with the same format, the OCCURS clause is used.



The OCCURS clause specifies the maximum number of elements that can be stored in the array.



The OCCURS clause can be used only with level numbers 02 to 49.

ARRAY – Single dimensional Array

Array Declaration

ARRAY – Multi dimensional Array Output Spool of the Job

Array Declaration

For Output spool display

Defining an Array – Using Indexed clause

INDEXED ARRAY

Defining an Array – Using Indexed clause

Output Spool of the Job

Declaring Tables

PROJECT EMP# –BANKS An example 11111 BANKS 22222 MKTNG 33333 MKTNG 44444

EMPNAME SRINI JYOTI VINAY SARMA

Declaring Tables – An example

Declaring Tables

PROJECT EMP# EMPNAM E 11111 SRINI – BANKS An example BANKS 22222 JYOTI MKTNG 33333 VINAY MKTNG 44444 SARMA

DISPLAY '**************************************************' DISPLAY 'WS00-ORG DISPLAY 'WS00-IBU

: ' WS00-ORG FIRST OCCUR

: ' WS00-IBU(1)

DISPLAY 'WS00-PROJ FIRST OCCUR

: ' WS00-PROJ(1,1)

DISPLAY 'WS00-EMP

: ' WS00-EMP(1,1)

DISPLAY 'WS00-EMPNAME

: ' WS00-EMPNAME(1,1)

DISPLAY '**************************************************'

Accessing the elements of an array 

Can be done using the data-name that is lowest in the hierarchy with subscript .



The subscript is a positive integer



The subscript must be enclosed within a pair of parenthesis.



The highest value that the subscript can take is the integer value specified in the OCCURS clause.



The elements of an array can be used for arithmetic and logical operations similar to any ordinary dataitems.

SET statement Is used to modify the index value.

Syntax-1 SET index-1 , . . . TO { index-2, identifier-2, integer1 }.

Syntax-2 SET index-1, . . . { UP BY, DOWN BY } { integer, identifier }.

SUBSCRIPT Vs INDEX Subscript (1) Is a WORKINGSTORAGESECTION variable defined by the user. (2) Represents an occurrence of array element

Index Is a special subscript created and maintained by the Represents a displacement operating System. from

(3) To modify the value of a

the address of the first To modify the value of an element index,

subscript, the MOVE or

the SET verb is used.

Arithmetic verbs are used.

SEARCH Statement Syntax SEARCH table-name [ VARYING index ] [ AT END imperative statement-1 ] { WHEN condition-1 { statement-2, NEXT SENTENCE }} . . . [ END-SEARCH ].

Searching in a table

Looking forward to locate the presence of ‘Z’ in the given string/array

Searching in a table

JCL

Output Spool

SEARCH ALL

Syntax SEARCH ALL Table-Name [AT END imperativestatement-1] WHEN { identifier-1 { IS EQUAL TO, IS = } {identifier-2, literal-1, arithmetic-expression-1 } imperative-statement-2.

SEARCH ALL Limitations of SEARCH ALL compared SEARCH



The condition following the word WHEN can test only for equality.



If the condition following the word WHEN is a compound condition then it can use only AND but not OR.



Multiple WHENs can not be used.



The VARYING option can not be used.



The item defined with OCCURS clause with its index must appear to the left of equal to sign.

SEARCH vs. SEARCH ALL SEARCH

SEARCH ALL

(1) Table entries need not be in any sequence.

Table entries must be sequence.

(2) Requires SET statement prior to SEARCH statement.

Does not need a SET prior to SEARCH ALL statement.

(3) Can include any relational Can only have a single = condition with WHEN clause. condition with WHEN clause. (12)May include multiple WHEN clause. (13)Linear Search

May include only one WHEN clause. Binary Search

STRING HANDLING VERBS



Inspect



String



Unstring

INSPECT statement The INSPECT statement can be used to 1. Count the number of occurrences of a given character in a field. 2. Replace specific occurrences of a given character with another character.

INSPECT statement Syntax INSPECT identifier-1 TALLYING { counter-1 FOR { {ALL, LEADING } , CHARACTERS , { char-1, literal-1 } } [ { BEFORE, AFTER } INITIAL { delimiter-4, literal-2 } ] }. . .

INSPECT – How does it work a)

The INSPECT scans the Source String from left to right counting and/or replacing characters under the control of the TALLYING, REPLACING or CONVERTING phrases.

b)

The behavior of the INSPECT is modified by using the LEADING, FIRST, BEFORE and AFTER phrases.

c)

An ALL, LEADING, CHARACTERS, FIRST or CONVERTING phrase may only be followed by one BEFORE and one AFTER phrase.

INSPECT – Modifying phrases •

LEADING The LEADING phrase causes counting/replacement of all Compare$il characters from the first valid one encountered to the first invalid one.



FIRST The FIRST phrase causes only the first valid character to be replaced.



BEFORE The BEFORE phrase designates as valid those characters to the left of the delimiter associated with it. AFTER

INSPECT – Example (finding occurrences)

INSPECT statement for finding the number of times a given character comes in a given name

Display messages to come in sysout

INSPECT – Example (finding occurrences) JCL for executing program INSPEC Name & Character passed to program by SYSIN in JCL

OUTPUT SPOOL

STRING statement The STRING statement may be used to combine several fields to form one concise field. This process is called concatenation.

Example: Suppose the structure of NAME field is 01 NAME. 05 F-NAME 05 M-NAME 05 L-NAME

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

Let us say that the value of NAME field is

STRING statement Syntax STRING { { identifier-1, literal } DELIMITED BY { identifier-2, literal-2, SIZE }} { { identifier-3, literal } DELIMITED BY { identifier-4, literal-2, SIZE }} INTO identifier-5 END-STRING.

Example STRING F-NAME DELIMITED BY ‘ ‘ ‘ ‘ DELIMITED BY SIZE M-NAME DELIMITED BY SIZE ‘ ‘ DELIMITED BY SIZE

STRING statement Rules for using the STRING statement 1) The DELIMITED BY clause is required. It can indicate a) SIZE : The entire sending field is transmitted. b) Literal : The transfer of data is terminated when the specified literal is encountered; the literal is not moved. c) Identifier : The transfer of data is terminated when the contents of the identifier is encountered. 2) The receiving field must be an elementary data item with no editing symbols is JUSTIFIED RGHT.

STRING statement Rules for using the STRING statement 4) The identifier specified with the POINTER clause must be an elementary numeric item. 5) The STRING statement moves data left to right just like alphabetic fields are moved, but a STRING does not pad with low ordered, unlike an alphanumeric MOVE.

STRING statement

OVERFLOW Option STRING . . . [ ON OVERFLOW imperativestatement ].

POINTER Option STRING . . . [ WITH POINTER identifier ] [ ON OVERFLOW . . . ].

STRING - Example

STRING statement

Display in the spool

STRING - Example JCL for executing program STRNG

Display in the Output spool

UNSTRING statement The UNSTRING statement may be used to convert keyed data to a more compact form for storing it on disk. For example, a program may include a statement that causes the following to be displaced on a screen.

ENTER NAME: LAST, FIRST, MIDDLE INITIAL : USE COMMAS TO SEPARATE ENTRIES Since each name has a variable number of characters,

UNSTRING statement Syntax UNSTRING identifier-1 [ DELIMITED BY [ ALL ] { identifier-2, literal1} [ OR [ ALL] { identifier-3, literal-2 }] . . .] INTO identifier-4 . . . [ END-UNSTRING ].

UNSTRING statement Rules for using the unstring statement 1. The sending field must be nonnumeric. The receiving fields numeric or nonnumeric. 2. Each literal must be nonnumeric. 3. The WITH POINTER and ON OVERFLOW clauses can be used in the same way as with the STRING statement.

UNSTRING - Example

UNSTRING - Example JCL for executing program UNSTRNG

Display in the Output spool

Some Common programming problems •

DATA EXCEPTION Performing arithmetic operation or comparison on a field containing BLANKS or non-numeric data



DIVIDE EXCEPTION Attempting to divide by ZERO



ADDRESSING ERROR When we have Invalid value placed in a sub-script or index. This might lead to addressing beyond the table boundaries.



OPERATION ERROR Attempting to access file before opening it.

Some common abend codes are – S0C4 : Protection exception (Unable to convert virtual to real address) S0C7 : Data Exception (Bad data in decimal field) S322 : Job/Program exceeded time limit. Program is looping

Related Documents

Cobol Day 3and4
November 2019 10
Cobol Day 1
November 2019 13
Cobol Day 5and 6
November 2019 13
Cobol Day 2
November 2019 16
Cobol Day 7&8
November 2019 14
Cobol Quesbank
November 2019 23