copy of cobol

272
Table of Contents UNIT 1. Introduction to Language Features COMMON BUSINESS ORIENTED LANGUAGE COBOL PROGRAM ORGANIZATION COBOL LANGUAGE STRUCTURE STRUCTURE OF COBOL PROGRAM CHARACTER SET OF COBOL SAMPLE COBOL PROGRAM CODING FORMAT USER- DEFINED WORDS UNIT 2. The Organization of a COBOL Program IDENTIFICATION DIVISION ENVIRONMENT DIVISION DATA DIVISION DATA-ITEMS LEVEL NUMBERS SPECIAL LEVEL NUMBERS W-S DECLARATIONS FILLER PICTURE CLAUSE USAGE CLAUSE VALUE CLAUSE REDEFINES CLAUSE DULPICATE DATA NAMES RENAMES CLAUSE FIGURATIVE CONSTANTS EDITED FIELDS MORE EDITING CHARACTER EXAMPLES

Upload: kalai-mani

Post on 28-Nov-2014

124 views

Category:

Documents


8 download

TRANSCRIPT

Page 1: Copy of Cobol

Table of Contents 

UNIT 1. Introduction to Language FeaturesCOMMON BUSINESS ORIENTED LANGUAGECOBOL PROGRAM ORGANIZATIONCOBOL LANGUAGE STRUCTURESTRUCTURE OF COBOL PROGRAMCHARACTER SET OF COBOLSAMPLE COBOL PROGRAMCODING FORMATUSER-DEFINED WORDS

  

UNIT 2. The Organization of a COBOL ProgramIDENTIFICATION DIVISIONENVIRONMENT DIVISIONDATA DIVISIONDATA-ITEMSLEVEL NUMBERSSPECIAL LEVEL NUMBERSW-S DECLARATIONSFILLERPICTURE CLAUSEUSAGE CLAUSEVALUE CLAUSEREDEFINES CLAUSEDULPICATE DATA NAMESRENAMES CLAUSEFIGURATIVE CONSTANTSEDITED FIELDS

MORE EDITING CHARACTER EXAMPLES

 

Page 2: Copy of Cobol

UNIT 3. PROCEDURE DIVISIONPROCEDURE DIVISIONCOBOL VERBSPARAGRAPHSTERMINATOR STATEMENTSSCOPE TERMINATORSDISPLAY VERBACCEPT VERBMOVE VERBELEMENTARY & GROUP MOVESCORRESPONDING PHASEREFERENCE MODIFICATIONADD VERBADD CORRESPONDING STATEMENTON SIZE ERROR PHRASENUMERIC DATASUBTRACT VERBSUBTRACT CORRESPONDING STATEMENTMULTIPLY VERBDIVIDE VERBCOMPUTE STATEMENTPERFORM STATEMENTPERFORM THROUGHPERFORM N TIMESPERFORM…VARYING

IN-LINE PERFORMRELATIONAL EXPRESSIONSIF STATEMENTCOMPOUND CONDITIONALSCLASS CONDITIONCONTINUE & NEXT STATEMENTEVALUATE STATEMENTSET TO TRUEINITIALIZE

 

Page 3: Copy of Cobol

UNIT 4. FILE HANDLING IN COBOL

FILESFIXED VS VARIABLE LENGTH RECORDSFILE-CONTROL-SEQUENTIALACCESS MODEFILE STATUS CLAUSEI-O CONTROL PARAGRAPHFILE SECTIONFILE OPERATIONSOPEN MODESREAD-SEQUENTIAL ACCESSEND OF FILE PROCESSINGREAD – RANDOM ACCESSREAD – DYNAMIC ACCESSSTART STATEMENTWRITE STATEMENTWRITE…FROMREAD…INTOREWRITE & DELETEAPPENDING TO SEQUENTIAL FILESFILE COMPARISONCLOSE STATEMENTSEQUENTIAL FILESINDEXED FILESINVALID KEYACCESS MODE: SEQUENTIAL & RANDOMACCESS MODE: DYNAMICRELATIVE FILES

Page 4: Copy of Cobol

UNIT 5. TABLE HANDLING

INTRODUCTION: TABLE HANDLINGOCCURS CLAUSESUBSCRIPTINDEXINGONE DIMENSIONAL TABLETWO DIMENSIONAL TABLEMULTIDIMENTIONAL TABLETABLE-SORTINGSETSEARCHBINARY SEARCH

UNIT 6. Library Services

COPY STATEMENTNESTED COPYCOPY REPLACINGCOPY PSEUDO-TESTREPLACE PSEUDO-TEST

 

Page 5: Copy of Cobol

UNIT 7. CHARACTER HANDLING

STRINGUNSTRING STATEMENTINSPECT TALLYING STATEMENTINSPECT REPLACING STATEMENTEXAMINE STATEMENT

  UNIT 8. SORT / MERGESORT/MERGESORT STATEMENTMERGE STATEMENTSORT PROCEDURESRELEASE STATEMENTRETURN STATEMENT

 

UNIT 9. CALL and LINKAGECALL STATEMENTCALL BY CONTENT/REFERENCELINKAGE SECTION

Page 6: Copy of Cobol

UNIT 1

   Introduction To Language Features

Page 7: Copy of Cobol

Common Business Oriented Language

1959 – New Language is named COBOL

1960 – Codasyl established COBOL maintenance committee

1961 – 1st version of complier made available. Users started writing programs

1968 –2nd version of cobol was approved and standardized by ANSI

1974 – Revised and released as COBOL-74

1985- Revised and released as COBOL-85

To meet the increasing demands for a high level language suitable for business data processing, the United States Department of Defense Convened a Conference on 28 th and 29th of May 1958.Three committee were formed for the actual design of the language.In September 1959 the short term committee submitted a report to the Defense Directorate thus COBOL came into existence.COBOL is known as a structured programming language because it allows programmers to segregate the modules and put them into different paragraphs in a more efficient way.Some of the features of COBOL areIt is English-like and more easily readableEfficient file handling capabilities.More than 70% of business applications are running on COBOLReduces the efforts required for documentation of the program.

Page 8: Copy of Cobol

The following features are available with VS COBOL II: - MVS/XA and MVS/ESA support - The compiler and the object programs it produces can be run in either 24- or 31-bit addressing mode

COBOL PROGRAM ORGANIZATION

Notes:  The four divisions of the COBOL source program are :

         IDENTIFICATION DIVISION This division’s primary purpose is to name the program

        ENVIRONMENT DIVISION  This division is primarily used to tell the computer about the input and output devices such

as files or printers.

IDENTIFICATION DIVISION

ENVIRONMENT DIVISION

DATA DIVISION

PROCEDURE DIVISION

Page 9: Copy of Cobol

       

DATA DIVISION

 

This division describes the data the program will be using and carves out sections of memory to map the data. Here you would distinguish between data, which

will be used for a “ scratch pad” area called WORKING-STORAGE and the holding area for data that will be used by the files.

 

 PROCEDURE DIVISION

 

The PROCEDURE DIVISION is the section of our program where the logic or commands reside. This is the logic or rules we will use to manipulate the data

defined in the DATA DIVISION to solve a business problem.

 

Page 10: Copy of Cobol

Cobol Language Structure

      . Characters

·       Character String

·       COBOL Words

·       User-Defined Words

·       Reserved Words

·       Figurative Words

·       Special Registers

·       IBM Extensions

·       Non-numeric and numeric Literals

 

 

 

 

 

 

Page 11: Copy of Cobol

Structure of a Cobol Program

Examples

  Divisions DATA DIVISION

  Sections or Paragraphs PROGRAM-ID

FILE SECTION, 100-PARA

    Statements MOVE A TO B

  Sentences IF A>B MOVE A TO B ELSE

ADD C TO D

 

 

Notes:

All COBOL programs should follow the structure. Rules of coding varies, depending

on the compiler versions but the structure remains same. A period (.) is a must at the end of

each sentence and indicates the end of the sentence.

 

Page 12: Copy of Cobol

Character Set of COBOL

COBOL supports the following characters 

Numbers : 0-9

Alphabets : a-z, A-Z 

Spaces or blanks 

Arithmetic operators : ex: **, *, +, -, / 

Special characters : ex: - \ / , ;

Notes:  The COBOL dictionary words used for coding are called COBOL reserved words and they should not be used as user-defined words. Lower case alphabets can be used for coding depending on the compiler version.comma (,) or space is used as separators for user-defined words.

Page 13: Copy of Cobol

Sample COBOL Program

Columns1 6 7 8 11 12 72 73 80 * This is a sample program

IDENTIFICATION DIVISION. PROGRAM-ID. SAMPLE. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 A PIC 9(2) VALUE 20. 01 B PIC 9(2) VALUE 3O. 01 C PIC 9(3) VALUE ZEROS. PROCEDURE DIVISION. DISPLAY ‘THE SUM IS’. ADD A ,B GIVING C. DISPLAY C. STOP RUN.

Notes:1-6 -------------- Sequence numbers7 -------------- Indicator/Comment/Continuation8-11 -------------- Area A12-72 -------------- Area B73-80 -------------- DescriptorThis foil shows a sample COBOL program to ‘ADD’ two numbers and ‘DISPLAY’ the sum. SAMPLE is the program name.SAMPLE, A, B AND C are called user-defined words.A, B,C are called variables or data-items.

Page 14: Copy of Cobol

Coding Format

Columns Name Purpose

01-06

07

08-11

12-72

73-80

Sequence

Indicator

Area A

Area B

Description

Sequence numbers are generated by Cobol Compiler for each line.To mark an asterisk (*) or a slash (/) for comment line, or a hyphen (-) for continuation of a statement. All division headings, section and paragraph headings and ‘01’ level entries should begin from this area.All Cobol statements and sentences should lie within this area Any thing written in this area is ignored.

Notes: COBOL coding should follow the standard format.The Screen is divided into different areas for the purposes explained above.All statements indicating action are called COBOL verbs and should begin from 12 th column or after.-E.g MOVE, ADD, DIVIDE, STOP RUN 

Page 15: Copy of Cobol

User-defined Words

Valid Invalid Reason

TOTAL-OF-FIGURES DATA Cobol reserved word34B100-PARA1 -48B Hyphen in beginningGROSS-PAY GROSS PAY space in b/w 2 words

Literals Examples

Numeric constants 35, -345.67Alphanumeric constants ‘Leo talstoy’

‘ka01-h215’

Paragraph names, Identifiers, File names can be defined by users.The terms identifiers, data-names, variables, data-items are often used interchangeably indicates memory.

Page 16: Copy of Cobol

Notes:

 

All user-defined words should conform to following rules

    Length should not exceed 30 characters.

    At least one character must be an alphabet.

    Spaces and special characters are not allowed.

    Word can contain hyphens (-) but not in the beginning or at the end

Cannot be a COBOL reserved word

Page 17: Copy of Cobol

UNIT 2

THE ORGANIZATION OF A COBOL PROGRAM

Page 18: Copy of Cobol

IDENTIFICATION DIVISION.PROGRAM-ID. <Pgm-name>AUTHOR. <Pgmr-name> DATE –WRITTEN. <Entry>DATE-COMPILED. <Entry>SECURITY. <Entry>

RequiredRequiredOptionalOptionalOptionalOptional

At least one space required after the period

Notes:The Identification Division must be the first division in every COBOL source program. It must be coded as IDENTIFICATION DIVISION or ID DIVISION followed by a separator period.

IDENTIFICATION DIVISION

Page 19: Copy of Cobol

 

ENVIRONMENT DIVISION

ENVIRONMENT DIVISION. CONFIGURATION SECTION. SOURCE-COMPUTER. <Entry>.

OBJECT-COMPUTER. <Entry>. INPUT-OUTPUT SECTION.

FILE-CONTROL.--------------------------------------------------------

I-O-CONTROL. ----------------------------- ----------------------------- Notes: The Environment Division is divided into two sections:      The CONFIGURATION SECTION The Configuration Section is an optional section for programs which describe the computer environment on which the program is compiled and executed. The Configuration Section can be specified only in the ENVIRONMENT DIVISION of the outermost program of a COBOL source program.      The INPUT-OUTPUT SECTION The Input-Output Section of the Environment Division contains two paragraphs:     FILE-CONTROL paragraph I-O-CONTROL paragraph

Page 20: Copy of Cobol

FILE-CONTROL paragraph

The keyword FILE-CONTROL can appear only once, at the beginning of the FILE-CONTROL paragraph. It must begin in Area A, and be followed by a separator period.

The FILE-CONTROL paragraph is optional.

 

The FILE-CONTROL paragraph associates each file in the COBOL program with an

external dataset, and specifies file organization, access mode, and other information.

 

There are three formats for the FILE-CONTROL paragraph:

 

QSAM, SAM, and VSAM sequential file entries

VSAM indexed file entries VSAM relative file entries.

 

The FILE-CONTROL paragraph begins with the word "FILE-CONTROL", followed by a

separator period. It must contain one and only one entry for each file described in an FD or SD

entry in the Data Division. Within each entry, the SELECT clause must appear first, followed

by the ASSIGN clause. The other clauses can appear in any order.

 

   

Page 21: Copy of Cobol

I-O-CONTROL paragraph

  Specifies information needed for efficient transmission of data between

the external data set and the COBOL program. The series of entries must

end with a separator period

  The keyword I-O-CONTROL can appear only once, at the beginning of the

paragraph. The word I-O-CONTROL must begin in Area A, and must

be followed by a separator period.

 

Each clause within the paragraph can be separated from the next by

a separator comma or a separator semicolon. The order in which

I-O-CONTROL paragraph clauses are written is not significant

Page 22: Copy of Cobol

DATA DIVISION

Data division is the third and most frequently used division in all programs. Every variable required by the program should be declared in appropriate section of the data division, before using in procedure division  The Data Division is divided into three sections:    .   File Section Defines the structure of data files (including sort-merge files).    .     Working-Storage Section Describes records and subordinate data items that are not part of data files but are required by the program.    .    Linkage Section Describes data made available by another program. It usually appears in the called program and describes data items that are referred to by the calling and the called programs.  Each section has a specific logical function within a COBOL source program, and each can be omitted from the source program when that logical function is not needed. If included, the sections must be written in the order shown.           

Page 23: Copy of Cobol

DATA DIVISION.

FILE SECTION.

FD . ---------------

----------------

----------------

  WORKING-STORAGE SECTION. DATA TYPES

01 VAR-1 PIC A(5). -Alphabetic

01 ID-1 PIC X(10) -Alphanumeric

01 DATA-NAME PIC 9(5) -Numeric

 

 

Level number picture data type (length)

Clause

LINKAGE SECTION.

record-description-entry

data-item-description-entry

Page 24: Copy of Cobol

DATA-ITEMS

 

  Explicitly identifies the data being described

 

     The data-item must be the first word following the level-number.

 

      The data-item values can be changed during program execution.

 

A data-item name cannot be the same as a section-name or a paragraph

 Notes:

 

Data item is a user-defined word which is associated with Level number.

 

COBOL Reserved words should not be Data items.

Page 25: Copy of Cobol

Level Numbers

. Range of level numbers available are 01 to 49 and

66 level specified for RENAMING CLAUSE

77 levels specified exclusively for elementary item

88 levels specified for CONDITION NAMES.

. An elementary item can be declared with level numbers

. 01 and 77  01 and 77 level entries must begin from area A and other level entries can begin

from any where in area A or area B

Notes:

Level represents the nature of a data item.

The level-number specifies the hierarchy of data within a record, and identifies special-purpose data entries. A level- number begins a data description entry, a renamed or redefined item, or a condition-name entry. A level- number has a value taken from the set of integers between 01 and 49, or from one of the special level-numbers, 66, 77, or 88.

 

Page 26: Copy of Cobol

Level-number 01 and 77 must begin in Area A and must be followed either by a separator period; or by a space, followed by its associated data-name, FILLER, or appropriate data description clause.

 Level numbers 02 through 49 can begin in Areas A or B and must be followed by a space or a separator period.

Level number 66 and 88 can begin in Areas A or B and must be followed by a space.  

Single-digit level-numbers 1 through 9 can be substituted for level-numbers 01 through 09.

 Successive data description entries can start in the same column as the first or they can be indented according to the level-number. Indentation does not affect the magnitude of a level-number.

 When level-numbers are indented, each new level-number can begin any number of spaces to

the right of Area A. The extend of indentation to the right is limited only by the width of Area B. 

Higher numbered level(s) represent subordinate definition(s). 

Level numbers need not be consecutive(but should be in ascending order)       

Page 27: Copy of Cobol

Special Level Numbers 

   LEVEL-66 contains a RENAMES clause. It regroups previously defined names  LEVEL-77 defines ELEMENTARY items with no subdivision and are unique  LEVEL-88 establishes condition-name entries, associated with a VALUE clause    66   data-name-1 renames-clause.  88 condition-name-1 value-clause.

      Notes:  LEVEL-66 regroups previously defined items.  A level-66 entry cannot rename another level-66 entry, nor can it rename a level-01, level-77, or level-88 entry.  All level-66 entries associated with one record must immediately follow the last data description entry in that record.  LEVEL-77 items are ELEMENATARY items with no subdivision. LEVEL-77 names are unique because they can not bequalified.  LEVEL-88 describes condition-names.

LEVEL-88 can be used to describe both elementary and group items. 

Page 28: Copy of Cobol

Describes the characteristics of the data

Picture Clause

CODE Meaning A Alphabetic or space B Blanks or spaces G or N Graphical data 9 Indicates a Numeric X Indicates an Alpha Numeric

P Indicates the position of the assumed Decimal point when the point lies Outside the data item.

V Indicates the position of assumed Decimal point of numeric field.

S Indicates whether the data item signed.

Page 29: Copy of Cobol

Notes:

Picture clause specifies the data type of an identifier.

Identifier with PIC clause ‘9’ implies that it is numeric data type, which can take art in arithmetic computations. ‘V’ and ‘S’ clauses are allowed with numeric data types only.

 

‘X’ clause represents an alphanumeric data type which can hold any character including numbers also.

 

‘A’ clause indicates an alphabetic data type.

Group items are always considered as alphanumeric only. Therefore GROSS-PAY, DEDUCTIONS can not be used for computations

Page 30: Copy of Cobol

W-S Declarations

WOKING-STORAGE SECTION.

01 PAY. 05 GROSS-PAY.Alternatively 10 BASIC PIC 9(4)V99. 10 DA PIC 9(4)V99.9(4)V9(2) 10 HRA PIC 9(4)V999999V99

05 DEDUCTIONS. 07 PF-DED PIC 9(3)V99. 07 IT-DED PIC 9(3)V99. 05 NET-PAY PIC 9(4)V99. 05 NAME PIC A(5).AAAAA 05 E-CODE PIC X(6).XXXXXX

Notes: Pay, gross-pay, deductions are called group items and they don’t have PICTURE clause. Other elements with picture clause are called elementary items, which cannot be broken further. Pay is a Group item is divided into Gross-pay, Deductions, net-pay, name, e-code further Gross-pay sub-divided into Basic, DA, HRA and DEDUCTIONS sub-divided into PF-DED and IT-DED.

Page 31: Copy of Cobol

FILLER

FILLER is a COBOL Reserved Word used to describe data fields that will not

be referenced in the PROCEDURE DIVISION.

 

If the data-name of FILLER clause is omitted, the data item being described is treated as

though it was FILLER

 

01 EMPLOYEE-RECORD.

05 EMPLOYEE-TYPE PIC X.

05 EMPLOYEE-SERIAL PIC X(6).

05 EMPLOYEE-NAME PIC X(30).

05                                                                PIC X(2).

05 EMPLOYEE-ADDRESS PIC X(60).

05 FILLER PIC X(34).

 

Page 32: Copy of Cobol

Notes:

 

FILLER is a data item that is not explicitly referred to in a program. The key word FILLER is optional.

If specified, FILLER must be the first word following the level-number.

 

IF data-name or FILLER clause is omitted, the data item being described is treated as though FILLER had been specified.

 

The VALUE clause may be used on FILLER items, e.g. to assure BLANKS in header lines between fields.

 

In a MOVE CORRESPONDING statement ,or in an ADD CORRESPONDING or SUBTRACT CORRESPONDING statement ,FILLER items are ignored.

 

In an INITIALIZE statement, elementary FILLER items are ignored.

Page 33: Copy of Cobol

USAGE Clause   <level number> data-name [PIC X(n)] [USAGE] COMP

COMP-1 COMP-2

COMP-3

COMP - Binary Representation Size: Half/Full/Double word COMP-1 - Hexa Decimal Representation Size: Full word for Float COMP-2 - Hexa Decimal Representation Size: Double word for Float

  for float COMP-3 - Packed Decimal Representation Size: round(n/2)+1

Where n is number of digits.  Notes:

  The USAGE clause can be specified for a data description entry with a level-number other than 66 or 88.

However, if it is specified at the group level, it applies to each Elementary item in the group. The usage of an elementary item must not contradict the usage of a group to which the elementary item belongs. 

The USAGE clause specifies the format in which data is represented in storage. The format can be restricted

if certain Procedure Division statements     When the USAGE clause is not specified at either the group or elementary level, it assumed that the usage is DISPLAY

Page 34: Copy of Cobol

Computational ( COMP) Usage

When usage is specified as COMP, the numeric data item is represented in pure binary. The item

must be an integer( no assumed decimal point is allowed). Such that data items are often used

as subscripts.The PICTURE of a COMP item should not contain any character other than 9, S.

 

COMPUTATIONAL-1 (COMP-1) Usage 

If the usage of a numeric data item is specified as COMP-1, it will be represented in one word

in the floating –point form. The number is actually represented in Hexa decimal (base 16).

Such representation is suitable for arithmetic operations. The PICTURE clause cannot be specified

for COMP-1 items.

 

COMPUTATIONAL-2(COMP-2)Usage 

This usage is same as COMP-1, except that the data is represented internally in two words.

The advantages is that this increases the precision of the data which means that more significant

digits can be available for the item. The PICTURE clause cannot be specified for COMP-2 items.

 

Page 35: Copy of Cobol

COMPUTATIONAL-3(COMP-3)Usage

In this form of internal representation the numeric data is the decimal form, but one digit

takes half-a-byte. The sign is stored separately as the right most half –a-byte regardless of whether

S is specified in the PICTURE or not. The hexa decimal number C or F denotes a positive sign

and the Hexa –decimal number D denotes a negative sign. Inorder that data fields can start and end

on byte boundaries, numbers with an even number of digits are stored with an extra half-byte of

zeroes on the left hand side.  

PICTURE S9(5)V9(3) USAGE IS COMP-3

Will require 5 bytes to be stored internally. Only the characters 9,S, V and P can be used in the

PICTURE of a COMP-3 item.

Page 36: Copy of Cobol

Value Clause 

           Value Clause defines the initial value of a data item        Must not be used for items declared in FILE SECTION.       Can also specify FIGURATIVE CONSTANTS.        If defined at the group level can be used for array declaration also  

EXAMPLES.01 NUM-1 PIC 9(3) VALUE 245.01 E-CODE PIC X(6) VALUE “E10K3”.

 At group level contents

 01 GROUP-ITEM VALUE IS ‘ER34155’ 05 E-ITEM-1 PIC X(2). ‘ER’ 05 E-ITEM-2 PIC XXX ‘341’

05 E-ITEM-3 PIC X(3) ‘55’

          Group item is considered as alphanumeric.

  Notes: 

Assigning values to identifiers is called initialization. If variables are not initialized, then they may contain any value, which was stored at the time of last execution of program. It is advised to always initialize working-storage variables.

 

Page 37: Copy of Cobol

REDEFINES Clause

 Two or more data items can share the same working storage area by

REDEFINING a storage area.

 

Level number data name-1 REDEFINES data-name-2

 

        Level numbers of data-name-1 and data-name-2 must be identical

        The redefines clause must immediately follow data-name-I

        must not be used for level number 66 or 88 items.

        Data-name-1 should not contain VALUE clause

        Multiple redefinition is allowed

Notes: 

        Two or more storage areas defined in the data sometimes may not be used simultaneously, in such

cases, only one storage area can serve the purpose of two or more areas if the area is defined.

        The REDEFINES clause used allows the said area to be referred to by more than one data name

with different sizes and pictures.

Page 38: Copy of Cobol

ILLUSTRATES REDEFINES CLAUSE

  DATA DIVISION.  WORKING-STORAGE SECTION.  01 X1

02 Y PIC 99.02 Y1 REDEFINES Y PIC XX.

01 X302 Z PIC X VALUE “M”.02 ZZ PIC X (25) VALUE ALL “*”.02 ZZZ PIC X (45) VALUE ALL “- “.

01 X4 REDEFINES X3.02 FILL1 PIC X.02 FILL2 PIC X (70).

01 X5 REDEFINES X4.02 BUFFER PIC X (71).

   PROCEDURE DIVISIONPARA 1.

  MOVE 20 TO Y. DISPLAY X1. MOVE “A1” TO Y1. DISPLAY X1 DISPLAY X3. DISPLAY X4.

DISPLAY X5. STOP RUN.

 

Page 39: Copy of Cobol

Duplicate Data Names

Are allowed, provided they belong to a group item

01 Pay-Rec.02 Id-numbers PIC 9(5).02 Name PIC X (25).02 Dept PIC X (20).

01 Print-Rec.02 Filler PIC X (5).02 Id-numbers PIC X (5)02 Filler PIC X (5).02 Name PIC X (25).02 Dept PIC X (920).

 MOVE Id-Numbers (OF | IN) Pay-Rec TO Id-Numbers (OF | IN)Print-Rec.

* OF and IN are called Qualifiers. To move the data stored in the four fields of Pay-Rec. the four MOVE statements serve the purpose.  Using the MOVE CORRESPONDING statement the same can be accomplished. 

Page 40: Copy of Cobol

RENAMES Clause 

Syntax:66 data-name-1 RENAMES data-name-2 THRU data-name-3

 E.g. :01 PAY – REC.

02 FIXED-PAY.05 BASIC PIC 9(6) V99.05 DA PIC 9(6) V99.

02 ADDITIONAL-PAY.05 HRD PIC 9(4) V99.05 INCENT PIC 9(3) V99.

02 DEDUCTIONS.05 PF PIC 9(3) V99.05 IT PIC 9(4) V99.05 OTHER PIC 9(3) V99.

66 PAY-OTHER-THAN-BASIC RENAMES DA THRU INCENT.66               IT-AND-PF-DEDUCTIONS RENAMES PF THRU IT.    

 

Page 41: Copy of Cobol

ILLUSTRATES RENAMES CLAUSE

 DATE DIVISION.

WORKING-STORAGE SECTION.

01 PAY

02 FIXED-PAY

10 E-BASIC PIC 9(6). 99

10 E-DA PIC 9(6). 99.

05 ADDL-PAY.

10 HRA PIC 9(4). 99.

10 INCENTIVE PIC 9(3). 99.

05 DEDUCTIONS.

10 E-PF PIC 9(3). 99.

10 E-IT PIC 9(4). 99.

10 OTHERS PIC 9(3). 99.

66 PAY-LESS-BASIC RENAMES E-DA THRU INCENTIVE.

66 IT-AND-PF RENAMES E-PF THRU E-IT.

 

Page 42: Copy of Cobol

PROCEDURE DIVISION.

 

MAIN-PARA

MOVE-123456.78 TO E-BASIC.

MOVE 234567.89 TO E-DA.

MOVE 1234.56 TO HRA.

MOVE 123.45 TO INCENTIVE.

MOVE 123.45 TO E-PF.

MOVE 1234.56 TO E-IT.

MOVE 123.45 TO OTHERS.

DISPLAY PAY.

DISPLAY FIXED-PAY.

DISPLAY ADDL-PAY.

DISPLAY DEDUCTIONS.

DISPLAY PAY-LESS-BASIC.

DISPLAY IT-AND-PF.

STOP RUN.

Page 43: Copy of Cobol

Figurative Constants

Constants frequently used by most programs

Figurative Constants Meaning

HIGH-VALUE(S) Represents the highest and lowest

LOW-VALUES (S) value in the collating sequence.

ZERO, ZEROS, ZEROES One or more Zeroes

SPACE (S) One or more blanks

Example 01 ID-1 PIC X(3) VALUE SPACES.

Collating sequence is the order in which the characters are compared by the system.

Notes: 

Figurative constants are reserved words that name and refer to specific constant values.

Page 44: Copy of Cobol

Edited Fields

Move 345.46 to a field of picture 9(3)v99 & display or print You may see different number in result

Characters must be edited before report is taken to suppress leading zeros, to include currency signs or to include date separators.

Editing Codes Effect

Z Leading Zeros if any will be suppressed* Leading Zeros are replaced by asterisks(*)$ Currency sign appears in the left most of the

field.- Appears at left or right of the field as specified in

the picture clause if value is negative

+ Appears if value is positive, else minus sign appears

Editing Codes are specified in the picture clause for variables intended for report purpose.

These variables cannot be used for arithmetic calculations.

Page 45: Copy of Cobol

More Editing Characters

EDIT CODES

CR or DB

.

,

B

0

-(hyphen) / (slash)

BLANK WHEN ZERO

MEANING

To be specified in the right most position of the pic clause. Appears only if the value is negative ,if value is positive it replaced by two characters.

Stands for decimal point. Cannot be specified with V clause

Inserted in the position where specified

Blank is appeared

Zero is appeared. To be specified left most position of pic clause.

Used as date separators. Appears where specified.

Sets all null values to blanks

Page 46: Copy of Cobol

EXAMPLES

 DATA

PIC CLAUSEUNEDITED

PIC CLAUSEEDITED

EDITEDVALUE

02346 9(5) ZZ999 2346

0005 9(4) ZZ99 05

03.42 99V99 Z999 003

0.007 9V999 ZV999 007

05634 9(5) **999 *5634

00143 9(5) $9(5) $00143

453 9(3) $**999 $**453

-0453 s9(4) -ZZ9(2) - b453

-0453 s9(4) 9999- 0453-

453 9(3) 999- 453

-453 s9(3) 999+ 453-

70.46 99V99 99.99- 70.46

156758 9(6) 99/99/99 15/67/58

00 99V9 99.9 Blank when zero

 0.00

8654 9(4) 99b9b9 86b5b4

24 99 9900 2400

Page 47: Copy of Cobol

Notes:

 

The above table shows contents of unedited fields in the first column. Contents of edited fields

after moving the data-1 shown in last column.

 

Edited fields (Fields with editing codes) cannot take part in arithmetic computations. Moving of numeric edited fields to unedited fields is illegal.

 

Page 48: Copy of Cobol

UNIT 3

PROCEDURE DIVISION

Page 49: Copy of Cobol

PROCEDURE DIVISION

PROCEDURE DIVISION[USING <DATA-ITEM1>, <DATA-ITEM2>.MAIN-PARA. DISPLAY ‘ENTER VALUE OF A:’. ACCEPT A. DISPLAY ‘ENTER VALUE OF B:’. ACCEPT A. MOVE A TO B. ADD A TO B. DISPLAY ‘A VALUE :’ A. DISPLAY ‘B VALUE :’ B. --------------------------------- --------------------------------

STOP RUN.

Page 50: Copy of Cobol

Notes :

 Procedure Division can consists of

Sections (Optional)Paragraphs(Optional)Statements.

 While coding, we must follow the following Hierarchy:SECTION------- PARAGRAPHS ------ STATEMENTSOrPARAGRAPH------- STATEMENTSOr

STATEMENTS

Page 51: Copy of Cobol

COBOL VERBS

All instructions are coded in Procedure division. BASIC COBOL VERBS

• MOVE

• ACCEPT

• DISPLAY

• PERFORM

• GOTO

• STOP RUN

• CALL

• COPY

• SORT

• MERGE

• FILE OPERATIONS

• CHARACTER

HANDLING

• TABLE HANDLING

• CONDITIONS

• ARITHMETIC VERBS

Page 52: Copy of Cobol

Notes:

 Arithmetic Verbs : ADD, SUBTRACT, MULTIPLY, DIVIDE, COMPUTE

Conditions : IF….ELSE, EVALUATE

File handling : READ, WRITE, REWRITE, DELETE

Character handling : INSPECT, STRING, UNSTRING

Table handling : SET, SEARCH

Page 53: Copy of Cobol

Paragraphs

Paragraphs are building blocks of the PROCEDURE DIVISION

PROCEDURE DIVISION.MAIN-PARA. STATEMENT1. STATEMENT2. --------------------- --------------------- ----------------------PARA-100. ----------------------- -------------------------

Page 54: Copy of Cobol

Notes:

A paragraph-name must begin in Area A and must be followed by a separator period.  A paragraph-name need not be unique because it can qualified by a SECTION name. Paragraph-names need NOT contain any alphabetic character (i.e. can be all numeric).A paragraph ends at:•        The next paragraph-name or section header•         The end of the PROCEDURE DIVISION•         The Scope terminator END-PARAGRAPH

Page 55: Copy of Cobol

Terminator statements

 EXIT PROGRAM.The EXIT PROGRAM statement specifies the end of a called program and returns control to the calling program

   STOP RUN.The STOP RUN statements halts the execution of the object program, and returns control to the system

   GOBACK.The GOBACK statement functions like the EXIT PROGRAM statement When it is coded as part of a called program and like the STOP RUN when coded in a main program  Notes:

If these statements are not the last statements in a sequence, statements following them will not be executed.

Page 56: Copy of Cobol

Scope Terminators

Explicit scope terminators mark the end of certain PROCEDURE DIVISION statements. Explicit scope terminators are COBOL Reserved Words.END-ADD END-SEARCH END-CALL END-MULTIPLY END-START END-COMPUTE END-PERFORM END-STRING END-DELETE END-READ END-DIVIDE END-UNSTRINGEND-EVALUATE END-REWRITE END-WRITEEND-IF An explicit Scope Terminator is paired with the unpaired occurrence of the verb. An implicit Scope Terminator is a separator period. 

Page 57: Copy of Cobol

Notes:

Example: PERFORM PARA-1 UNTIL A > 10 STATEMENT1 STATEMENT2 ------------------- ------------------- --------------------END-PERFORM.Period(.) should not encounter in between PERFORM and END-PERFORM. Since it indicates end of the PERFORM statement, then compiler error will raise.

Page 58: Copy of Cobol

Display verb

The function of the DISPLAY statement is to display low-volume results on the operator’s console or some other hardware device.Syntax : >>____DISPLAY_____ __identifier-1___ __ | _____________________________________________> | _ literal-1______| e.g: PROCEDURE DIVISION.DISP-PARA. DISPLAY SRCH-ARG ‘NOT IN TABLE.’. ---------------------------------- ------------------------------- DISPLAY ‘HELLO HOW ARE YOU’.

Page 59: Copy of Cobol

Notes:

The DISPLAY statement transfers the contents of each operand to the output device. The contents are displayed on the output device in the order, left to right, in which the operands are listed. WITH NO ADVANCING When specified, the positioning of the output device will not be changed in any way following the display of the last operand. 

Page 60: Copy of Cobol

ACCEPT Verb

       Format 1 transfers data from an input/output device into identifier-1.

When the FROM phrase is omitted, the system input device is assumed. Format 1 is useful for exceptional situations in a program when operator intervention (to supply a given message, code, or exception indicator) is required.

Format 1 : >>__ACCEPT______identifier-1___ __________________________________________><

| _ FROM__ _mnemonic-name-1___ _| | _ environment-name _ |

 77 SEARCH-VALUE PIC X(10).…. ACCEPT SEARCH-VALUE FROM SYSIN.

Page 61: Copy of Cobol

Notes:

The ACCEPT statement transfers data into the specified identifier. There is no editing or error checking of the incoming data. If the source of the ACCEPT statement is a file and identifier-1 is filled without using the full record delimited by the record terminator, the remainder of the input record is used in the next ACCEPT statement for the file. The record delimiter characters are removed from the input data before the input records are moved into the ACCEPT receiving area. If the source of the ACCEPT statement is a terminal, the data entered at the terminal, followed by the enter key, is treated as the input data. If the input data is shorter than identifier-1, the area is padded with spaces.

Page 62: Copy of Cobol

MOVE Verb

MOVE verb is used to copy the contents of an identifier into another identifier. MOVE <identifier-1> Or TO <identifier-2>[<identifier-3>,……….]. <literal-1> E.g.: MOVE A TO B,C,DMOVE dataname-1 to dataname-2MOVE 345 to num-1MOVE ‘345’ TO KMOVE ‘XYZ’ TO data-name-1 If the length of the receiving field is less than the length of sending field then truncation occurs.

Page 63: Copy of Cobol

Notes:

The MOVE statement transfers data from one area of storage to one or more other areas. An index data item cannot be specified in a MOVE statement. If the sending field(identifier-1) is reference-modified, subscripted, or is an alphanumeric or alphabetic function-identifier, the reference-modifier, subscript, or function is evaluated only once, immediately before data is moved to the first of the receiving operands. 

Page 64: Copy of Cobol

Elementary & Group Moves

The receiving or sending field of a MOVE statement can be either an elementary item or a group item.When both the fields are elementary items the data movement is known as an elementary move. When at least one of the fields is a group item, it is called group move. 01 MSG-FLD PIC X(10).01 DATA-FLD PIC X(10).01 OLD-ADDR. 05 NO PIC X(5). 05 NAME PIC X(15). ------------------------------- -------------------------------01 NEW-ADDR. 05 N-NO PIC X(5). 05 N-NAME PIC X(15). ------------------------------- ------------------------------- MOVE ‘OUT OF SEQUENCE’ TO MSG-FIELD MOVE SPACES TO OLD-ADDR, NEW-ADDR  MOVE DATA-FLD TO MSG-FIELD. MOVE NEW-ADDR TO OLD-ADDR

Page 65: Copy of Cobol

Notes:

Elementary move -         Both sending and receiving data items are elementary items-         Data conversion may take place, as well as editing or de-editing-         On alphabetic moves, all necessary space-fill or truncation will occur Group Move -         Both sending and receiving data items are group items-         No data conversion takes place 

Page 66: Copy of Cobol

CORRESPONDING Phrase

01 STRUCT-1. 03 FIELD-A PIC 9(9) VALUE 123456789. 03 FIELD-B PIC X(5) VALUE “abcde”. 03 FIELD-C PIC 9(4)V99 VALUE 1234.56. 03 FIELD-D PIC 9(4)V99 VALUE 123456789.01 STRUCT-2. 10 FIELD-C PIC Z(4).99. 10 FILLER PIC XXX. 10 FIELD-B PIC X(5). 10 FILLER PIC XXX. 10 FIELD-A PIC Z(9) 10 FILLER PIC XXX.   MOVE CORRESPONDING STRUCT-1 TO STRUCT-2  Statement moves 3 fields but gives warning.

Given the data definitions in the visual, the MOVE CORRESPONDING statements in the visual move three fields ( FIELD-S, FIELS-B and FIELD-C) but gives a warning message similar to the one below

Page 67: Copy of Cobol

ILLUSTRATES MOVE CORRESPONDING

DATA DIVISION WORKING – STORAGE SECTION.01 DATA-1

05 E-ID PIC 9(5) VALUE 2345.05 E-NAME PIC X (25) VALUE ALL “N”.05 E-DEPT PIC X (20) VALUE ALL “D”05 E-BASIC PIC 9(4) V99 VALUE 1234.67.

01 DATA-2.05 FILLER PIC X(5)05 E-ID PIC 9(5)05 FILLER PIC X(5)05 E-NAME PIC X (25).05 FILLER PIC X(5).05 E-DEPT PIC X(20)05 FILLER PIC X(5)05 E-BASIC PIC 9(4). 99

 

Page 68: Copy of Cobol

PROCEDURE DIVISION. PARA 1.  MOVE E-ID OF DATA-1 TO E-ID OF DATA-2 MOVE E-NAME OF DATA-1 TO E-NAME OF DATA-2. MOVE E-DEPT OF DATA-1 TO E-BASIC OF DATA-2. DISPLAY DATA-1 DISPLAY DATA-2 MOVE SPACES TO DATA-2. MOVE CORRESPONDING DATA-1 TO DATA-2. DISPLAY DATA-1 DISPLAY DATA-2. STOP RUN. 

Page 69: Copy of Cobol

Reference Modification

•  Reference Modification defines a data item by specifying its leftmost character and optionally, a length

MOVE data-name1(begin : [length]) TO data-name2

• If ‘Length’ is omitted, the data item continues to rightmost character of data-name1 (the colon is required).

•     The data name must have usage DISPLAY. It may be qualified or subscripted. When qualified or subscripted, the reference modification is specified last.

Page 70: Copy of Cobol

WORKING-STORAGE SECTION.

01 CAT-TYPE PIC X(15) VALUE 'CALICO'. 01 DOG-TYPE PIC X(15) VALUE 'SCHNAUZER'. 01 CAT-ABBREV PIC X(5). 01 DOG-END PIC X(10). PROCEDURE DIVISION.

*Reference Modification Example Number 1: (From position 1:For 5 positions.)   MOVE CAT-TYPE(1:5) TO CAT-ABBREV.

*This will move "CALIC" to CAT-ABBREV. (The letters from position 1 of CAT-TYPE for 5 positions.)

DISPLAY CAT-ABBREV.

Page 71: Copy of Cobol

*Reference Modification Example Number 2: (From position 2:For 4 Bytes.)

  MOVE CAT-TYPE(2:4) TO CAT-ABBREV.

*This will move "ALIC" to CAT-ABBREV2. (The letters from position 2 of CAT-TYPE for 4 positions.)

DISPLAY CAT-ABBREV.

*Reference Modification Example Number 3: (From position number 5 to the end of the field.)   MOVE DOG-TYPE(5:) TO DOG-END.

*This will move "AUZER" to DOG-END. (The letters from position 5 of DOG-TYPE to the end of DOG-TYPE.)

DISPLAY DOG-END.

 

Page 72: Copy of Cobol

ADD Verb

      All identifiers (or literals) preceding the word TO are added together, and then this sum is added to, and replaces, each identifier-2. The action is repeated in order left-to- right for each identifier-2. Identifiers must be elementary numeric items.

Format 1 : 

>>___ADD_______ identifier-1_ _|__ To _____identifier-2__ _ ______ _______|____> |_literal-1___| |_ROUNDED _|

>___ _______________________________________ ___________________________> |_ ____ __SIZE ERROR imperative-statement-1______|

  >___ ________________________________________ ___________________________>

|_ NOT___ ______ ___SIZE ERROR__imperative –statement_2_| 

>___ _______ ___________________________________________________________> |_ END-ADD_|  

Page 73: Copy of Cobol

In Format 1, all identifiers or literals preceding the key word TO are added together, and this sum is stored in a temporary data item. This| temporary data item is then added to each

successive occurrence of identifier-2, in the left-to-right order in which identifier-2 is specified. Identifier must name an elementary numeric item.Literal must be a numeric.The ADD statement sums two or more numeric operands and stores the result.Example :

ADD A TO B. ADD 112 TO B. ADD A TO B ON SIZE ERROR GO TO ERR-PARA.

Page 74: Copy of Cobol

ADD Verb(Continue……)

        The operands preceding the GIVING are added together and the sum replaces the value of each identifier-3.  Identifiers must be elementary numeric items, except when following GIVING then they may also be numeric –edited.Format 2 :

>>___ADD_______ identifier-1_ _|__ _ _ __ _ identifier2____________________> |_literal-1___| |_TO_| |_literal-2______|

>___ GIVING ___________identifier-3__ ______________ _| ________________ > |_ ROUNDED__| 

>___ _____________________________________________________ __________ > |_ _________ ___SIZE ERROR__imperative –statement_1_| 

>___ ____________________________ _________________________________ > |_ NOT___ ______ _SIZE ERROR__imperative –statement_2_| |_ ON_|

>___ _______ _______________________________________________________ > |_ END-ADD_|

Page 75: Copy of Cobol

In Format 2, the values of the operands preceding the word GIVING are added together, and the sum is stored as the new value of each data item referenced by identifier-3. Identifier must name an elementary numeric item, except when following the word GIVING. Each identifier following the word GIVING must name an elementary numeric or numeric-edited itemLiteral must be a numeric. Example : ADD A TO B GIVING C

Page 76: Copy of Cobol

ADD CORRESPONDING Statement

•Elementary data items within identifer-1 are added to, and stored in the corresponding elementary data items with identifer-2..ADD CORRESPONDING identifiers must be group items

Format : >>___ADD_______ CORRESPONDING_ ___identifier-1___ TO___ identifier-2____________> |_CORR___________| >___ ______________ __ ______________________________________ ________________ > |_ ROUNDED__| | _ ___ __SIZE ERROR____ imperative-statement-1_| |_ ON_ |  >___ _____________________________________________ ___________________________ > |_NOT___ ______ __SIZE ERROR__imperative –statement_1_| |_ON___|>___ _____________________________________________ ___________________________ > |_ NOT___ ______ _SIZE ERROR__imperative –statement_2_| |_ ON_| >___ _______ __________________________________________________________________ > |_ END-ADD_|

Page 77: Copy of Cobol

ON SIZE ERROR Phrase

        If the value of an arithmetic evaluation exceeds the largest value that can be contained in a result, then a size error condition exists.

        The SIZE ERROR condition applies to final results, not intermediate calculations

        If ON SIZE ERROR phrase is not specified, then truncation of the results will occur.

        If ON SIZE ERROR phrase is specified, the imperative statement (in ON SIZE ERROR) is taken, following which control is transferred to the end of the arithmetic statement.

        For ADD CORRESPONDING or SUBTRACT CORRESPONDING, the ON SIZE ERROR imperative is not taken until all individual additions or subtractions have been completed.

Page 78: Copy of Cobol

A size error condition can occur in three different ways

. When the absolute value of the result of an arithmetic evaluation, after decimal point alignment,

exceeds the largest value that can be contained in the result field

. When division by zero occurs

. In an exponential expression, as indicated in the following table

The size error condition applies only to final results, not to any intermediate results

Size error Action taken when a size error clause is present

Action taken when a size error clause is not present

Zero raised to zero power

The size error imperative is executed

The value returned is 1, and message is issued

Zero raised to a negative power

The size error imperative is executed

Program is terminated abnormally

A negative number raised to a fractional power

The size error imperative is executed

The absolute value of the base is used, and a message is issued.

Page 79: Copy of Cobol

NUMERIC Data

Types of numeric items are:      Binary     Packed decimal. (internal decimal)     Floating point representation.     The PICTURE character-string can contain only the symbols 9, P, S, and V     The number of digit positions must range from 1 through 18, inclusive     If unsigned, the contents of the item in standard data format must contain a combination of the Arabic numerals 0-9. If signed, it may also contain a +, -, or other representation of the operation sign

 

Notes:

A VALUE clause can specify a figurative constant ZERO

Page 80: Copy of Cobol

SUBTRACT Verb

Format 1 :  >>___SUBTRACT_______ identifier-1_ _|__ FROM____________________________> |_literal-1___| > ______identifier-2__ ___ _|________________________________________________> | _ ROUNDED ____| >___ ________________________________________ ___________________________> |_ ____ __SIZE ERROR imperative-statement-1______| |_ON _| >___ ________________________________________ ___________________________> |_ NOT___ ______ ___SIZE ERROR__imperative –statement_2_|  >___ _______ _________________________________________________> |_ END-SUBTRACT_|

All identifiers or literals preceding the key word FROM are added together and this sum is subtracted from and stored immediately in identifier-2. This process is repeated for each successive occurrence of identifier-2, in the left-to-right order in which identifier-2 is specified.

Page 81: Copy of Cobol

SUBTRACT Verb(Continue………….)

Format 2 :  >>___SUBTRACT_______ identifier-1_ _|__ FROM ___ _ identifier-2__ _______________> |_literal-1___| |_literal-2______| >___ GIVING ___________identifier-3__ ______________ _| _________________________ > |_ ROUNDED__| >___ ____________________________________________ ____________________________ > |_ _______ ___SIZE ERROR__imperative –statement_1_| |_ ON _|  >___ ____________________________________________ ____________________________ > |_ NOT___ ______ _SIZE ERROR__imperative –statement_2_| |_ ON_| >___ _______ __________________________________________________________________ > |_ END-SUBTRACT_|

Page 82: Copy of Cobol

All identifier or literals preceding the key word FROM are added together and this sum is subtracted from identifier-2 or literals-2. The result of the subtraction is stored as the new value of

each data item referenced by identifier-3.

Notes: 

Example: 1. SUBTRACT A FROM B. The value of A subtttracted from the value of B and then the resultant value will be stored in B.

2.  SUBTRACT 9 FROM C.

3.  SUBTRACT C FROM 9. Is not valid because 9 is a Literal. 

Page 83: Copy of Cobol

SUBTRACT CORRESPONDING Statement

Format : >>___SUBTRACT____ CORRESPONDING_ ___identifier-1__ FROM_________________> |_CORR__________| >___ identfier-2____ __ ___________ _________________________________________ > |_ ROUNDED__|   >___ _________________________________________ ____________________________ > |____ ______ __SIZE ERROR__imperative –statement_1_| |_ON___|>___ ________________________________________ ____________________________ > |_ NOT___ ______ _SIZE ERROR__imperative –statement_2_| |_ ON__| >___ _______ ______________________________________________________________ > |_ END-SUBTRACT_|

 Elementary data items within identifier-1 are subtracted from, and the results are stored in, the corresponding elementary data items within identifier-2.

Page 84: Copy of Cobol

MULTIPLY Verb

Format 1 : 

>>___MULTIPLY_______ identifier-1___ ___BY____identifier-2___ ______________| __________> |_ literal-1________|

>___ _______________________________________________________________________________ >

|____ ______ __SIZE ERROR__imperative –statement_1_| |_ON___|

>___ _________________________________________________ ____________________________ > |_ NOT___ ______ _SIZE ERROR__imperative –statement_2_|

|_ ON__| >___ _______ ________________________________________________________________________ >< |_ END-MULTIPLY_|

In Format 1, the value of identifier-1 or literal-1 is multiplied by the value of identifier-2; the product is then placed in identifier-2. For each successive occurrence of identifier-2, the multiplication takes place in the left-to-right order in which identifier-2 is specified.

Page 85: Copy of Cobol

MULTIPLY Verb(Continue…..)

Format 2 : 

>>___MULTIPLY_______ identifier-1_ _|__ BY_______ _ identifier-2__ ______________> |_literal-1___| |_literal-2______|

>___ GIVING ___________identifier-3__ ______________ _| _______________________ > |_ ROUNDED__| 

>___ _____________________________________________________ ________________ > |_ _______ ___SIZE ERROR__imperative –statement_1_| |_ ON _|  

>___ _____________________________________________________ ________________> |_ NOT___ ______ _SIZE ERROR__imperative –statement_2_| |_ ON_|

>___ _______ ______________________________________________________________ > |_ END-MULTIPLY_|  

In Format 2, the value of identifier-1 or literal-1 is multiplied by the value of identifier-2 or literal-2.The product is then stored in the data item(s) referenced by identifier-3.  

Page 86: Copy of Cobol

DIVIDE Verb

Format 1 :

 

>>___DIVIDE_____ _____ identifier-1_ _|__ INTO__________identifier-2____ _____ __ |____>

|_literal-1___| |_ROUNDED _|

>___ ________________________________________________ ____________________________>

|_ ____ __SIZE ERROR imperative-statement-1____________|

|_ON _|

>___ _________________________________________________ ____________________________>

|_ NOT___ ______ ___SIZE ERROR__imperative –statement_2_|

|_ON __|

>___ _______ ______________________________________________________________________>

|_ END-DIVIDE_|

 

In Format 1, the value of identifier-1 or literal is divided into the value of identifier-2, and the quotient is then stored in identifier-2. For each successive occurrence of identifier-2, the division takes place in the left-to-right order in which identifier-2 is specified.

 

Page 87: Copy of Cobol

DIVIDE Verb(Continue……)

Format 2 :

 

>>___DIVIDE_______ identifier-1_ _|__ INTO_______ _ identifier-2__ ___________________________>

|_literal-1___| |_literal-2______|

>___ GIVING ___________identifier-3__ ______________ _| ___________________________________ >

|_ ROUNDED__|

 

>___ _____________________________________________________ ____________________________ >

|_ _______ ___SIZE ERROR__imperative –statement_1_|

|_ ON _|

 

>___ _____________________________________________________ ____________________________>

|_ NOT___ ______ _SIZE ERROR__imperative –statement_2_|

|_ ON_|

>___ _______ _________________________________________________ >

|_ END-DIVIDE_|

 

In Format 2, the value of identifier-1 or literal-1 is divided into or by the value of identifier-2 or literal-2. The value of the result is stored in each data item referenced by identifier-3.

 

Page 88: Copy of Cobol

COMPUTE Verb

Format :

 

>>___COMPUTE_______ identifier-1_ ____________ _|____ _ =______ __________________________>

|_ ROUNDED _| |_ EQUAL_|

>___ arithmetic –expression________________________________________________________________ >

 

>___ _____________________________________________________ ____________________________ >

|_ _______ ___SIZE ERROR__imperative –statement_1_|

|_ ON _|

 

>___ _____________________________________________________ ____________________________ >

|_ NOT___ ______ _SIZE ERROR__imperative –statement_2_|

|_ ON_|

>___ _______ __________________________________________________ >

|_ END-COMPUTE_|

 

The arithmetic expression is calculated and replaces the value for each identifier-1 item. Valid operators allowed in the expression are:

+ addition - subtraction

* multiplication / division

** exponentiation

Page 89: Copy of Cobol

Notes:

 

The COMPUTE statement assigns the value of an arithmetic expression to one or more data items.

 

With the COMPUTE statement, arithmetic operations can be combined without the restrictions on receiving

data items imposed by the rules for the ADD, SUBTRACT, MULTIPLY, and DIVIDE statements.

Page 90: Copy of Cobol

Must name elementary numeric item(s) or elementary numeric-edited item(s).

 

Can name an elementary floating-point data item.

 

The word EQUAL can be used in place of =.

 

An arithmetic expression ca consist of any of the following:

 

1.     An identifier described as a numeric elementary item

2.     A numeric literal

3.     The figurative constant ZERO

4.     Identifiers are literals, as defined in terms 1,2, and 3, separated by arithmetic operators

5.    Two arithmetic expressions, as defined in items 1,2,3, and/or 4, separated by an arithmetic operator

6.    An arithmetic expression, as defined in items 1,2,3,4 and/or 5, enclosed in parentheses.

 

 

When the COMPUTE statement is executed, the value of the arithmetic expression is calculated, and this value is stored as the new value of each data item referenced by identifier-1.

Page 91: Copy of Cobol

PERFORM Statement

PERFORM Paragraph-name/Section-header

 

Transfer the control to the specified paragraph or section and expects the control back after

executing the paragraph.

 

 

 

PERFORM Para-name-1 [ THROUGH (or) THRU Para-name-n]

   Notes:

  

PERFORM types

 

       PERFORM para-name

        PERFORM para-name N TIMES

       PERFORM para-name VARYING K FROM M BY N

UNTIL CONDITION K>20

 

        PERFORM para-name VARYING K FROM M BY N UNTIL CONDITION K>20 AFTER VARYING….

 

Page 92: Copy of Cobol

PERFORM THROUGH

PROCEDURE DIVISION.

100-MAIN-PARA.

PERFORM 200-PARA THRU 500-PARA.

STOP RUN.

 

200-PARA.

* Statements.

400-PARA.

* Statements

 

500-PARA.

* Statements

 

300-PARA.

* Statement - Not executed

 

All the paragraphs between 200-PARA and 500-PARA are executed.

 

Page 93: Copy of Cobol

PERFORM…………N times

PERFORM PARA-NAME-1[THROUGH (or) THRU PARA-NAME-N] N TIMES.   

EX:PERFORM PARA-1000 15 TIMES.

 PERFORM PARA-1000 THRU PARA-4000 15 TIMES.

  PARA-1000.

ADD A TO B. ------------------------

-------------------------PARA-2000.

SUBTRACT A FROM B. ------------------------------- --------------------------------

PARA-4000. MULTIPLY A BY B. ----------------------------

Page 94: Copy of Cobol

PERFORM…………VARYING

PERFORM PARA-NAME-1 [THRU (or) THROUGH PARA-NAME-N] VARYING { identifier- 1 } {identifier-2 } {Index-name-1} FROM {index-name-2} { Literal-1 } BY {identifier-3 } UNTIL Condition {Literal-2 } EX: 

1. PERFORM PARA-2000 THRU PARA-5000 VARYING A FROM M BY N UNTIL A > Y  2. PERFORM para-1 Varying K FROM 10 BY 5

UNTIL K>100Notes:Example 2 says :Sets the value of K to 10 initiallyExecute para-1Check the condition K>100If condition is true, transfer the control to next lineIf condition is false, increment K by 5Execute para-1 againCheck the condition K > 100Repeat steps from 2 through 7 until Condition K > 100 becomes true

 

Page 95: Copy of Cobol

Flow Chart for PERFORM ….. VARYING

 

Enter

Set identifier –1 to initial value

Condition

Execute range

Add increment to - identifier.

Exit

False

Page 96: Copy of Cobol

PERFORM with the VARYING-AFTER Option

PERFORM PARA-NAME-1 [THRU (or) THROUGH PARA-NAME-N] VARYING { identifier- 1 } {identifier-2 } {Index-name-1} FROM {index-name-2} { Literal-1 }  BY {identifier-3 } UNTIL Condition-1 {Literal-2 }   

AFTER { identifier- 4 } {identifier-5 } {Index-name-3} FROM {index-name-4} { Literal-3 }  BY {identifier-6 } UNTIL Condition-2 {Literal-4 }   

AFTER { identifier- 7 } {identifier-8 } {Index-name-5} FROM {index-name-6} { Literal-5 } 

BY {identifier-9 } UNTIL Condition-3 {Literal-6 }     This form is used when a nested repetition of the range is required while varying more than

one identifier.

Page 97: Copy of Cobol

For example

 

PERFORM RANGE-TO-BE-EXECUTED

VARYING I FROM 1 BY 1 UNTIL I > 50

AFTER J FROM 1 BY 1 UNTIL J > 10.

The range RANGE-TO-BE-EXECUTED will be performed 500 times,.

Page 98: Copy of Cobol

In-Line PERFORM

The in-line PERFORM will be coded using END-PERFORM. 

Named Paragraph

PERFORM MOVEIT VARYING X FROM 1 BY 1 UNTIL X = 5.

. . .  MOVEIT. MOVE DATA-FLD (X) TO PRINT (X). 

In-line PERFORM

PERFORM VARYING X FROM 1 BY 1 UNTIL X = 5. MOVE DATA-FLD (X) TO PRINT (X).

END-PERFORM.

Notes: 

An In-line PERFORM requires the END-PERFORM terminator. Conversely the END-PERFORM phrase must not be specified when the statement is “PERFORM procedure name…”.

 

 …

Page 99: Copy of Cobol

IN-LINE PERFORM Considerations

 

    DO not use for procedures executed from several places/

 

    Use for procedures referenced only once.

 

    Consider not using if readability is affected , such as multiple-page PERFORM,

 

    No periods may appear within the in-line PERFORM.

 

    Delimited by END-PERFORM.

 

    END-PERFORM cannot be used at end of an out-of-line PERFORM.

 

    The OPTIMIZE compile option may move the PERFORM in-line in the object code at

the compile time.

 

 

Page 100: Copy of Cobol

IF .. ELSE Statement

The IF statement evaluates a condition and provides for alternative actions in the object program, depending on the evaluation.

Format :

 

>>_______IF_____Condition-1____ __________ _____ ___statement-1___|__ ________>

|_THEN_____| |_NEXT SENTENCE _|

>___ ______________ ____ ________________ ______________________________>

| <____________ | | (1) |

| _ ELSE__ ___statement-2_|_____ | |___END-IF________|

 

Note :

(1) END-IF can be specified with NEXT SENTENCE as an IBM extension.

 

Page 101: Copy of Cobol

Notes:

 

The IF statement evaluates a condition and provides for different sets of statements to execute, depending

on the evaluation of the IF.

 

Condition can be any simple or complex condition.

 

Statement-1, statement-2 Can be any one of the following:

        An imperative statement

        An conditional statement

        An imperative statement followed by a conditional statement

NEXT SENTENCE

If the NEXT SENTENCE phrase is specified, and then the END-IF phrase must not be specified. NEXT SENTENCE passes control to the statement after the closest following period. However, if the NEXT SENTENCE phrase is executed, control will not pass to the statement after the closest following period.

Page 102: Copy of Cobol

Compound Conditionals  

        Conditional expressions can be “compound” using the AND and OR logical operators        Conditional conditions can also use parentheses to group conditions. 

IF ITEM-1 = DOMESTIC-ITEM-NO AND ITEM-2 = OVERSEAS-ITEM-NO OR ITEM-1 = OVERSEAS-ITEM-NO AND ITEM-2 = DOMESTIC-ITEM-NO SET MIXED-SHIPMENT-FLAG TO TRUE

END-IF 

…………….  SEARCH TABLEPAIR VARYING NDX WHEN ITEM-1(NDX) = FROM-CITY AND ITEM-2(NDX) = TO-CITY MOVE ……… WHEN ITEM-2(NDX) = FROM-CITY AND ITEM-1(NDX) = TO-CITY MOVE ……..

END-SEARCH

Page 103: Copy of Cobol

Relational Expressions

Relational tests (comparisons) can be express as:

 

        IS LESS THAN IS <

        IS NOT LESS THAN IS NOT <

        GREATER THAN IS >

        IS NOT GREATER THAN IS NOT >

        IS EQUAL TO IS =

        IS NOT EQUAL TO IS NOT =

        IS GREATER THAN OR EQUAL TO IS >=

        IS LESS THAN OR EQUAL TO IS <=

Page 104: Copy of Cobol

CONTINUE & NEXT SENTENCE Statement

Example 1 - NEXT SENTENCE

IF A = B

IF C = D

NEXT SENTENCE

ELSE

MOVE MESSAGE-1 TO RPT-MESSAGE-1

END-IF

ADD C TO TOTAL

DISPLAY TOTAL

IF E = F

MOVE MESSAGE-4 TO RPT-MESSAGE-2

END-IF

END-IF.

 

 

Page 105: Copy of Cobol

Example 2 – CONTINUE

IF A=B

IF C=D

CONTINUE

ELSE

MOVE MESSAGE-1 TO RPT-MESSAGE-1

END-IF

ADD C TO TOTAL

DISPLAY TOTAL

IF E=F

MOVE MESSAGE-4 TO RPT-MESSAGE-2

END-IF

END-IF.

Page 106: Copy of Cobol

EVALUATE Statement

           EVALUATE is a great way to implement the “case” programming construct

EVALUATE datanameWHEN value-1 …….WHEN value-2 {THROUGH | THRU} value-3 ….WHEN NOT value-4……WHEN OTHEREND-EVALUATE

EVALUATE datanameWHEN ‘A’ Perform add-transWHEN ‘D’ Perform delete-transWHEN ‘U’ WHEN ‘W’ Perform update-trans WHEN OTHER Perform bad-transEND-EVALUATE

           Basic EVALUATE Example:

The scope of a WHEN clause is all statements UNTIL the next WHEN clause, the END-EVALUATE, or a period

Page 107: Copy of Cobol

Notes:The EVALUATE statement provides a shorthand notation for a series of nested IF statements.

It can evaluate multiple conditions. That is, the IF Statements can be made up of compound conditions.

   Examples: Working-Storage for all Examples:

  01 PLANET. 05 PLANET-NUMBER PIC 9. 05 PLANET-NAME PIC X(7).

Evaluate Example Number 1: (Evaluate a PIC 9 field)   EVALUATE PLANET-NUMBER

WHEN 1 MOVE "Mercury" TO PLANET-NAME WHEN 2 MOVE "Venus " TO PLANET-NAME WHEN 3 MOVE "Earth " TO PLANET-NAME WHEN 4 MOVE "Mars " TO PLANET-NAME WHEN 5 MOVE "Jupiter" TO PLANET-NAME WHEN 6 MOVE "Saturn " TO PLANET-NAME WHEN 7 MOVE "Uranus " TO PLANET-NAME WHEN 8 MOVE "Neptune" TO PLANET-NAME WHEN 9 MOVE "Pluto " TO PLANET-NAME WHEN OTHER MOVE " " TO PLANET-NAME END-EVALUATE.

Page 108: Copy of Cobol

Evaluate Example Number 2: (Evaluate a PIC X field)

  EVALUATE PLANET-NAME WHEN "Mercury" MOVE 1 TO PLANET-NUMBER WHEN "Venus " MOVE 2 TO PLANET-NUMBER WHEN "Earth " MOVE 3 TO PLANET-NUMBER

WHEN "Mars " MOVE 4 TO PLANET-NUMBER WHEN "Jupiter" MOVE 5 TO PLANET-NUMBER

WHEN "Saturn " MOVE 6 TO PLANET-NUMBER WHEN "Uranus " MOVE 7 TO PLANET-NUMBER WHEN "Neptune" MOVE 8 TO PLANET-NUMBER WHEN "Pluto " MOVE 9 TO PLANET-NUMBER WHEN OTHER MOVE 0 TO PLANET-NUMBER

END-EVALUATE.

Evaluate Example Number 3:

Let each of MONTH and NO-OF-Days be two-digited numeric integer fields. The values 1,2,3, etc. for MONTH denote respectively, January, February, March etc. depending on the value of MONTH , we wish to ove 30,31 or 28 to NO-OF-DAYS. For example , if the value of MONTH is 1, we shall move 31; if it is 2, we shall move 28 and so on. The EVALUATE statement for the purpose is as follows:

EVALUATE TRUE WHEN MONTH = 4 OR 6 OR 9 OR 11 MOVE 30 TO NO-OF-DAYS

WHEN MONTH = 2 MOVE 28 TO NO-OF- DAYS

WHEN OTHER MOVE 31 TO NO-OF-DAYS END EVALUATE.

Page 109: Copy of Cobol

Evaluate Example Number 4:Suppose MARKS contains the marks obtained by a student. GRADE is an one-

character alphanumeric field. We wish to calculate GRADE according to the following rules

MARKS GRADE80 – 100 A60 - 79 B45 - 59 C30 - 44 D0 - 29 EThe EVALUATE statement for the purpose is shown below.EVALUATE MARKS

WHEN 80 THRU 100 MOVE “A” TO GRADEWHEN 60 THRU 79 MOVE “B” TO GRADEWHEN 45 THRU 59 MOVE “C” TO GRADEWHEN 30 THRU 44 MOVE “D” TO GRADEWHEN ZERO THRU 29 MOVE “E” TO GRADEWHEN OTHER MOVE “W” TO GRADE

END-EVALUATE.The literal “W” is moved to GRADE in the case of wrong marks.

Page 110: Copy of Cobol

ILLUSTRATES CONDITION NAMES  DATA DIVISION.

  WORKING-STORAGE SECTION.  77 MARTIAL-STATUS PIC 9.

88 SINGLE VALUE 0.88 MARRIED VALUE 1.88 WIDOWED VALUE 2.88 DIVORCED VALUE 3.88 ONCE-MARRIED VALUES ARE 1, 2, 3.88 VALID-STATUS VALUES ARE 0 THRU 3.77 AMOUNT PIC 9 (4) VALUE 1000.

  PROCEDURE DIVISION.  MAIN-PARA.

DISPLAY “Martial Status:” DISPLAY “0- Single / 1- Married / 2- Widowed / 3- Divorced”. ACCEPT MARTIAL-STATUS. IF NOT VALI-STATUS DISPLAY “Error in Entry”. IF SINGLE SUBTRACT 100 TO AMOUNT. IF MARRIED ADD 100 TO AMOUNT. IF WIDOWED ADD 200 TO AMOUNT. IF DIVORCED SUBTRACT 200 FROM AMOUNT. IF ONCE-MARRIED ADD 250 TO AMOUNT DISPLAY AMOUNT. STOP RUN.

Page 111: Copy of Cobol

INITIALIZE Statement

The INITIALIZE statement sets selected categories of data fields to predetermined values. It is functionally equivalent to one or more MOVE statements.

 

When the REPLACING phrase is not used:

SPACE is the implied sending field for alphabetic alphanumeric, alphanumeric-edited, and DBCS items.

ZERO is the implied sending field for numeric and numeric-edited items.

 

>>___INITIALIZE____identifier- 1 ________________________________________>

>___ ___________________________ _________________ _______><

| < ____________________________________________ __________________

|_REPLACING____ _ALPHABETIC_______ __ _______ __BY____ identifier-2 _ _ | _ |

|_ALPHANUMER____| |_DATA_| |_LITERAL-1__|

|_NUMERIC __________|

|_ALPHANUMERIC-EDITED_|

|_NUMERIC-EDITED__|

|_ DBCS _____________|

|_ EGCS _____________|

Page 112: Copy of Cobol

Notes: 

The INITIALIZE statement sets selected categories of data fields to predetermined values. It is functionally equivalent to one or more MOVE statements.

 A subscripted item can be specified for identifier-1. A complete table can be initialized only by specifying identifier-1 as a group that contains the complete table.

 The data description entry for identifier-1 must not contain a RENAMES clause. An index data item

cannot be an operand of INITIALIZE. 

Special registers can be specified for identifier-1 and identifier-2 only if they are valid receiving fields or sending fields, respectively, for the implied MOVE statement(s).

When the REPLACING phrase is used:        The category of identifier-2 or literal-1 must be compatible with the category indicated in the

corresponding REPLACING phrase, according to the rules for the NUMERIC category.         The same category cannot be repeated in a REPLACING phrase.        The Key word following the word REPLACING corresponds to a category of data shown “Classes of

Data” visual.      

Page 113: Copy of Cobol

SET TO TRUE Statement

When this form of the SET statement is executed, the value associated with a

condition-name is placed in its conditional variable according to the rules of the

VALUE clause.

 

>>__SET____condition-name-1_|_ TO TRUE_________________________><

 

condition-name-1: Must be associated with a conditional variable.

 

If more than one literal is specified in the VALUE clause of condition-name-1, its

associated conditional variable is set equal to the first literal.

 

01 CUST-TYPE PIC 99.

88 INACTIVE VALUE 9.

88 SPEC-ACCTS VALUE 20, 11, 40, 44.

……

SET INACTIVE TO TRUE

SET SPEC-ACCTS TO TRUE

 

Page 114: Copy of Cobol

Class Condition

·  NUMERICThe item entirely contains characters 0 through 9 (with or without a sign determined by its PICTURE clause). It may be USAGE DISPLAY or PACKED DECIMAL. ·  ALPHABETICThe entire item contains only A through Z, a through z, or spaces · ALPHABETIC-UPPERThe entire item contains only A through Z (exclusively upper-case) or spaces. · ALPHABETIC-LOWER The entire item contains only a through z (exclusively lower-case) or spaces.

Notes: 

Ex: 1. IF A IS NUMERIC ---------------------- ----------------------- 

2.    IF C IS ALPHABETIC ----------------------- ------------------------ Where A and C are Data items. 

Page 115: Copy of Cobol

UNIT 4

FILE HANDLING IN COBOL

Page 116: Copy of Cobol

FILES 

A record is a group of logically or functionally related fields. 

A File is a group of Records. 

A group of records, which can be created, copied, modified, retrieved and deleted.

 E.g.: Details of an employee

-Name, Adds, Phone no., Dept no etc… Forms a record  

Details of all employees-Group of such record forms a file.

    Notes: 

Files can be broadly categorized into Program files and Data files. In COBOL the term “Files” is used to indicate data files. Data files are normally created on a tape or disk and subsequently program can refer them.

Page 117: Copy of Cobol

Fixed vs Variables Length Records

 

  Fixed length records.

   Corresponding fields of all the records have same length.

 

Variable length records.

 

          Field lengths may vary from record to record.

 

  Figure 4-2 Fixed vs. Variable Length Records

 

Notes:

 

The size of a record is the cumulative size of all the fields in it.

If all the records of a file have the same structure then they are called Fixed length-records.

For convenience,records of different lengths can be placed together in one file.

Then they are known as variable-length-records.

Page 118: Copy of Cobol

FILE-CONTROL Paragraph  

Format: 

SELECT [OPTIONAL] File-name-1 ASSIGN TO Assignment-name-1[ RESERVE <INTEGER> AREA ]

SEQUENTIAL [ ORGANIZATION IS INDEXED

RELATIVE

SEQUENTIAL [ACCESS MODE IS RANDOM

DYNAMIC  

[FILE STATUS IS Data-name-1]

Figure 4-3 FILE-CONTROL - SEQUENTIAL  Notes: 

The FILE-CONTROL paragraph associates each file with an external data-set. FILE_CONTROL paragraph is in INPUT-OUTPUT Section of ENVIRONMENT Division.Not all options are available on all platforms.

    

Page 119: Copy of Cobol

 

SELECT OPTIONAL may be specified only for files opened in the input, I-O, or extended mode.

You must specify SELECT OPTIONAL for such input files that are not necessarily present each

time the program is executed.

 

The ‘file-name-1’ must be identified by an FD or SD entry in the DATA DIVISION.

 

The ASSIGN clause associates the program’s name for a file with the external name for the

actual data file.

 

The RESERVE clause allows you to specify the number of input/output buffers to be allocated at

run time for the file.

 

The ORGANIZATION clause identifies the logical structure of the file.

 

Page 120: Copy of Cobol

ORGANIZATION IS SEQUENTIAL

  The Records are stored in contiguous allocation. To access the record in Sequential mode only

(I.e. to read the last record, it reads all the records until last record found.)Deletion of record

is not possible.Updating is possible but record length should not changed.

 

ORGANIZATION IS INDEXED

  Each record in the file has one or more embedded keys; each key is associated with an index. An index provides a logical path to the data records, according to the contents of the

associated embedded record key data items. Indexed files must be direct-access storage files. Records can be fixed-length or variable-length.

Each record in an indexed file must have an embedded prime key data item. When records are inserted, updated, or deleted, they are identified solely by the values of their prime keys.

Thus, the value in each prime key data item must be unique and must not be changed when the record is updated.

Page 121: Copy of Cobol

In addition, each record in an indexed file can contain one or more embedded alternated key data items. Each alternated key provides another means of identifying which record to retrieve.

The RECORD KEY clause specifies the data item within the record that is the prime RECORD KEY for an indexed file. The values contained in the prime RECORD KEY data item must be unique among records in the file.

The ALTERNATRE RECORD KEY clause specifies a data item within the record that provides an alternated path to the data in an indexed file. Used like the RECORD KEY but for an alternate index.

  

ORGANIZATION IS RELATIVE  The INPUT-OUTPUT FILE-CONTROL for Relative record files is very similar to that of

indexed files except you use the RELATIVE KEY clause of the ACCESS MODE phrase and each record identified by the Relative Record Number instead of Recoed Key.

Page 122: Copy of Cobol

ACCESS Mode

Meaning

Records of the file can be accessed sequentially, starting from first record till the required record is reached.

Any record can be accessed directly without beginning from the first record.

Records can be accessed both randomly and/or sequentially

Modes

SEQUENTIAL

RANDOM

DYNAMIC

 Notes:

 The record of a file stored on a magnetic tape can be accessed in sequential mode only. But the records of file stored on magnetic disk can be accessed in all the modes. 

Page 123: Copy of Cobol

FILE STATUS Clause

  

A two-digit number indicates the status of the file.

 

 

Value Status

00                                                              Successful Completion

10                                                              At end condition

30 Permanent error

34 Boundary violation

 

  

  Notes:

 

Input-Output operations may not be successful thus resulting in termination of the program.

 

The data-name specified in the file-status clause contains the status code and can be referred by the programmer. Depending on the code programmer can take specific actions by transferring the control to error-routine paragraphs.

 

The data name should be declared in working-storage section with alphanumeric data type of two characters.

 

Page 124: Copy of Cobol

I-O-CONTROL Paragraph

         The Optional I-O-CONTROL paragraph of the Input-Output Section

specifies

when checkpoints are to be taken and the storage areas to be shared by different files.

          Specifies information needed for efficient transmission of data between the external data

set and the COBOL program.

   

Notes:

The I-O-CONTROL paragraph is optional.

 

The key word I-O-CONTROL can appear only once, at the beginning of the paragraph. The word I-O-CONTROL must begin in Area A, and must be followed by a separator period.

 

Each clause within the paragraph can be separated from the next by a separator comma or a separator semicolon. The order in which I-O-CONTROL paragraph clauses are written is not significant. The I-O-CONTROL paragraph ends with a separator method.

 

Page 125: Copy of Cobol

FILE SECTION

 

FILE SECTION.

FD File-Name

BLOCK CONTAINS m RECORDS

RECORD CONTAINS n CHRACTERS

LABEL RECORDS ARE STANDARD/ OMMITED

01 File-record-structure.

Notes:

Each file used in the program should have an FD entry (File Description) in

FILE SECTION.

         BLOCK CONTAINS clause specifies number of records in the block.

       RECORD CONTAINS clause specifies total number of characters in each record.

       LABEL RECORDS clause indicates

       Disk files if STANDARD option is specified

   Print files if OMITTED option is specified

       Value clause specifies the name of the physical file and the path

       01 level entry should follow immediately after FD paragraph.

  Blocking

Input-Output operations are slower compared to CPU processing speed. To reduce the CPU waiting time, block of records from the disk can be moved to the memory space called buffer thus reducing number of I-O operations.

The Programmer can specify the number of records contained in a block. Suitable block size is to be selected by the programmer.

Page 126: Copy of Cobol

File Operations

Cobol Verbs

WRITE

REWRITE

READ

DELETE

Meaning

Writes the records into file. Required while creating a new file and while Adding new records to an existing file.

Rewrites on one or more existing fields of a file.Required while updating a file.

Reads the records of a file and make them available to program

Deletes the record from a file.

Notes:

This foil lists the possible operations that can be performed over files. Before doing any operation, files should be opened and they must be closed before exiting the program “OPEN” and “CLOSE” verbs are provided by COBOL.

Page 127: Copy of Cobol

OPEN MODES

Mode

INPUT

OUTPUT

I-O

EXTEND

Meaning

Stands for input mode.Only reading of records possible.

Stands for output mode.Only writing new records possible.

Stands for Input ---Output mode.All operations possible

Stands for extend mode.Only for appending the records in sequential mode.

 Notes:SYNTAXOPEN Mode File-name1, File-name2.CLOSE File-name1, File-name2 While opening the file the mode must be specified depending on the operation to perform.  More than one file can be opened and closed. Further, files can be opened and closed more than once in a program.

Page 128: Copy of Cobol

READ – Sequential Access          When the READ statement is executed the file must already be open in INPUT or I-O mode          The AT END clause must be before the NOT AT END  Format 1: sequential retrieval  >>____READ__file-name-1___ _________________ __ __________ ___________________>

|_ NEXT __________| |_RECORD__| |_ (1)| |_ PREVIOUS______| >_____ _______________________ ______________________________________________> |____ INTO___identifier-1____| >_____ ___________________________________ __________________________________> |_ ____ __END_imperative –statement-1_| |_ AT _| >_____ ____________________________________________ ____ __________ _______>< |_ NOT___ ______ ___END_imperative-statement-2_| |_END-READ_|

Notes:For sequential access, the READ statement makes the next logical record from a file available to the object program. For random access, the READ statement makes a specified record from a direct-access file available to the object program.

  When the READ statement is executed, the associated file must be open in INPUT or I-O mode.  NEXT RECORD Reads the next record in the logical sequence of records. NEXT is optional when ACCESS MODE

IS SEQUENTIAL;  PREVIOUS RECORD Reads the previous record in the logical sequence of records.

Page 129: Copy of Cobol

END OF FILE Processing

         When the ‘AT END’ condition occurs during sequential processing, the READ statement execution is unsuccessful. The contents of the record area are ‘undefined’

 

        The following actions take place when ‘AT END’ occurs:

-        The status indicator is posted.

-        Control is transferred to the AT END phrase, if it is specified

-        If AT END is not specified, then USE AFTER STANDARD ERROR could be specified and that procedure is executed. Then control is returned to the statement following the READ.

  

Page 130: Copy of Cobol

READ – Random Access 

Format 2 : Random Retrieval

 >>_____READ______file-name-1____ __________ ___ _______________ _____________>

 >____ _____________________________ ________________________________________>

|_KEY_____ ___ __data-name-1__|

|_TO_|

  >_____ _______________________________________________ ______________________>

|_INVALID_____ ______ ____imperative-statement-3__|

|_KEY __|

 >____ ___________________________________________ ___ ____________ _______><

|_NOT INVALID___ ___ __imperative-statement-4_| |_END-READ__|

|_KEY_|

-      For VSAM INDEXED files, the KEY field contains a data value that will be matched

against the key filed in the file records until the first record having an equal value is found.

-          For VSAM RELATIVE files, the KEY phrase must not be specified.

 Notes:

  Format 2 must be specified for indexed and relative files in random access mode, and also for files in the dynamic access mode when record retrieval is random.

  Execution of the READ statement depends on the file organization.

 

Page 131: Copy of Cobol

Indexed Files

  Execution of a Format 2 READ statement causes the value of the key of reference to be compared with the value of the corresponding key data item in the file records, until the first record having an equal value is found. The file position indicator is positioned to this record, which is then made

available. If no record can be so identified, an INVALID KEY condition exists, and READ statement execution is unsuccessful. 

If the KEY phrase is not specified, the prime RECORD KEY becomes the key of reference for this request. When dynamic access is specified, the prime RECORD KEY is also used as the key of reference for subsequent executions of sequential READ statements, until a different key of reference is established.

  

Relative Files 

Execution of a Format 2 READ statement sets the file position indicator pointer to the record whose relative record number is contained in the RELATIVE KEY data item, and makes that record available.

 The KEY phrase must not be specified for relative files.

           

Page 132: Copy of Cobol

READ – Dynamic Access

     For dynamic access, either sequential or random access possible, depending upon

the format of the Read statement

 

       Dynamic access is allowed only for VSAM indexed or VSAM relative organizations.

 

         Dynamic access is established by ACCESS IS DYNAMIC in FILE-CONTROL

SELECT statement

 

          The NEXT phrase must be specified for sequential access with dynamic mode. In order to READ NEXT, “position” must have been established in the file by a successful OPEN, START or READ statement

 

  

Page 133: Copy of Cobol

START Statement Format :

  >>___START___file-name-1___________________________________________________________>

 >__ _____________________________________________________________________ ________>

|_KEY___ ______ ____ __EQUAL___ ___ ________________ _data-name-1____|

|__TO _| | |_ TO_| |

|_ = ______________________________|

|_LESS__ _______ ________________|

| |_THAN_| |

|_ < ______________________________|

|_GREATER__ ____ _____________|

| |_THAN_| |

|_> _______________________________|

|_NOT LESS___ _______ ___________|

| |_THAN _| |

|_NOT < ___________________________|

|_NOT GREATER__ _______ ________|

| |_THAN_| |

|_NOT > ___________________________|

|_LESS_ ____ _ OR EQUAL_ __ _____|

| |THAN| |_TO_| |

|_ < = _____________________________|

|_GREATER__ ____ _OR EQUAL_ __ _|

| |_THAN_| \ TO|

|_>+_______________________________|

>__ _______________________________________ _____________________________________>

|_INVALID___ _____ _imperative-statement-1_|

|_KEY_|

>__ _______________________________________ ___________ ____________ _____________>

|_NOT INVALID___ _____ imperative-statement-1_| |_END-START_|

|_KEY_|

 

 Notes: The START statement provides a means of positioning within an indexed or relative file for subsequent sequential record retrieval.

Page 134: Copy of Cobol

When the START statement is executed, the associated indexed or relative file must be open

in either INPUT or I-O mode.

 

file-name-1

Must name a file with sequential or dynamic access. File-name-1 must be defined in an

FD entry in the Data Division, and must not name a sort file.

 

 

 

END-START Phrase

 

  This explicit scope terminator delimits the scope of the START statement. END-START converts a conditional START statement to an imperative statement so that it can be nested in another

conditional statement. END-START can also be used with an imperative START statement.

 

 

 

 

 

Page 135: Copy of Cobol

WRITE Statement

          The WRITE statement releases a logical record for an output or input/output file.

 

        When the WRITE statement is executed:

-         The associated sequential file must be open in OUTPUT or EXTEND mode.

-         The associated indexed or relative file must be open in OUTPUT, I-O, or EXTEND

mode.

         Record-name must be defined in a Data Division FD entry. Record-name can be qualified. It must not be associated with a sort or merge file.

   

Page 136: Copy of Cobol

WRITE……….FROM

PROCEDURE DIVISION.

WRITE File-rec FROM Identifier.

File-rec is record-name declared in FILE-SECTION.

Identifier is a working-storage section variable

• The length of the identifier should be equal to the length of the record.

 Notes:  To Create a file, program can accept the data from the terminal into file record and write it. If the data need to be processed, it can be accepted in a W-S identifier. After processing the data the above WRITE……..FROM statement can be issued.Each WRITE statement writes one record at a time.

Page 137: Copy of Cobol

READ………….INTO

PROCEDURE DIVISION.

READ FILE-name (INTO W-S-Rec) | (AT END Statement)

File name is defined in SELECT clause.W-S-Rec is working-Storage section identifier.INTO clause moves the file record to W-S-rec.AT END clause if used, indicates the next action after the last record is read.

OPEN INPUT Mode

 Notes:READ statement on sequential files reads one record at a time and makes it available to program. Reading begins from first record and if the READ statement is put in a loopThat is executing the statement repeatedly, then it is possible to read consecutive records. Loop can be terminated before AT END condition is reached if required so by the program. If the file is left open next time when the read statement executes, reading continuous from where it was stopped before the termination of loop.

Page 138: Copy of Cobol

If the file is closed then it is to be opened again before reading it.

 

REWRITE & DELETE

REWRITE record-name (FROM identifier)

Updates an existing record from W-S identifier.

OPEN I-O File-name

DELETE record-name ----------------- not allowed

Deleting of a record in sequential files not allowed.

 Notes:It is often required to change the existing data and the process is called UPDATING. COBOL provides REWRITES verb to modify an existing record.

 For example, changing the address field of an employee requires reading of employee number. Every record to be updated needs to be read first. To search the record of an employee, whose employee number is known, the process is as follows

        Store the employee number in a variable        Open the file        Read first record        Compare the variable with Emp-No field of the file        If it matches update his address by REWRITE        Else read next record his address by REWRITE

Page 139: Copy of Cobol

        Repeat the process until the require record is read.

 

Appending to sequential files

  Adding new records to the existing file.

 

OPEN EXTEND Mode

 

WRITE records.

 

 

When new records to be added to file open the file in EXTEND mode

EXTEND mode causes the pointer to move to the end of the file.

 

 

Page 140: Copy of Cobol

CLOSE Statement 

Format : 

CLOSE File-name-1, [File-name-2 ………….]   

CLOSE Statement Releases the Resourcces which are assigned to that file. 

Cannot Close the file which is not opened. 

After performing the operations on the file (I,e no longer used in a program) needs to be closed but not necessary. 

If the FILE STATUS clause is specified in the FILE-CONTROL entry, the associated status key is updated when the CLOSE statement is executed.

  If the file is in an open status and the execution of a CLOSE statement is unsuccessful, the

EXCEPTION/ERROR procedure (if specified) for this file is executed. 

 

Page 141: Copy of Cobol

Sequential Files

ENVIRONMENT DIVISION.INPUT-OUTPUT SECTION.FILE-CONTROLSELECT file-name ASSIGN TO DEVICE-NAME ORGANIZATION IS SEQUENTIAL.ACCESS MODE IS SEQUENTIAL. AreaFILE STATUS IS data-name. B

 Notes: All the files used in the program should have an entry in FILE CONTROL paragraph. For each file used, there should be one SELECT………..ASSIGN clause.The file-name is select clause is user defined word and can be used throughout the program wherever required.ASSIGN clause specifies the device on which file stored.

Page 142: Copy of Cobol

EXAMPLE: SEQUENTIAL FILE ID DIVISION. PROGRAM-ID. SEQ1. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL.

SELECT INFILE ASSIGN TO DDNAME1 ORGANIZATION IS SEQUENTIAL. SELECT OUTFILE ASSIGN TO DDNAME2 ORGANIZATION IS SEQUENTIAL. DATA DIVISION. FILE SECTION. FD INFILE.

01 INREC. 02 ENO PIC X(5). 02 ENAME PIC X(10). 02 EADDRESS PIC X(15). 02 FILLER PIC X(50).

FD OUTFILE. 01 OUTREC PIC X(80). WORKING-STORAGE SECTION. 01 EOF PIC X. PROCEDURE DIVISION.

OPEN INPUT INFILE OUTPUT OUTFILE. READ INFILE INTO OUTREC AT END MOVE 'Y' TO EOF. PERFORM WRITE-PARA UNTIL EOF = 'Y'. CLOSE INFILE OUTFILE. STOP RUN.

READ-PARA. WRITE OUTREC. READ INFILE INTO OUTREC AT END MOVE 'Y' TO EOF.

Page 143: Copy of Cobol

Indexed Files 

Index component consists of a index structure with a record key values and addresses of corresponding records.

 RECORD KEY is one or more fields of the records.Suitable record key is to be chosen by the programmer depending on the functionality of the fields. E.g : Employee-code, Job-number.

 ALTERNATE RECORD KEY can also be chosen. E.g : Employee-name, Job-name.

 Indexed files facilitate faster accessing of records compared to that of sequential files.

  Notes:When an indexed file is created

         An index component is also created containing some index tables based on record keys.

        A data component is created containing the actual records. Record keys identify every record in the file.

 The process of accessing a record involves searching for the record key with matching index value. Then locate the record from the corresponding address.This is done by the system itself.

Page 144: Copy of Cobol

INVALID KEY

(READ | WRITE | REWRITE | DELETE) File-name(INVALID KEY Statement)(AT END Statement).

 Records and indexes of an indexed file are stored in key sequence order to facilitate faster access.

 Invalid key clause checks whether any input-output operation is violating the

 Uniqueness of primary keys

E.g. add a record with duplicate value. 

Sequence of the records.E.g. add a record with key value out of range.

 Proper read

E.g. try to read a non-exist record 

Reading of a record in indexed files required the key value to be provided by the program 

 

Page 145: Copy of Cobol

ACCESS MODE: SEQUENTIAL & RANDOM   ACCESS MODE SEQUENTIAL         READ File-name NEXT RECORD to read sequentially.         DELETE statement should not contain invalid key         AT END clause is required. 

ACCESS MODE RANDOM         READ File-name INVALID KEY statement         AT END clause not required.

 Notes:  When READ NEXT statement is to be executed each time the records are read consecutively. IF the access mode is RANDOM a record is read from corresponding key value.

Page 146: Copy of Cobol

ACCESS MODE: DYNAMIC  

START file-name key

(NOT | LESS THAN | GREATER THAN| LESS THAN ) identifier

INVALID KEY statement

READ file-name NEXT RECORD AT END statement.

 

 Notes:

 

In a situation demanding the access of more than one consecutive records from the middle of the file then

dynamic access is used.

 

The “START” verb places the read pointer to the record whose key value is compared with an identifier. Record is accessed randomly.

 

‘READ…NEXT’ can be put into loop for sequential reading.

 

For the Rewrite/ Delete operations the records must be read at first.

Page 147: Copy of Cobol

IDENTIFICATION DIVISION. PROGRAM-ID. SEQFILE. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT IND-FILE ASSIGN TO DD1 ORGANIZATION IS INDEXED ACCESS MODE IS RANDOM RECORD KEY IS NUM. SELECT OUT-FILE ASSIGN TO DD2 ORGANIZATION IS INDEXED ACCESS MODE IS DYNAMIC RECORD KEY IS NUM1. DATA DIVISION. FILE SECTION. FD IND-FILE. 01 IND-REC. 02 NUM PIC X(3). 02 NAME PIC X(15). 02 ADDR PIC X(10). 02 FILLER PIC X(52). FD OUT-FILE. 01 OUT-REC. 02 NUM1 PIC X(3). 02 NAME1 PIC X(15). 02 ADDR1 PIC X(10). 02 FILLER PIC X(52). WORKING-STORAGE SECTION. PROCEDURE DIVISION. MAIN-PARA. OPEN INPUT IND-FILE I-O OUT-FILE. MOVE '222' TO NUM. READ IND-FILE RECORD INTO OUT-REC KEY IS NUM INVALID KEY GO TO ERR-PARA. WRITE OUT-REC. PERFORM EXIT-PARA. ERR-PARA. DISPLAY 'KEY NOT FOUND'. PERFORM EXIT-PARA. EXIT-PARA. CLOSE IND-FILE OUT-FILE. STOP RUN.

EXAMPLE: INDEXED FILE

Page 148: Copy of Cobol

Relative Files

  FILE CONTROL

SELECT file-name ASSIGN TO Disk

ORGANIZATION IS RELATIVE

RELATIVE KEY data-name-1

 

RRN indicates the offset of a record from the first record of the file.

 

Notes:

 

In relative file Relative Record Number identifies the records of the file. Select clause should specify “RELATIVE KEY”.

 

Value of data-name-1 indicates RRN.

 

Usage of READ/WRITE/ REWRITE/ DELETE statements, ACCESS modes, OPEN modes and START verb, are exactly similar to that for sequential files.

Page 149: Copy of Cobol

OPERATIONS

I O I-O E I O I-O I O I-O

READ X   X   X   X X   X

WRITE   X   X   X     X  

REWRITE     X       X     X

START         X   X X   X

DELETE             X     X                     

READ         X   X X   X

WRITE           X X   X X

REWRITE             X     X

START                    

DELETE             X     X                     

READ         X   X X   X

WRITE           X X   X X

REWRITE             X     X

START         X   X X   X

DELETE             X     X

ACCESS

MODE

SEQUENTIAL

RANDOM

DYNAMIC

Open modes

File Organization

Sequential Relative Indexed

Page 150: Copy of Cobol

 

TABLE HANDLING 

Unit 5

Page 151: Copy of Cobol

Introduction : Table Handling

Consider a situation of accepting 100 numbers from the user , display all The numbers in sorted order.  Types of tables       One dimensional table       Two dimensional table       Multidimensional table Table is a list of logically similar items.

Notes:   Obviously declaring 100 data items in W-S section and sorting them becomes practically impossible. Tables or Arrays provide the solution to handle situations discussed above. If volume of data to be processed is large and if they are not stored in files,then tables are used.  

Page 152: Copy of Cobol

OCCURS Clause

Specifies number of occurrences or elements of the table. 

WORKING-STORAGE SECTION01 Marks.

02 Mark – Table1 OCCURS 10 TIMES PIC 9(2). Valid

02 Mark – Table2 PIC 9(2) OCCURS 10 TIMES Valid

02 Mark – Table3 PIC 9(2) OCCURS 10TIMES VALUE 10 valid

Notes: 

OCCURS clause causes setting up of area for holding the table elements. 

Following rules must be followed with the usage of ‘OCCURS’ clause.1. The Integer must be positive.2.  Clause cannot be specified for an item whose level is 01, 66, 77, 88.3.  Value clause should not be specified with occurs clause.4.  OCCURS clause can be specified for file-section entries for both group items as well as elementary items.

Page 153: Copy of Cobol

Subscript

Indicates the position of an element in the table. PROCEDURE DIVISION Marks – Table (Subscript) Parentheses required Marks Table (I) Valid provided I declared in data division.Marks – Table (5) Valid.Marks – Table (12) Invalid. Notes:         Subscript can be a COBOL variable or a literal. Value of subscript must not exceed the range of no. of occurrences specified by ‘OCCURS’ clause.         If OCCURS clause is specified for a group items subscript should be specified for all elementary items of that group.         Subscript should be specified for only data items defined with OCCURS clause, whenever used in procedure division.

Page 154: Copy of Cobol

INDEXING

        An “index-name” is an identifier that becomes associated with a particular table. The value in an index is the displacement from the beginning of the table based upon the length of the table element.

 

        An “index-name” may appear on an OCCURS clause, e.g.

01 TABLE-OF-MONTHS.

02 MONTHS OCCURS 12 TIMES.

PIC X(10) INDEXED BY NDX.

 

        The “index-name” is created by the compiler; it does not have to be defined

elsewhere in the program.

 

        The contents of an index may be changed by the SET TO statement

 

        An index may not be used in a MOVE statement or an INITIALIZE statement.

Page 155: Copy of Cobol

Notes:

Indexing allows such operations as table searching and manipulating specific items.

To use indexing you associate one or more index-names with an item whose data

description entry contains an OCCURS clause. An index associated with an index-name

acts as a subscript, and its value corresponds to an occurrence number for the item to

which the index-name is associated.

 

The INDEXED BY phrase, by which the index-name is identified and associated

with its table, is an optional part of the OCCURS clause. There is no separate

entry to describe the index associated with index-name. At run time, the contents of the

index corresponds to an occurrence number for that specific dimension of the table

with which the index is associated.

Page 156: Copy of Cobol

One Dimensional Tables

Specified by one subscript or index

 

Example:

   01  ABC.

02 XYZ PIC X(10) OCCURS 10 TIMES.

 

 

XYZ(1) WHERE 1 Specifies the first element of XYZ.

 

Page 157: Copy of Cobol

Two Dimensional Tables

Specified by two subscripts or indexes.

 

Student (3 5) =5th Subject of 3rd Student.

Marks (3 5) =5th Marks of 3rd Student.

 

 

If it requires storing the Marks of N subject for M students then we require two ‘OCCURS’ clauses.

Notes:

Two dimension tables are used most frequently in applications. Consider for examples, 10 Students of a class appeared for 8 subjects in their annual exams and you need to code a program to store and retrieve the data.

Data includes names of all the students, marks and names of corresponding subjects.

To store the marks of ‘n’ subjects of one student, one dimension table serves the purpose. If number of students is more than one than for each student there OCCURS ‘n’ subjects and marks. Next foil shows the W-S

declarations for this example.

Page 158: Copy of Cobol

Multidimensional Table

Each OCCURS clause adds a dimension in nested occurs.

 

Ex:

 

01 Multidimensional.

02 First-dim OCCURS 10 TIMES PIC X.

02 Second-dim OCCURS 5 TIMES.

05Second PIC A.

05Third-dim OCCURS 10 TIMES

10Third PIC 5.

Notes:

 

COBOL supports multidimensional tables up to 7 levels.

Page 159: Copy of Cobol

Table-Sorting

Use Sorting techniques to sort a table.

e.g Bubble sort

  PERFORM VARYING I FROM 1 BY 1 UNTIL I = N

PERFORM J FROM I BY 1 UNTIL J > N

IF A[I] > A[J]

MOVE A[I] TO TEMP

MOVE A[J] TO A[I]

MOVE TEMP TO A[J]

END-IF

END-PERFORM

END-PERFORM.

 

  I and J are used as subscripts for comparing elements of the table.

 

Notes:

  

Sorting is the process of arranging the elements of table in order. Searching for a particular element of the

sorted table, requires less time when compared to searching from an unsorted table.

 

‘SORT’ verb available in COBOL is limited to File sorting.

Page 160: Copy of Cobol

SET Verb

SET verb initializes and / or changes the value of index.

  E.g. :

SET K To 1 K is initialized to 1

 

SET K UP BY 2 Value increment by step of 2.

 

SET K DOWN BY 2 Decrements by step of 2

 

MOVE verb cannot be used for index.

  E.g. : SET data-name-1, data-name-2 TO K

SET verb moves of value of K to data-name-1 and data-name-2.Notes:

 

Even though indexes assume the displacement values for table elements internally, programmer sets the value of an index by specifying the position of an element.

 

This means an index indicates the position of an element in the table similar to subscript, but internally it is processed in a different manner, but more efficient

Page 161: Copy of Cobol

SEARCH Verb

Searches for a particular value in the table, which has an index.

 

SEARCH Table – name AT END statement

WHEN condition statement

 

Ex : SET K TO 1

SEARCH table-name AT END DISPLAY ‘not found’.

WHEN field-1 = element (K) DISPLAY element (K).

Notes:

 

In the above example, field-1 contains the required value to be searched for in the table,

More than one ‘condition’ can be checked, with more than one ‘WHEN’ clause.

All valid arithmetic operators can be used.

 

This form of search statement is called serial search.

Page 162: Copy of Cobol

Binary Search

Searches the table previously sorted, by splitting the table.

Faster than serial search

 

Only one ‘WHEN’ clause is allowed.

 

SEARCH ALL Table-Name other clauses

………. remain same.

WHEN…….…

Notes:

 

   Before applying ‘SEARCH ALL’ clause the table must be sorted.

 

SEARCH ALL causes the table to split into two halves. Then it determines which half of the table contains

the required value by comparing it to the last element of the first half and first element of the second half.

  Again the selected half-table splits and continues and so on until the value is located .

Page 163: Copy of Cobol

ILLUSTRATES ONE-DIMENSIONAL ARRAYS

DATA DIVISION. 

WORKING STORAGE SECTION.77 CT PIC 99 VALUE 0.01 TAX-RATE.

05 RATE PIC 999 OCCURS 5 TIMES.  * There should be a space before and after the braces.

  01 MONTH-TABLE.02 FILLER PIC X(9) VALUE “January”.02 FILLER PIC X(9) VALUE “February”.02 FILLER PIC X(9) VALUE “March:”02 FILLER PIC X(9) VALUE “April”.02 FILLER PIC X(9) VALUE “May”.02 FILLER PIC X(9) VALUE “June”.02 FILLER PIC X(9) VALUE “July”.02 FILLER PIC X(9) VALUE “August”.02 FILLER PIC X(9) VALUE “September”.02 FILLER PIC X(9) VALUE “October”.02 FILLER PIC X(9) VALUE “November”.02 FILLER PIC X(9) VALUE “December”.

01 MONTH-NAME REDEFINES MONTH-TABLE.02 MONTH PIC X(9) OCCURS 12 TIMES.

Page 164: Copy of Cobol

PROCEDURE DIVISION.

 

100-MAIN-PARA.

PERFORM 200-FILL-PARA VARYING CT FROM 1 BY 1.

UNTIL CT>5.

PERFORM 300-DISP-PARA VARYING CT FROM 1 BY 1.

UNTIL CT>5.

PERFORM 400-MNTH-PARA.

STOP RUN.

 

200-FILL-PARA.

COMPUTE RATE ( CT ) = CT*100.

 

300-DISP-PARA.

DISPLAY RATE ( CT ).

 

400-MNTH-PARA.

DISPLAY “Month as a number ?”

ACCEPT CT.

IF CT< 1 OR > 12 DISPLAY “Error in number”

ELSE DISPLAY MONTH ( CT ).

Page 165: Copy of Cobol

ILLUSTRATES SEARCH VERB

DATA DIVISION.

01 MONTH-TABLE.

02 FILLER PIC X(9) VALUE “January”.

02 FILLER PIC X(9) VALUE “February”.

02 FILLER PIC X(9) VALUE “March:”

02 FILLER PIC X(9) VALUE “April”.

02 FILLER PIC X(9) VALUE “May”.

02 FILLER PIC X(9) VALUE “June”.

02 FILLER PIC X(9) VALUE “July”.

02 FILLER PIC X(9) VALUE “August”.

02 FILLER PIC X(9) VALUE “September”.

02 FILLER PIC X(9) VALUE “October”.

02 FILLER PIC X(9) VALUE “November”.

02 FILLER PIC X(9) VALUE “December”.

01 MONTH-NAME REDEFINES MONTH-TABLE.

02 MONTH OCCURS 12 TIMES INDEXED BY CT.

05 FIRST-THREE PIC X (3).

05 BALANCE-REST PIC X (6).

77 M-NAME PIC X (9) VALUE SPACES.

Page 166: Copy of Cobol

PROCEDURE DIVISION.

 

MAIN PARA.

DISPLAY “Month’s Name please”.

ACCEPT M-NAME.

SET CT TO 1.

SEARCH MONTH AT END DISPLAY “Not Found”.

WHEN M-NAME = MONTH ( CT ).

DISPLAY FIRST-THREE ( CT ).

STOP RUN.

Page 167: Copy of Cobol

ILLUSTRATE TWO-DIMENSIONAL ARRAYS

DATA DIVISION

  WORKING-STORAGE SECTION.

01 WORK-AREA

05 MORE DATA PIC A VALUE “Y”.

88 NO-MORE-DATA VALUE “N”.

01 TEMPERATURE-ARRAY.

05 DAY-IN-THE-WEEK OCCURS 24 TIMES.

10 HOURS-IN-THE-DAY OCCURS 24 TIMES.

15 DEGREE-TEMP PIC S9(3).

77 DAY-OF-THE-WEEK PIC 9.

77 TIME-OF-THE-DAY PIC 99.

77 HOUR-COUNT PIC 99.

77 DAY-COUNT PIC 9.

77 TOT-TEMP PIC S999.

77 AVERAGE-TEMP PIC S999.

  PROCEDURE DIVISION.

  100-MAIN-PARA.

PERFORM 200-DATA-ACCP-RTN UNTIL NO-MORE-DATA.

PERFORM 300-DATA-DISP-RTN.

STOP RUN.

Page 168: Copy of Cobol

 200-DATA-ACCP-RTN.

DISPLAY “Day of the Week : 1-Sunday….7-Saturday :”ACCEPT DAY-OF-THE-WEEK.DISPLAY “Time of the Day during Data Collection :”ACCEPT TIME-OF-THE- WEEK.DISPLAY “Temperature”ACCEPT DEGREE-TEMP (DAY-OF-THE-WEEK, TIME-OF-THE-DAY).DISPLAY “Anymore (Y/N):”ACCEPT MORE-DATA.

  300-DATA-DISP-RTN.

PERFORM VARYING DAY-COUNT FROM 1 BY 1 UNTIL DAY-COUNT > 7.

PERFORM VARYING DAY-COUNT FROM 1 BY 1 UNTIL HOUR-COUNT > 24.DISPLAY “ DAY : “, DAY-COUNT, “ HOUR: “,HOUR-COUNT, “TEMP : “ ,DEGREE-TEMP ( DAY-COUNT, HOUR-COUNT )ADD DEGREE-TEMP ( DAY-COUNT, HOUR-COUNT )

TO TOT-TEMP.COMPUTE AVERAGE-TEMP = TOT-TEMP / 168.DISPLAY “ Week’s Average Temperature Is : “, AVERAGE-TEMP”.

 

Page 169: Copy of Cobol

ILLUSTRATES MULTIPLE INDEXES AND 3D ARRAYS

DATA DIVISION.  WORKING-STORAGE SECTION.

01 ENROLL-TABLE. 02 FACULTY OCCURS 3 TIMES INDEXED BY F1, F2.

03 DEPARTMENT OCCURS 6 TIMES INDEXED BY D1, D2.04 YEAR OCCURS 5 TIMES INDEXED BY Y1, Y2.

05 FAC PIC X (15).05 DEPT PIC X (10).05 YY PIC 9 (4).

77 ANYMORE PIC A VALUE “Y”.  PROCEDURE DIVISION.  100-MAIN-PARA.

SET F1, D1, F2, D2, Y2 TO 1.PERFORM 200-ACC-PARA UNTIL SNYMORE = ‘N’.

DISPLAY “THE CONTENTS OF 3 DIMENSIONSAL ARRAY ARE :” PERFORM VARYING R2 FROM 1 BY 1 UNTIL F2 > F1 AFTER D2 FROM 1 BY 1 UNTIL D2 > D1. AFTER Y2 FROM 1 BY 1 UNTIL Y2 > Y1 DISPLAY RAC (F2, D2, Y2) DISPLAY DEPT (F2, D2, Y2) DISPLAY YY (F2, D2, Y2). STOP RUN.

Page 170: Copy of Cobol

200-ACC-PARA.

DISPLAY “ENTER FACULTY NAME”.

ACCEPT FAC (F1, D1, Y1).

DISPLAY “ENTER DEPARTMENT NAME:.

ACCEPT DEPT (F1, D1, Y1).

DISPLAY “ENTER YEAR”.

ACCEPT YY (F1, D1, Y1).

IF Y1 = 5

IF D1 = 6

IF F1 = 3

MOVE “N” TO ANYMORE

ELSE

SET F1 UP BY 1

END-IF

ELSE

SET D1 UP BY 1

END-IF

ELSE

SET Y1 UP BY 1.

DISPLAY “ANYMORE”.

ACCEPT ANYMORE

Page 171: Copy of Cobol

UNIT 6

Library Services

Page 172: Copy of Cobol

COPY Statement

The COPY statement is a library statement that places prewritten text in

a COBOL program

 

Each COPY must be terminated by a period

 

If ‘library-name’ is omitted, then SYSLIB is assumed

Format:

 

>>____COPY____ _____text-name___ _____ _____________________________________>

| _ literal __| |_ _OF _ ____ library-name_ ___|

|_IN_| |_ literal –2_______|

 

>____ ____________ _____ _________________________________________ ___ ______><

|_SUPPRESS__| | <______________________________ _|

|__REPLACING_______operand-1___BY__operand-2___|_|

 

 

Page 173: Copy of Cobol

Notes:

 

SUPRRESS means that the imbedded text will not be printed in the source program listing

 

COPY requires the LIB compiler option to be in effect

 

The COPY statement is a library statement that places prewritten text in a COBOL program.

Prewritten source program entries can be included in a source program at compile time. Thus, an installation

can use standard file descriptions, record descriptions, or procedures without recording them. These entries

and procedures can then be saved in user-created libraries; they can then be included in the source program

by means of the COPY statement.

 

Compilation of the source program containing COPY statements is logically equivalent to processing

all COPY statements before processing the resulting source program.

The effect of processing a COPY statement is that the library text associated with text-name is copied into

the source program, logically replacing the entire COPY statement, beginning with the word COPY and

ending with the period, inclusive. When the REPLACING phrase is not specified, the library text is copied

unchanged

Page 174: Copy of Cobol

Each COPY statement must be preceded by a space and ended with a separator period.

 

Debugging lines are permitted within library text and pseudo-text.

 

Comment lines or blank lines can occur in library text. Comment lines or blank lines appearing in library text

are copied into the resultant source program unchanged with the following exception: a command line or blank

line in library text is not copied if that comment line or blank line appears within the sequence of text

words that match operand-1

 

 

A COPY statement can appear in the source program anywhere a character string or a separator can appear;

however, a COPY statement must not be specified within a COPY statement. The resulting copied text

must not contain a COPY statement.

 

 

 

 

 

 

Page 175: Copy of Cobol

Nested COPY

 

COPY FILEA.

 

FILEA contains: ADDRESS contains:

01 FILEA. 05 STREET PIC X(40).

05 NAME PIC X(40). 05 CITY PIC X(20).

COPY ADDRESS. 05 STATE PIC X(02).

05 DATA PIC X(100). 05 ZIP PIC X(09).

 

Compile produces:

01 FILEA.

05 NAME PIC X(40).

05 STREET PIC X(40).

05 CITY PIC X(20).

05 STATE PIC X(02).

05 ZIP PIC X(09).

05 DATA PIC X(100).

Page 176: Copy of Cobol

Notes:

 

COBOL allows nested COPY statements.

Nested COPY statements cannot contain the REPLACING phrase.

A COPY statement can appear in the source program anywhere a character string or a separator can appear.

As an IBM extension, COPY statements can be nested. However, nested COPY statements cannot

contain the REPLACING phrase, and a COPY statement with the REPLACING phrase cannot contain

nested COPY statements.

 

A COPY statement cannot cause recursion. That is, a COPY member can be named only once

in a set of nested COPY statements until the end-of-file for that COPY member is reached.

Page 177: Copy of Cobol

COPY REPLACING

To change some, or all, of the names in the library (COPY’ed) text, the programmer

can use the REPLACING option.

 

The text in the library is unchanged.

 

COPY PAYLIB REPLACING

FLDA BY PAY-RECORD

FLDA BY HRLY-RATE

FLDA BY HRS-WORKD.

 

LIBRARY TEXT SOURCE PROGRAM

01 FLDA. 01 PAY-RECORD.

02 FLDB PIC 999V99. 02 HRLY-RATE PIC 999V99.

02 FLDC PIC 999V99. 02 HRS-WORKD PIC 999V99.

 

Page 178: Copy of Cobol

In the discussion that follows, each operand can consist of one of the following:

 

        Pseudo-text

        An identifier

        A literal

        A COBOL word

  Function identifier

Page 179: Copy of Cobol

COPY Pseudo-Text

    To change only part of the data-name(s) in the library text, the programmer can

use the REPLACING option with the standard pseudo-text delimiters (==)

 

COPY PAYLIB REPLACING

= = : PFFX: = = BY = = PAY = =.

 

LIBRAR TEXT SOURCE PROGRAM

 

01 :PFFX:. 01 PAY.

02 :PFFX:-RTE 02 PAY-RTE

PIC 999V99. PIC 999V99.

02 :PFFX: - HRS 02 PAY-HRS

PIC 999V99. PIC 999V99.

Page 180: Copy of Cobol

Notes :

Pseudo-text A sequence of character-strings and/or separators bounded by, but not including, pseudo-text-1

delimiters (= =). Both characters of each pseudo-text-1 delimiter must appear on one line; however,

character-strings within pseudo-text-1 can be continued.

 

Any individual character-string within pseudo-text-1 can be up to 322 characters long.

 

Pseudo-text-1 cannot be null, nor can it consist solely of the space character, separator comma, separator

semicolon, and/or of comment lines. Beginning and ending blanks are not included in the text

comparison process. Embedded blanks are used in the text comparison process to indicate multiple text words.

 

Pseudo-text must not contain the word COPY.

 

Page 181: Copy of Cobol

REPLACE Pseudo-test

 

        Replace can be applied to the entire program, including text introduced through COPY members

 

         Replace action starts at a the REPLACE statement and continues until:

- Another REPLACE statement

- REPLACE OFF statement

- End of source program

 

       REPLACE statements are processed by the compiler after any COPY statements

are processed

 

 

Page 182: Copy of Cobol

UNIT 7

CHARACTER HANDLING

Page 183: Copy of Cobol

STRING

Two or more fields can be concatenated or ‘string’ in to single-field.

 STRING (id- 1 | literal ), (id-2 | literal )DELIMITED BY (id- 3 | literal | size |space),……..

(id- 4 | literal )DELIMITED BY (id- 4 | literal ), (id 5 | literal )……INTO id – 7 (with pointer id- 6 ).

(ON OVERFLOW statement) 

Page 184: Copy of Cobol

Notes:

 

‘Delimited by’ clause specifies how the fields are concatenated, Its usage is described in

following foils.

‘With pointer’ option if used gives the total no. of characters in the concatenated field (id-7)

If the length of id-7 is not enough to hold the transferred characters, the statement after ‘on

overflow’ option is executed.

One STRING statement can be written instead of a series of MOVE statements.

 

The following rules should be followed when this verb is used.

(i). This statement is used to concatenate one or more strings into one by placing them

side by side.

(ii). Sending strings may be alphanumeric literals, figurative constants or identifiers

with usage DISPLAY.

(iii). The receiving string, i.e., identifier- 7 must also be with usage DISPLAY.

 

Page 185: Copy of Cobol

STRING example :

DATA DIVISION. WORKING-STORAGE SECTION. 77 ID-1 PIC X(7) VALUE 'CON,CON'. 77 ID-2 PIC X(7) VALUE 'CAT,CAT'. 77 ID-3 PIC X(6) VALUE 'ENATED'. 77 ID-4 PIC X(12). 77 COUNTER PIC 9(3) VALUE ZEROS. PROCEDURE DIVISION. STRING ID-1, ID-2, ID-3 DELIMITED BY ',' INTO ID-4

 RESULT

Content if id-4: CONCATENATED.

  The following example shows usage of ‘size’ option.

 77 F – 1 PIC X(7) VALUE ‘HIGHTEC”77 F – 2 PIC X(7) VALUE SPACES.STRING ‘MAIN’ DELIMITED BY SIZE F – 1 INTO F – 2.

Page 186: Copy of Cobol

ILLUSTRATES STRING VERB

DATA DIVISION. 

WORKING STORAGE-SECTION.01 FULL-NAME PIC X(30).01 FIRST-NAME PIC X(10) VALUE SPACES.01 MIDDLE-NAME PIC X (10) VALUE SPACES.01 LAST-NAME PIC X (10) VALUE SPACES.

 PROCEDURE DIVISION.

 100-MAIN-PARA.

MOVE ‘RAJA’ TO FIRST-NAME.MOVE ‘ROMOHAN’ TO MIDDLE-NAME.MOVE ‘ROY’ TO LAST-NAME.STRING FIRST-NAME,MIDDLE-NAME,LAST-NAME DELIMITTED BY

SPACE INTO FULL-NAME.         

Page 187: Copy of Cobol

UNSTRING Statement The UNSTRING statement is used to split a single data item into several data items Format:

 

>>__UNSTRING___identifier-1__________________________________________________________>  >__ _____________________________________________________________________________ ___> |_DELIMITED___ _____ ___ _____ ___ __identifier-2__ ____ __________________________| |_BY_| |_ALL_| |_literal-1______| | <_____________________ |

|__OR_ ___ __ identifier-3_ _| |

|_ALL_| |_literal-2__|

>___INTO____________________________________________________________________________>  >____identifier-4__ _____________________________ ____ ___________________________ __| __> |_DELIMITER__ ___ identifier-5 _| |_COUNT__ ____ identifier-6___| |_IN_| |_IN__|

 >___ ___________________________ ____ _______________________________ ______________> |_ ____ _POINTER__identifier-7_| |_TALLYING___ ____ __identifier-8_| |_WITH_| |_IN_|  >__ _____________________________________________ _________________________________> |_ _____ ___OVERFLOW__imperative-statement-1___| |_WITH_|  >___ __________________________________________________ ___ _________________ _______> |_ NOT__ _____ __OVERFLOW__imperative-statement_2_| |_END-UNSTRING_| |_ON_|

Page 188: Copy of Cobol

Notes:

 

The UNSTRING statement causes contiguous data in a sending field to be separated and placed into multiple receiving fields.

 

One UNSTRING statement can take the place of a series of MOVE statements, except that evaluation or calculation of certain elements is performed only once, at the beginning of the execution of the

UNSTRING statement.

 

When the TALLYING phrase is specified, the field-count field contains a value equal to the initial value, plus the number of data receiving areas acted upon.

Page 189: Copy of Cobol

ILLUSTRATES UNSTRING VERB

DATA DIVISION. 

WORKING STORAGE-SECTION.01 FULL-NAME PIC X(30).01 FIRST-NAME PIC X(10) VALUE SPACES.01 MIDDLE-NAME PIC X (10) VALUE SPACES.01 LAST-NAME PIC X (10) VALUE SPACES.

 PROCEDURE DIVISION.

 100-MAIN-PARA.

MOVE ‘RAJA ROMOHAN ROY’ TO FULL-NAME.UNSTRING FULL-NAME DELIMITTED BY SPACE INTO FIRST-NAME,

MIDDLE-NAME,LAST-NAME.             

Page 190: Copy of Cobol

EXAMINE Statement

  

ALLEXAMINE Identifier TALLYINY LEADING Literal - 1

UNTIL FIRST  

ALLEXAMINE Identifier REPLACING LEADING Literal - 2 BY Literal - 3

UNTIL FIRST  

ALLEXAMINE Identifier TALLYINY LEADING Literal - 4

UNTIL FIRST 

REPLACING BY Literal - 5  

Page 191: Copy of Cobol

Notes:

This verb is used to scan a string to find the number of occurrences of a given character in it.

In addition, the Verb can also be use to replace some or all occurrences of the said character

by another character.

 

Eg :

Let us consider the following DATA DIVISION entry

77 A PIC X(5) VALUE IS “PPRIP”.

Now the statement

EXAMINE A TALLYING ALL “P”.

Will store 3 in the TALLY register as there are altogether three P’s in the string.

However the statement

EXAMINE A TALLYING LEADING “P”

Will store 2 in the TALLY , Since there are only Two leading P’s.

Page 192: Copy of Cobol

The statement

 

EXAMINE A TALLYING UNTIL FIRST “I”.

Will store 3 in the TALLY as there are only Three characters before the character I.

It may be noted here that if a particular character is not found, TALLY is set to

Zero, When the ALL or LEADING phrase is used. For e.g.. In the statement

 

EXAMINE A TALLYING LEADING “R”

Will set TALLY to zero, Since the leading character is not R.

If the UNTIL FIRST phrase is used and the specified character is not found, the TALLY will

contain the size of the string

 

 

Page 193: Copy of Cobol

EXAMINE---REPLACING.

EXAMINE A TALLYING ALL “P” REPLACING BY “Q”

Will store 3 in the TALLY register and will change the content of A to “QQRIQ”.

 

EXAMINE A REPLACING FIRST “I” BY “M”

Will change the content of A to “PPRMP”.

 

EXAMINE A REPLACING UNTIL FIRST “I” BY “Y”

Will change the content of A to “YYYIP”.

In each of the cases A is assumed to be defined as before.

 

Page 194: Copy of Cobol

INSPECT TALLYING Statement

The INSPECT statement specifies that characters, or groups of characters, in a data item are to be counted (tallied) or replaced or both.

 

° It will count the occurrence of a specific character (alphabetic,

numeric, or special character) in a data item.

 

° It will fill all or portions of a data item with specified characters,

such as spaces or zeros.

 

° It will convert all occurrences of specific characters in a data item

to user-supplied replacement characters.

Page 195: Copy of Cobol

Format: 

>>___INSPECT___identifier-1______TALLYING____________________________________________________>  <___________________________________________________________________________________ <_______________________________________________________ |

>____identifier-2___FOR____ __CHARACTERS____ ____________ _| _____________________ __ | __|_____>

| |_|phrase 1 |__| | | < _____________________________________ | | <_______________________ | | |__ __ALL _________ ___ __identifier-3___ __ ___________ _| _| _| |_LEADING______| |_literal________| |_ | phrase 1 _|

>_____REPLACING____________________________________________________________________________> <_______________________________________________________________________________ 

>_______ __CHARACTER BY____ _identifier-5__ ______ _______________ __|__________________ __|____> | |_literal-3____| |__| phrase |_| | | <_______________________________________________________ | | <________________ | | |__ ALL_____ ______ ___identifier-3___ ___BY__ _identifier-5__ ____ ______________| _| _| |_LEADING_| |_literal-1________| |_literal-3____| |_| phrase 1 |__| 

 phrase 1:|__ __BEFORE__ __ _____________ __ _identifier-4__________________________________________________| |_AFTER___| |_INITIAL_____| |_literal-2__|

 

Page 196: Copy of Cobol

Notes: 

TALLING Phrase counts the occurrence of a specific character (alphabetic, numeric, or special character) in a data item.  

Identifier-1:  Identifier-1 is the inspected item and can be any of the following:          An alphanumeric data item          An numeric data item with USAGE DISPLAY         An external floating point item 

Identifier-2 Is the count field, and must be an elementary integer item defined without the symbol P in

its PICTURE character-string 

You must initialize identifier-2 before execution of the INSPECT statement begins.  

Identifier-3 or literal-1 

Is the tallying field (the item whose occurrences will be tallied).  

Page 197: Copy of Cobol

Eg:

 

PROCEDURE DIVISION.

INSPECT HELLO TALLYING TALLY-COUNT FOR ALL “A”

Let the picture of HELLO be X(20) and suppose its content before the execution of the

above statement is as follows :

APARNAbKUMARIbAMMAbb

If picture of TALLY-COUNT is 9(2) and originally contains 08, then after the execution

of the statement, TALLY-COUNT will contain 14, as there are a total of 6 A’s in HELLO.

 

If ALL in the statement is changed to LEADING , TALLY-COUNT will be increased to 9, as there is only one leading A. if CHARACTERS is specified instead of ALL

“A”, TALLY-COUNT will be increased to 28 as there are a total of 20 characters in HE LLO.

 

 

 

 

Page 198: Copy of Cobol

INSPECT REPLACING Statement

This phrase fills all or portions of a data item with specified characters, such as spaces or Zeros.  When REPLACING CHARACTERS is used the identifier-5 must be 1 character in length

Format: 

>>___INSPECT___identifier-1___REPLACING______________________________________________>  <___________________________________________________________________________

 >_______ __CHARACTERS BY___ __identifier-5__ ____ ___________ ___ | ____________ __| ___> | |_literal-3______| |_| phrase 2 |_| | | <__________________________________________________ | | <_____________ | | |_ ALL_____ _______ identifier-3_ ___BY__ __identifier-5__ _ _________ _| _| _| |_LEADING_| |_literal-1___| |_literal-3______| |_| phrase 1 |_| 

phrase 1:|___ BEFORE_ __ ________ __ identifier-4_ ________________________________________________|

|_AFTER_| |_INITIAL_| |_literal-2___|    INSPECT DATA1 REPLACING ALL “ “ BY “0”

INSPECT DATA2 REPLACING FIRST ZERO BY SPACEINSPECT DATA3 REPLACING CHARACTER ZERO BY “X”INSPECT DATA4 REPLACING LEADING “0” BY SPACE

 

 

Page 199: Copy of Cobol

REPLACING Phrase 

-identifier-3 or literal-1 

Is the subject field (the item whose occurrences are replaced). 

Identifier-3 can be:        An elementary alphanumeric data item         A numeric data item with USAGE DISPLAY       An external floating point item 

Literal-1 must be non-numeric, and can be any figurative constant that does not begin with the word ALL. If literal-1 is a figurative constant, it is considered to be a 1-character nonnumeric literal.

 Identifier-5 or literal-3

  Is the substitution field 

Identifier-5 can be:

      . An elementary alphanumeric data item

         A numeric data item with USAGE DISPLAY         An external floating point item  Literal-3 must be nonnumeric, and can be any figurative constant that does not begin with the word ALL.

Page 200: Copy of Cobol

The following replacement rules apply:

 

When the subject field is a figurative constant, the single-character substitution field(which

must be 1 character in length) replaces each character in the inspected item equivalent

to the figurative constant.

 

When the substitution field is a figurative constant, the substitution field replaces each

non-overlapping occurrence of the subject field in the inspected item.

 

When the subject and substitution fields are character-strings, the character-string specified

in the substitution field replaces each non-overlapping occurrence of the subject field in the

inspected item

Page 201: Copy of Cobol

UNIT 8

SORT / MERGE

Page 202: Copy of Cobol

SORT/MERGE

 

       SORT Statement

 

       MERGE Statement

 

       SORT PROCEDURES

 

      RELEASE/RETURN Statements

 

Page 203: Copy of Cobol

SORT Statement

         The SORT statement accepts records, sorts them according to specified keys, and makes the sorted results available for further processing. 

Format 1: 

SORT file-name-1 ON ASCENDING/DESCENDING KEY data-name-1 USING file-name-2 GIVING file-name-3.  

Format 2: 

SORT file-name-1 ON ASCENDING/DESCENDING KEY data-name-1 INPUT PROCEDURE IS Procedure-name-1[THRU Procedure-name-2] USING file-name-2 GIVING file-name-3.

 Format 3:

 SORT file-name-1 ON ASCENDING/DESCENDING KEY data-name-1 INPUT PROCEDURE IS Procedure-name-1[THRU Procedure-name-2] USING file-name-2 OUTPUT PROCEDURE IS Procedure-name-3[THRU Procedure-name-4]GIVING file-name-3.

Page 204: Copy of Cobol

Notes: 

The SORT Statement accepts records from one or more files. Sorts them according to the specified key(s), and makes the sorted records available either through an OUTPUT PROCEDURE or in an output file. The SORT Statement can appear any where in the procedure division except in the declarative portion.  

File-name-1 

The name given in the SD entry that describes the records to be sorted. 

No pair of file-names in a SORT statement can be specified in the same SAME SORT AREA , or Same SORT-MERGE AREA clause. File-names associated with the giving clause (file-name-3…) cannot be specified in the SAME AREA clause. 

File-names associated with the giving clause (file-name-3…) can be specified in the SAME AREA clause. 

ASCENDING / DESCENDING KEY phrase 

This Phrase specifies that records be to be processed in ascending or descending sequence (depending on the phrase specified), based on the specified sort keys. 

When the GIVING phrase is specified , all the sorted records I the file-name-1 are automatically transferred to the output files ( file-name-3…).   

Page 205: Copy of Cobol

MERGE Statement

The MERGE statement combines two or more identically sequenced files(that is, files that have already

been sorted according to an identical set of ascending/descending keys) on one or more keys and makes

records available in merged order to an output procedure or output file.

 Format:

 

>>___MERGE__file-name-1____ _____ ___ __ASCENDING__ ___ _______ __data-name-1__| __|_>

 

>___ _____________________________________________________ __USING__file-name-2_______>

|__ ________________ __SEQUENCE__ ____ _alphabet-name-1_|

|_COLLATING____| |_IS_|

 

<__________________

>_____file-name-3__|___________________________________________________________________>

 

>___ __OUTPUT PROCEDURE___ ___ __procedure-name-1__ __________________________ _ _><

|_ |_IS_| |_ _ THROUGH_ procedure-name-2_| _|

| |_THRU____| |

| <________________ |

|_ GIVING___file-name-4__| _________________________________________________________|

 

Page 206: Copy of Cobol

Notes:

 

The MERGE statement combines two or more identically sequenced files(that is, files that have already

been sorted according to an identical set of ascending/descending keys) on one or more keys and makes

records available in merged order to an output procedure or output file.

 

A MERGE statement can appear anywhere in the Procedure Division except in a Declarative Section.

 

The file names given must be in the SD entry.

 

When the MERGE statement is executed, all records contained in file-name-2, file-name-3,…., are

accepted by the merge program and then merged according to the key(s) specified.

Page 207: Copy of Cobol

SORT PROCEDURES

 

        Procedures can add, delete, alter or edit the records

 

  With SORT ….INPUT PROCEDURE you can specify processing to be

performed on the records before they are sorted

 

       With SORT …..OUTPUT PROCEDURE you can specify processing to be

performed on the records after they are sorted

 

       In an input procedure the RELEASE statement is used to place a record into the

file to be sorted

 

      In an output procedure the RETURN statement is used to extract a record from

the sorted file

 

Page 208: Copy of Cobol

Notes:

 

INPUT PROCEDURE Phrase

  This phrase specifies the name of a procedure that is to select or modify input records before the sorting operation begins.

 

The input procedure can consist of any procedure needed to select, modify or copy the records that are made available one at a time by the RELEASE statement to the file referenced by file-name-1. The range includes all statements that are executed as the result of a transfer of control by CALL, EXIT, GO TO, and PERFORM statements in the range of the input procedure, as well as all statements in declarative procedures that Sare executed as a result of the execution of statements in the range of the input procedure. The range of the input procedure must not cause the execution of any MERGE, RETURN, or SORT statement.

 

If an input procedure is specified, control is passed to the input procedure before the file referenced by file-name-1 is sequenced by the SORT statement. The compiler inserts a return mechanism at the end of the last statement in the input procedure. When control passes the last statement in the input procedure, the records that have released to the file referenced by file-name-1 are sorted.

Page 209: Copy of Cobol

OUTPUT PROCEDURE Phrase

This phrase specifies the name of a procedure that is to select or modify output records

from the sorting operation.

 

The output procedure can consist of any procedure needed to select, modify, or copy the records that are made available one at a time by the RETURN statement in sorted order from the file referenced by file-name-1. The range includes all statements that are executed as the result of a transfer of control by CALL, EXIT, GO TO, and PERFORM statements in the range of the output procedure. The range also includes all statements in declarative procedures that are executed as a result of the execution of statements in the range of the output procedure. The range of the output procedure must not cause the execution of any MERGE, RELEASE, or SORT statement.

 

If an output procedure is specified, control passes to it after the file referenced by file-name-1 has been sequenced by the SORT statement. The compiler inserts a return mechanism at the end of the last statement in the output procedure and when control passes the last statement in the output procedure, the return mechanism provides the termination of the sort and then passes control to the next executable statement after the SORT statement. Before entering the output procedure, the sort procedure reaches a point at which it can select the next record in sorted order when requested. The RETURN statements in the output procedure are the requests for the next record.

 

 

Page 210: Copy of Cobol

RELEASE Statement  

       The RELEASE statement is only used within the INPUT PROCEDURE of a SORT       The RELEASE statement makes the contents of record-name-1 available to the initial phase of the SORT process        Upon completion of the INPUT PROCEDURE, the sort file consists of all records placed there by the RELEASE statement 

Format: 

____RELEASE____record-name-1____ _____________________________ ____________________>< |_FROM___identifier-1___________|    

Figure 8-5 RELEASE Statement 

Notes: 

The RELEASE statement transfers records from an input/output area to the initial phase of a sorting operation. 

The RELEASE statement can only be used within the range of an INPUT PROCEDURE associated with a SORT statement. 

Within an INPUT PROCEDURE, at least one RELEASE statement must be specified.     

Page 211: Copy of Cobol

RETURN Statement

          The RETURN statement is used only within the OUTPUT PROCEDURE of a

SORT or MERGE       The RETURN statement acts like a “READ” and makes the next record from the sort/merge processing available to the application       The AT END clause must be specified  Format: 

>>___RETURN___file-name-1___ ______________ ____ _____________________________ _______> |_ RECORD __| |_INTO___identifier-1___________|   >___ _____ ____END___imperative-statement-1____________________________________________> |_ AT _|   >___ _____________________________________________________ ___ ______________ _____> |_NOT____ _____ __END______imperative-statement-2______| |_ END-RETURN_| |_AT__|   

Notes: The RETURN statement transfers records from the final phase of a sorting or merging operation to an

OUTPUT PROCEDURE. 

The RETURN statement can be used only within the range of an OUTPUT PROCEDURE associated with a SORT or MERGE statement.   

Page 212: Copy of Cobol

EXAMPLE : SORT

IDENTIFICATION DIVISION.PROGRAM-ID. SORTING.ENVIRONMENT DIVISION.INPUT-OUTPUT SECTION.FILE-CONTROL. SELECT IN-FILE ASSIGN TO ‘DD1’ ORGANIZATION IS SEQUENTIAL. SELECT WORK-FILE ASSIGN TO ‘DD2’ SELECT OUT-FILE ASSIGN TO ‘DD3’ ORGANIZATION IS SEQUENTIAL.DATA DIVISION.FILE SECTION.FD IN-FILE.01 IN-REC. 02 NUMPICX(2). 02 NAMEPICX(10). 02 ADDR PICX(10). 02 FILLERPICX(58).SD WORK-FILE.01 WORK-REC. 02 WNUMPICX(2). 02 WNAMEPICX(10). 02 WADDR PICX(10). 02 FILLERPICX(58).FD OUT-FILE.01 OUT-REC PICX(80).WORKING-STORAGE SECTION.PROCEDURRE DIVISION.SORT WORK-FILE ON ASCENDING KEY WNUM USING IN-FILE GIVING OUT-FILE. STOP RUN.

Page 213: Copy of Cobol

UNIT 9

CALL Statement

Page 214: Copy of Cobol

CALL Statement

The CALL statement transfers control from one object program to another within the run unit

 

CALL identifier-1 USING [BY CONTENT/BY REFEERENCE] data-

 

 name-1 [, data-name-2] …

Literal-1

 

[ ; ON OVERFLOW imperative-statement ]

 

 

  

  

Notes:

 

The CALL statement transfers control from one object program to another within the run unit.

 

The program containing the CALL statement is the calling program; the program identified in the CALL statement is the called subprogram. Called programs can contain CALL statements; however, a called

program must not execute a CALL statement that directly or indirectly calls the calling program unless it has the RECURSIVE attribute.

 

Page 215: Copy of Cobol

CALL BY CONTENT/REFERENCE  

     The CALL….BY REFERENCE technique allows the sub-program to access and process the data- items in the caller’s storage.

    The CALL….BY CONTENT technique allows the sub-program to access and process a copy of the

data-items from the caller’s storage. The sub-program cannot change the original data values in the caller’s storage.

        A single CALL statement may have both data passing techniques. 

WORKING-STORAGE SECTION.01 RECORD-A.

05 FIELD1 PIC …… 05 FILLER …… ………….

PROCEDURE DIVISION. …………. CALL “xxxxxxxx” USING BY REFERENCE RECORD-A

BY CONTENT LENGTH OF RECORD-A  Notes: 

BY REFERENCE Phrase 

If the BY REFERENCE phrase is either specified or implied for a parameter, the corresponding data item in the calling program occupies the same storage area as the data item in the called program.

  

Page 216: Copy of Cobol

BY CONTENT Phrase

If the BY CONTENT phrase is specified or implied for a parameter, the called program cannot change the value of this parameter as referenced in the CALL statement’s USING phrase, though the called program can change the value of the data item referenced by the corresponding data-name in the called program’s Procedure Division header. Changes to the parameter in the called program do not affect the corresponding argument in the called program.

 

BY VALUE Phrase

The BY VALUE phrase applies to all arguments that follow until overridden by another BY REFERENCE or BY CONTENT phrase.

 

If the BY VALUE phrase is specified or implied for an argument, the value of the argument is passed, not a reference to the sending data item. The called program can modify the formal parameter corresponding to the BY VALUE argument, but any such changes do not affect the argument since the called program has access to a temporary copy of the sending data item.

 

These options are Compiler dependent.

Page 217: Copy of Cobol

LINKAGE SECTION

 

        The LINKAGE SECTION of the DATA DIVISION describes data made available from another program         Storage is NOT reserved        The VALUE clause may not be specified (except for level-88 items) 

Notes: 

The Linkage Section describes data made available from another program or method. The Linkage Section may be composed of two entry types:

         Record-description-entry         Data-item-description-entry 

    

Page 218: Copy of Cobol

GLOBAL DATA  

    The GLOBAL clause specifies that a data-name is available to every program contained

within the program that declares it, as long as the contained program does not itself have a

declaration for that name. All data-names subordinate to or condition-names or indexes

associated with a global name are global names.

    The GLOBAL clause can be specified in the Working-Storage Section, the File Section,

the Linkage section, and the Local-Storage Section, but only in data description entries

whose level-number is 01 or FD.

    An item may have both GLOBAL and EXTERNAL clauses.

    GLOBAL only applies to Nested Programs.

NotesGLOBAL in FILE SECTION.The GLOBAL clause specifies that the file connecter named by a file-name is a global name. A global file-name is available to the program that declares it and to every program that is contained directly or indirectly in that program. A file name is global if the GLOBAL clause is specified in the file description entry for that file-name. A record – name is global if the GLOBAL clause is specified in the record description entry by which the record-name is declared or, in the cause of record descreiption entries in the File Section, if the GLOBAL clause is specified in the file description entry for the file-name associated with the record description entry

Page 219: Copy of Cobol

GLOBAL in Data Descriptions

The GLOBAL clause specifies that a data-name is available to every program contained within the program that declares it, aslong as the contained program does not itself have a declaration for that name. All data-names subordinates to or condition-names or indexes associated with a global name are global names.

 

 

A data-name is global if the GLOBAL clause is specified either in the data description entry by which the data-name is declared or in another entry to which that data description entry is subordinate.

 

A statement in a program contained directly or indirectly within a program which describes a global name reference that name without describing it again.

 

Two programs in a run unit can reference common data in the following circumstances:

1.     The data content of an external data record can be referenced from any program provided that program has described that data record.

2.     If a program is contained within another program, both programs can refer to data possessing the global attribute either in the containing program or in any program that directly or indirectly contains the containing program.

 

Page 220: Copy of Cobol

Sample Program 

ID DIVISION.PROGRAM-ID. MPGM.…………..DATA DIVISION.WORKING-STORAGE SECTION.01 MNTEC PIC X(32) GLOBAL.PROCEDURE DIVISION.

MOVE “BEGINNING CONTENTS” TO MNTECCALL “SUBPGM”DISPLAY MNTEC.STOP RUN.

IDENTIFICATION DIVISION.PROGRAM-ID. SUBPGM.DATA DIVISION.WORKING-STORAGE SECTION.PROCEDURE DIVISION.

DISPLAY “ENTERING SUBPROGRAM”.DISPLAY MNTEC.MOVE “ENDING CONTENTS” TO MNTEC.DISPLAY “LEAVING SUBPGM”.EXIT PROGRAM.

END PROGRAM SUBPGM.END PROGRAM MPGM.

 

   

Page 221: Copy of Cobol

UNIT 10    PROGRAM EXECUTION PROCESS

Page 222: Copy of Cobol

PROGRAM EXECUTION PROCESS

          COMPILATION

        LINK-EDITING

        LOAD MODULE EXECUTION

 

Page 223: Copy of Cobol

FLOW CHART OF EXECUTION PROCESS USING JCL

Three steps are needed to process a COBOL program: 

• Compilation

• Link-editing

• Load module execution

Page 224: Copy of Cobol

SOURCE PROGRAM

MESSAGES AND LISTINGS

COMPILATION

LINKEDITING

OBJECT MODULE MESSAGES AND

LISTING

OUTPUT

LOAD MODULE

EXECUTION

LOAD MODULE

Page 225: Copy of Cobol

Notes:

The source program is the input to the compilation step. The output from the compilation step is

called an object module.

The object module is the input to the link-edit step. The output of the link-edit step is the load module,

which must be saved as a member of a partitioned dataset.

The load module created from the source program is executed in execution step.

Page 226: Copy of Cobol

THREE STEPS JCL USED TO EXECUTE A COBOL SOURCE CODE. 

The following listing shows the general format of JCL used to process a COBOL program.

//JOBNAME JOB,, // CLASS=A,MSGCLASS=H,MSGLEVEL=(1,1), // NOTIFY=&SYSUID 1 //STEP1 EXEC PGM=IGYCRCTL //STEPLIB DD DSNAME=IGY310.SIGYCOMP,DISP=SHR //SYSPRINT DD SYSOUT=* //SYSLIN DD DSNAME=MTPLB00.COBOL.OBJLIB,DISP=(MOD,PASS), // SPACE=(TRK,(10,10)) //SYSUT1 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSUT2 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSUT3 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSUT4 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSUT5 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSUT6 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSUT7 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSIN DD DSN=MTPLB00.COB.PGM(PGM1),DISP=SHR

Page 227: Copy of Cobol

2 //STEP2 EXEC PGM=HEWL

//SYSLIB DD DSNAME=CEE.SCEELKED,DISP=SHR

//SYSPRINT DD SYSOUT=*

//SYSLIN DD DSNAME=MTPLB00.COBOL.OBJLIB,DISP=(OLD,DELETE)

//SYSLMOD DD DSNAME=MTPLB00.COBOL.LOADLIB(PGM1),

// DISP=(MOD,PASS),

// SPACE=(TRK,(10,10,1))

 

3 //STEP3 EXEC PGM=PGM1

//STEPLIB DD DSN=MTPLB00.COBOL.LOADLIB,DISP=SHR

Notes:

Each job step can be executed alone or in combination as a job.In the first step, the COBOL compiler is IGYCRCTL and the input source code to thisIs specified in the SYSIN DD statement. The output created from this step is the object code, as storedin the SYSLIN DD statement.In the second step, the link-edit program is HEWL. The object code created from the previous step is the input to this step, as specified in the SYSLIN DD statement. A load module is created which is saved asa member of a PDS, as specified in the SYSLMOD DD statement.The load module created from the previous step is now executed on the EXEC statement

Page 228: Copy of Cobol

COMPILATION PROCESS

 

A specific computer has a specific set of instruction that is fixed during the design

of the machine. This set of instructions constitutes what is commonly called

he machine language.

 

A program written in language other than the machine language is called a source

program. Whether it is a high-level language program or an assembly-language

program, the program cannot be executed directly.

 

The source language program should be translated to a machine language

program known as the object program.

 

If the source is a high level language, the corresponding translator program

is called a compiler.

 

Compiler is used to translate COBOL program into language that the computer

can process i.e. object code.

Page 229: Copy of Cobol

GENERAL COMPILER

The following statements show general JCL for a compilation job step.  //JOBNAME JOB ,, // CLASS=A,MSGCLASS=H,MSGLEVEL=(1,1), // NOTIFY=&SYSUID   //STEP1 EXEC PGM=IGYCRCTL //STEPLIB DD DSNAME=IGY310.SIGYCOMP,DISP=SHR //SYSPRINT DD SYSOUT=* //SYSLIN DD DSNAME=MTPLB00.COBOL.OBJLIB,DISP=(MOD,PASS), // SPACE=(TRK,(10,10)) //SYSUT1 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSUT2 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSUT3 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSUT4 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSUT5 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSUT6 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSUT7 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSIN DD DSN=MTPLB00.COB.PGM(PGM1),DISP=SHR

Page 230: Copy of Cobol

JCL KEYWORDS

 

STEP1 - The name of the job step. The exec statements specify that the COBOL

compiler (IGYCRCTL) is to be invoked.

 

STEPLIB - Definition of the data set where the COBOL compiler resides.

 

SYSLIN – Definition of the data set that receives output.

 

SYSUT1 TO SYSUT7 – Definitions of utility data sets used by the compiler

to process the source program. All SYSUT files must be on direct-access storage devices.

 

SYSIN – Definition of the data set to be used as input to the job step.

Page 231: Copy of Cobol

CONTROL ON COMPILATION

The compiler lists errors in COBOL program statements and provides information to

help you debug program. You can direct and control compilation with the following:

    Compiler-directing statements

    Compiler options

Page 232: Copy of Cobol

COMPILER-DIRECTING STATEMENTS

     Basis statement – basis statement provides a complete program as the

source for a compilation.

      *CONTROL or *CBL statement – this statement suppresses or allows output to be produced.

        Copy statement – This statements place prewritten text in a COBOL program.

        Delete statement – This statement removes COBOL statements from the basis source program.

        Eject statement – This statement specifies that the next source statement is to be printed

at the next page.

        Enter statement - The compiler treats this statement as a comment.

        Insert statement – This statement adds COBOL statements to the basis source program.

        Replace statement – This statement is used to replace source program text.

        Skip1/2/3 statement – These statements specify lines to be skipped in the source listing.

        Title statement – This statement specifies that a title be printed at the top of each page

of the source listing.

        Use statement – The use statement provides declaratives to specify the following:

• Error handling procedures – exception/error

• User label-handling procedures – label• Debugging lines and sections – debugging

Page 233: Copy of Cobol

COMPILER OPTIONS

Compiler options help to control the compilation of program. Specify these options

in the PARM field of the JCL or on the process statement in program before

IDENTIFICATION DIVISION.

 

Syntax:

 

//STEP1 EXEC PGM=IGYCRCTL, PARM=’SSRANGE,LIB,DYNAM,LIST’

Page 234: Copy of Cobol

COMPILER OPTIONS DESCRIPTIONS

 

A] Diagnostic options

 

SSRANGE: SSRANGE is use to generate code that checks if subscripts or indexes

attempt to reference an area outside the region of the table. Variable-length items also

checked to confirm that their current length is within their maximum defined length.

Default is NOSSRANGE.

 

DUMP: Default is NODUMP. The dump option is use to produce a system dump at compile time.

 

FLAG: Default is FLAG (I). The syntax is FLAG (x, y), where x and y can be I, W, E, S, U.

To produce diagnostic messages for errors o a severity level x or above at the

end of the source listing using FLAG (x).

 

TEST: Default is NOTEST. Test is use to produce object code that can be executed

with batch or interactive debug.

Page 235: Copy of Cobol

B] VIRTUAL STORAGE OPTIONS 

DYNAM: Default is NODYNAM. Use DYNAM to cause separately compiled programs invoked through the call literal statement to be loaded dynamically at run time.   RENT: Default is NORENT. If program compiled using rent, then it generated as a reentrant object module.   BUFSIZE: BUFSIZE option is use to allocate an amount of main storage to the buffer for each compiler work data set. Syntax is BUFSIZE (nnnnn/nnnK) where nnnnn denotes a decimal number that must be at least 256. nnnK specifies a decimal number in 1K increments.  SIZE: Syntax is SIZE (nnnnn/nnnK/MAX).

nnnnnn specifies a decimal number that must be 778240. nnnK specifies a decimal number in 1K increments. The minimum acceptable value is 760K.

MAX requests the largest available block of storage in the user region for use during compilation. Use SIZE to indicate the amount of main storage available for compilation. Where 1K = 1024 bytes decimal.

  DATA: Default is data (31). Specify the DATA(24) compiler option for programs running in 31-bit addressing mode that are passing data parameters to programs in 24-bit addressing mode.

Page 236: Copy of Cobol

C] SOURCE LANGUAGE OPTIONS

LIB: Default is NOLIB. COPY, BASIS, or REPLACE statements are use in a program that time specify the lib option. APOST/QUOTE: Default is QUOTE. Specify QUOTE when you want the quotation mark (“) to be the delimiter character for literals. APOST use when you want the apostrophe (‘) to be the delimiter character for literals. WORD: Use WORD(xxxx) to specify that an alternate reserved-word table is to be used during compilation.Default is NOWD. WORD(xxxx) specifies the ending characters of the name of the reserved-word table (IGYCxxxx) to be used in compilation. IGYC are the first four standard characters of the name, and xxxx can be 1 to 4 characters in length. NUMBER: Use number if you want program line numbers to be used in error messages line number. Default is NONUM. SEQUENCE: Default is sequence. If you specify sequence the compiler examines column 1 to 6 of source statements to check that the statements are arranged in ascending order according to their EBCDIC collating sequence. CURRENCY: Default is NOCURR. The CURRENCY option to provide an alternate default currency symbol to be used for the COBOL program. The default is NOCURR. NOCURRENCY specifies that no alternate default currency symbol will be used. 

Page 237: Copy of Cobol

D] MAPS AND LISTINGS OPTIONS 

XREF: Default is NOXREF. You can specify XREF, XREF (FULL) or XREF (SHORT). Use XREF to get a sorted cross-reference listing. EBCDIC data-names and procedure names listed in alphanumeric order. DBCS data-names and procedure-names listed based on their physical order in the program.

  LANGUAGE: Default is LANGUAGE (ENGLISH). To select the language in which compiler output will be printed use language option.  LINECOUNT: Use LINECOUNT (nnn) to specify the number of lines to be printed on each page of the compilation

listing, or use LINECOUNT (o) to suppress pagination. Default is LINECOUNT (60).  LIST: Use list as a compiler option to produce listing of the assembler-language expansion of source code. Default is

NOLIST.  MAP: Use map to produce a listing of the items defined in the data division. Default is NOMAP.  OFFSET: Use offset to produce a line numbers, statement references listings. Default is NOOFFSET.  SOURCE: To get a listing of source program using source compiler option. Default is SOURCE.  SPACE: Use space option to select single, double or triple spacing in source code listing. SPACE is meaningful only when

source is in effect. Default is SPACE (1).  VBREF: Default is NOVBREF. To get a cross-reference among all verb types used in the source program and line numbers

in which they are used.   TERMINAL: To send progress and diagnostic messages to the SYSTERM data set use TERMINAL option. Default is

NOTERMINAL.  

Page 238: Copy of Cobol

E] OBJECT DECK OPTIONS

  COMPILE: Use the COMPILE option if you want to force full compilation even in the presence

of serious errors. Default is NOCOMPILE(s).

 

DECK: To produce object code in the form of 80-column card image using DECK option.

Default is NODECK. For DECK option you define SYSPUNCH in JCL for compilation.

 

NAME: To generate a link-edit NAME card for each object module. NAME is also used to

generate names for each load module. Default is NONAME or NAME(NOALIAS).

 

OBJECT: To place the generated object code on disk or tape to be later used as input for

the linkage editor. Default is OBJECT.

 

PGMNAME: Syntax is PGMN(CO/LU/LM). Default is PGMNAME (COMPAT).

CO – COMPAT

LU – LONGUPPER

LM – LONGMIXED

The PGMNAME option controls the handling of names used in the following:

Program names defined in the PROGRAM-ID paragraph.

Program entry point names on the entry statements.

Page 239: Copy of Cobol

F] OBJECT CODE OPTIONS 

ADV: Default is ADV. ADV is meaningful only if you use WRITE…ADVANCING in source code. With ADV in effect, the compiler adds 1 byte to the record length to account for the printer control character. Use NOADV if you have already adjusted record length to include 1 byte for the printer control character.

 

AWO: Default is NOAWO. With AWO specified, the apply WRITE-ONLY clause will be in effect if any file within the program is physical sequential with blocked V-mode records. The clause will be in effect even if it was not specified within the program.

 

FASTSRT: FASTSRT allows IBM DFSORT or its equivalent, to perform the input and output instead COBOL. Default is NOFASTSRT.

 

NUMPROC: Default is NUMPROC (NOPFD). Use NUMPROC(NOPFD) if you want the compiler perform invalid sign processing. NUMPROC (PFD) is a performance option that can be used to bypass invalid sign processing.

 

OPTIMIZE: Default is NOOPTIMIZE. Use OPTIMIZE to reduce the run time of object program.

 

OUTDD: Default is OUTDD (SYSOUT). Use OUTDD if you want to run-time display output on the data set other than SYSOUT.

 

TRUNC: Default is TRUNC (STD). TRUNC (STD) to control the way arithmetic fields are truncated during MOVE and arithmetic operation.

 

ZWB: Default is ZWB. With ZWB, the compiler removes the sign from a sign external decimal field when comparing this field to an alphanumeric elementary field during execution.

Page 240: Copy of Cobol

G] OTHER OPTIONS: 

EXIT: DEFAULT is NOEXIT. If you specify the EXIT option without providing a least

one sub option, NOEXIT will be in effect. The sub options can be specified

in any order, separated by either commas or spaces

Page 241: Copy of Cobol

COMPILER ERROR MESSAGES

The messages for compilation errors found in program are displayed at the end of

the listing for each program. A summary of all errors found during compilation

is displayed at the bottom of listing. Each message issued by the compiler is of the

following form:

 

LineID Mwssage code Message text

[nnnnnn] IGYppxxxx-L Text of Message

 

nnnnnn – The number of the source statement of the last line the compiler was processing.

 

IGY – The Prefix that identifies this message as coming from COBOL compiler.

 

pp - Two characters that identify which phase of the compiler discover the error.

 

xxxx – A 4-digit number that identifies the error message.

 

L – A character that indicates the severity level of the error – I, W,E,S or U

 

 

Page 242: Copy of Cobol

COMPILER ERROR MESSAGES CODES  Errors the compiler can fall into five categories of severity.  I (Informational, Return code=0) – An informational-level message is an aid to the user. No action is required from the user and the program will execute correctly.  W (Warning, Return Code=4) – A warning-level massage calls attention to the possible error. It is probable that the program will execute correctly as written.  E (Error, Return Code=8) – An error-level message indicates the condition that is definitely an error. The compiler has attempted to correct the error but results of the program execution may not be what the user expects. The user should correct the error.  S (Severe, Return Code=12) – A severe-level massage indicates a condition that is serious error. The compiler was unable to correct the error. The program will not execute correctly and execution should not be attempted.  U (Unrecoverable, Return Code=16) – An unrecoverable message indicates an error condition of such magnitude that the compilation was terminated.

Page 243: Copy of Cobol

LINK-EDITING

Creating a Load Module 

Large program may be developed in parts so that the program is in the form of a number of routines. Each of these routines is separately translated. The object routines or object module must then be combined together to form a load module or run unit, which is finally executed. The step that accomplishes the job of linking the object routines or load modules into one load module is called linkage editor.

The linkage editor converts an object module into a load module, and stores it in a partitioned data set.   Linkage editor  //STEP2 EXEC PGM=HEWL //SYSLIB DD DSNAME=CEE.SCEELKED,DISP=SHR //SYSPRINT DD SYSOUT=* //SYSLIN DD DSNAME=MTPLB00.COBOL.OBJLIB,DISP=(OLD,DELETE) //SYSLMOD DD DSNAME=MTPLB00.COBOL.LOADLIB(PGM1), // DISP=(MOD,PASS), // SPACE=(TRK,(10,10,1))   SYSLMOD and SYSPRINT are the data sets used for linkage editor output.

Page 244: Copy of Cobol

LINK-EDIT OPTIONS

Syntax: 

//STEP2 EXEC PGM=HEWL, PARM=’CALL,PRINT,AMODE’

 

Figure: Link-edit Options

  Notes:

 

CALL: Use CALL if your program calls external routines, in which case you want external references to

be resolved by automatic library call.

 

PRINT: When you use the print option, link-edit messages and the module map are written on the data set

defined by the SYSLOUT DD statement.

 

AMODE: AMODE use to override the default RMODE attribute established by the compiler.

 

RENT: RENT option is use to have the linkage editor mark the load module as being reentrant and reusable.

 

REUS: REUS option is use to have the linkage editor mark the load module as being reusable.

Page 245: Copy of Cobol

LOAD MODULE EXECUTION 

Executing compiled program

 

The program is ready for execution that has completed the compiling and link editing successfully.

 

Syntax:

 

//STEP3 EXEC PGM=PGM1

//STEPLIB DD DSN=MTPLB00.COBOL.LOADLIB,DISP=SHR

Page 246: Copy of Cobol

EXECUTION TIME OPTIONS

Specify run-time options in the PARM parameter of the EXEC statement that starts execution.  Syntax:  //STEP3 EXEC PGM=A,PARM=’[user-parameter] [/execution-options]’ 

Figure 10.7 Execution time options  Notes: Where user-parameter is the parameter to be passed to the program being executed.  The execution-options are list of run-time options. A slash must immediately precede the first run time option.   NOSSRANGE & SSRANGEL: NOSSRANGE suppresses run-time checking of index, subscript, reference modification and variable length group ranges. NOSSRANGE turns off run-time checking if compiled with SSRANGE.   LANGUAGE: LANGUAGE option is use to specify the language and character set for those run-time messages generated prior to the full initialization.  DEBUG & NODEBUG: NODEBUG suppresses the batch debugging features specified by the use for DEBUGGING declaratives.  NOSTAE & STAE: NOSTAE prevents the run-time environment from intercepting an ABEND.

Page 247: Copy of Cobol

UNIT 10

COBOL Intrinsic Functions

Page 248: Copy of Cobol

Intrinsic Functions  

        Intrinsic functions allow you to access certain values that are derived at run time          Examples        Current-date        Length        Lower-case       Date-of-integer        Coded as part of statements in the Procedure Division       FUNCTION is now a reserved word

Notes:

Intrinsic functions are coded in statements in the procedure division. The function is evaluated and the value participates in the statement execution. Functions may not stand alone they must be coded as part of another statement.

 Notice that the word FUNCTION is now a reserved word in COBOL. But the names of the functions are not reserved.

Page 249: Copy of Cobol

Instrinsic Functions – Syntax

 

        Specify the reserve word “FUNCTION” followed by the name

of the function

 

       Instrinsic Functions may not be used as a receiving operand

 

        Examples

 

Move function current-date to d-string

If function date-of-integer(base-date)……

When function day-of-integer(base-date)……

Page 250: Copy of Cobol

Intrinsic Functions – Arguments and Values

        The number and format of the arguments depend on the function        The resulting value is an elementary data item implicitly defined by COBOL        Numeric and integer functions may only be used where arithmetic expressions may be

used        If function value is a character(alphanumeric) string, the reference may be followed by a reference modification  

  Notes:         The number and format of the arguments depend on the function         The resulting value is an elementary data item implicitly defined by COBOL        The value is a character string, a numeric value, or an integer        The length of the result depends on the function and the length of the argument(s)

Move function current-date (1:8) to rpt-string

Page 251: Copy of Cobol

COBOL Intrinsic Functions – Date Formats

         Range: January 1, 1601 to December 31, 9999

       Gregorian Date – YYYYMMDD        Integer Date - 1 to 3,067,671 number of days since December 31, 1600 

Julian Date – YYYYDDD

Notes: 

Before we examine date type intrinsic functions, we need to define threee basic date formats that COBOL can work with

 Gregorian date, or Standard date

        An eight digit date of the form YYYYMMDD         In the range of January 1, 1601 throug December 31, 9999         With MM being from 01 through 12 and DD being from 01 through 31, dependent

upon the month

Page 252: Copy of Cobol

Integer date

 

      An integer in the range 1 to 3,067,671

 

      Represents the number of days since December 31, 1600

 

      For example, January 1, 1994 is 143908 as an integer date

 

 

Julian date

 

        A seven digit integer of the form YYYYDD

 

        DDD is between 1 and 366, must be valid for the year(that is, leap year are taken into account)

 

Page 253: Copy of Cobol

COBOL Instrinsic Functions- CURRENT-DATE

MOVE FUNCTION CURRENT-DATE(1:8) TO DATE-ON-FILE 

Returns a character string – length 21YYYYMMDDHHmmsshhShhmm

System Gregorian date Current time in 24 hour clock Difference from GMT

  Notes:

         Current-date returns a character string of length 21, as follows: YYYYMMDDHHmmsshhShhmm

  Representing

        A Gregorian date(YYYYMMDD)         Current time in hours (24-hour clock), minutes, seconds, and hundredths of a

second(HHmmsshh)         Difference of local time zone from Greenwich Mean Time as a ‘+’ or ‘-‘ followed by

the hours and minutes difference (Shhmm) 

Page 254: Copy of Cobol

COBOL Intrinsic Functions – DATE-OF-INTEGER

COMPUTE RPT-DATE = FUNCTION DATE-OF-INTEGER(INT-DATE)

* If INT-DATE is integer 144337 then RPT-DATE is integer 19960317

 

Returns a Gregorian date using an inputted integer date

 

* Based on number of days since Dec. 31, 1600

* Integer could have been output of date intrinsic function modified by arithmetic

 

Notes:

 

          Date-of-integer converts an integer date to a Gregorian date

 

Function date-of-integer(argument)

 

     The argument must be a valid integer date

 

        The function reference is an integer representing YYYYMMDD

 

Page 255: Copy of Cobol

COBOL Intrinsic Functions – INTEGER-OF-DAY

COMPUTE INT-DATE = FUNCTION INTEGER-OF-DAY(JUL-DATE) * If JUL-DATE is integer 1996107 then INT-DATE is integer 144337 

Returns an integer using an inputeed Julian date 

* Number of days since Dec. 31, 1600* Integer can be used for date arithmetic or date comparisons.

   Notes:

 Integer-of-day converts a Julian date to an integer date

  Function integer-of-day(argument) 

The argument must be a valid Julian date(YYYYDDD) 

The function reference is an integer date 

  

Page 256: Copy of Cobol

COBOL Intrinsic Functions – DAY-OF-INTEGER

 COMPUTE JUL-DATE = FUNCTION DAY-OF-INTEGER(INT-DATE)

* If INT-DATE is integer 144337 then JUL-DATE is integer 1996107 

Returns an Julian date using an inputeed Julian date 

Based on number of days since Dec. 31, 1600 Integer could have been output of date intrinsic function of Gregorian date

Notes: Day-of-integer converts a Integer date to an Julian date  Function integer-of-day(argument)             The argument must be a valid integer date            The function reference is an integer representing YYYYDDD  

Page 257: Copy of Cobol

New Intrinsic Functions Overview

 

    New Intrinsic Functions

                DATE-To-YYYYMMDD

               DAY-TO-YYYYDDD

                YEAR-TO-YYYY

 

    First function argument is date with two position year (yymmdd, yyddd, or yy)

 

        Second function argument is an optional integer that is used in determination of 100-year range used in YY to YYYY conversion. Default is 50

 

        Returned value is a date of the same type as the first argument but with a four digit year

 

 

Page 258: Copy of Cobol

Notes:

   New Intrinsic Functions                 The second argument to these three functions is called the sliding window, and it works this way:                   Add the second argument to the current (run-time) year ( as a four digit year), giving an ending

year.   For example, if a program is running in 1998 and the sliding window is 20, then the

result of the add is 2018.                   Subtract 99 from the ending year to get a 100-year range.    For example, 1919-2018              For two digit years in the range of 00 to last-two-digits-of-end, assign the century from the

ending date; for two digit years in the range of last-two-digts-of-start to 99, assign the century from the starting date.

    For example, the ranges are 00-18 and 19-99, so given a year of 82, assign a century of 19; given a year of 17, assign a century of 20. 

Page 259: Copy of Cobol

RUN-TIME YEAR

INPUT VALUE SW Argument FUNCTION VALUE

1998 890315 -10 18890315

1998 770122 -10 19770122

1998 890315 -1 19890315

1998 770122 -1 19770122

1998 890315 0 19890315

1998 770122 0 19770122

1998 890315 85 19890315

1998 770315 85 20770315

1998 890315 -120  

1998 890315 120  

Intrinsic Function: DATE-TO-YYYYMMDD

        Syntax  

FUNCTION DATE-TO-YYYYMMDD (YYMMDD[SW])         Examples COMPUTE FUNCTION DATE-TO-YYYYMMDD (IN-HIRE-DATE) TO OUT-HIRE-DATE  IF FUNCTION DATE-TO-YYYYMMDD (BIRTH-DATE-20) > QUERY-DATE THEN ….         VALUE EXAMPLES:

 

Page 260: Copy of Cobol

Intrinsic Function: DATE-TO-YYYYDD

        Syntax  FUNCTION DATE-TO-YYYYDD (YYDD[SW])         Examples COMPUTE FUNCTION DATE-TO-YYYYDD (IST-LOGON-DAY) TO OUT-LOGON-DATE IF FUNCTION DATE-TO-YYYYDD(ID-DATE-20) > QUERY-DATE THEN ….         VALUE EXAMPLES:

 

RUN-TIME YEAR

INPUT VALUE SW Argument FUNCTION VALUE

1998 89315 -10 1889315

1998 77122 -10 1977122

1998 89315 -1 1989315

1998 77122 -1 1977122

1998 89315 0 1989315

1998 77122 0 1977122

1998 89315 85 1989315

1998 77315 85 2077315

1998 89315 -120  

1998 890315 120  

Page 261: Copy of Cobol

Intrinsic Function: YEAR-TO-YYYY

        Syntax  FUNCTION YEAR-TO-YYYY (YY[SW])         Examples: MOVE FUNCTION YEAR-TO-YYYY(START-YEAR) TO OUT-START-YEAR IF FUNCTION DATE-TO-YYYYMMDD(B-DATE-20) > QUERY-DATE THEN ….         VALUE EXAMPLES:

 

RUN-TIME YEAR

INPUT VALUE SW Argument FUNCTION VALUE

1998 89 -10 1889

1998 77 -10 1977

1998 89 -1 1989

1998 77 -1 1977

1998 89 0 1989

1998 77 0 1977

1998 89 85 1989

1998 77 85 2077

1998 89 -120  

1998 89 120  

Page 262: Copy of Cobol

COBOL Intrinsic Functions- Nesting functions

 

COMPUTE NEW-DUE-DATE =

FUNCTION DATE-OF-INTEGER

(FUNCTION INTEGER-OF-DATE(DATE-OF-ORDER) + 30)

 

 

IF DATE-OF-ORDER IS 19960317 then

FUNCTION INTEGER-OF-DATE(DATE-OF-ORDER) +30 is 14337+30 = 144367

FUCNTION DATE-OF-INTEGER(144367) gives NEW-DUE-DATE of 19960416

 

 

After Converting a Gregorian due to an integer date, and adding 30 days to the integer date, the newly calculated Gregorian date is displayed

 

Page 263: Copy of Cobol

Length Intrinsic Functions

 MOVE IN-REC(1:FUNCTION LENGTH(OUT-AREA)) TO OUT-AREA

* If the length of OUT-AREA is 10, only positions 1 to 10 of IN-REC are move to OUT-AREA

 

Returns a nine-digit integer specifying the number of bytes the argument takes in storage.

 

The LENGTH OF special register and LENGTH intrinsic function work similarly.

LENGTH intrinsic function is more robust because it can have a literal operand and it works with null-terminated strings.

  The syntax is different.

 Notes: The length intrinsic function takes a single argument (a non-numeric literal, a data element, a structure, or an array) and returns a nine-digit integer specifying the numbe of bytes the argument takes in storage. Move in-rec(1:function length (out-area) ) to out-area.

Page 264: Copy of Cobol

LOWER-CASE and UPPER-CASE Intrinsic Functions 

 MOVE FUNCTION UPPER-CASE(ANSWER) TO UPPER-ANSWER

* IF ANSWER contains ‘y’ then UPPER-ANSWER contains ‘Y’

 

Returns a string that is either all upper case or lower case.

 

       Alphanumeric data items of same length all in required case returned

       Very useful in comparing two strings

Notes:

 

  These two intrinsic functions return a character string that contains all lower-case or all upper-case characters

 

Function lower-case(argument)

 

Function upper-case(argument)

  

The argument is an alphanumeric data item

 

The function reference is a string of the same length as the argument but with all letters forced to

lower-case or upper-case, respectively

 

Page 265: Copy of Cobol

REVERSE Intrinsic Functions 

 IF FUNCTIO REVERSE(ASTRING) = ASTRING

PERFORM FOUND-PALINDROME

* If ASTRING contained ‘OTTO’ the paragraph FOUND-PALINDROME would be performed

 

Returns a string containing the characters of the argument in reverse order

 

  Could be used to look for first non-blank character

In languages that are written from right to left

Page 266: Copy of Cobol

CHAR and ORD Intrinsic Functions

 

IF FUNCTION ORD(‘1’) < FUNCTION ORD(‘A’) PERFORM FOUND-ASCII

 

* If this IF is true then system is running using ASCII character set

 

 

CHAR(n) returns the character that is the ‘n’ the character in coding sequence

 

ORD(char) returns the position that character belongs in the collating sequence

 

* Used where coding scheme, ASCII or EBCDIC are not know until compile time.

 

 

Page 267: Copy of Cobol

Arithmetic, Business, and Mathematical Intrinsic Functions

 

Trigonometric and Logarithmic Intrinsic Functions

Function name Value returned

ACOS Arc-cosine of numeric item

ASIN Arc-sine of numeric item

ATAN Arc-tangent of numeric item

COS Cosins of numeric item

LOG Natural logarithm of numeric item

LOG10 Logarithm to base 10 of numeric item

SIN Sine of numeric item

TAN Tangent of numeric item

Page 268: Copy of Cobol

Arithmetic, Business, and Mathematical Intrinsic Function 2

Statistical and other Mathematical Intrinsic Functions

 

Function name Value returned

FACTORIAL Factorial value of “integer”. Item

INTEGER Greates integer not greater than “numeric” item

INTEGER-PART Value of “numeric” item truncated at decimal point

MAX Largest value in a list of values; all items in the list are of the same type, one of: “alphabetic”, “integer”, “numeric”, or “alphanumeric”

MEAN Arithmetic mean of list of “numeric” items

MEDIAN Median of list of “numeric” items

MIDRANGE Mean of the minimum and maximu values in a list of “numeric” items

MIN Smallest value in a list of values; see MAX

Page 269: Copy of Cobol

Arithmetic, Business, and Mathematical Intrinsic Function 3

Statistical and other Mathematical Intrinsic Functions, 2

 

Function name Value returned

MOD Modulo value of “integer” item to “integer” base

ORD-MAX Position of maximum item in a list

ORD-MIN Position of miniumum item in a list

RANDOM Random number based on supplied or default “integer” seed number

RANGE Value of maximum argument minus value of miniumum argument; all arguments either “integer” or all “numeric”

REM Remainder of dividing one “numeric” item by another “numeric” item

SQRT Square root of a “numeric” item

SUM Sum of list of items, all items are “numeric” or all are “integer”

Page 270: Copy of Cobol

Arithmetic, Business, and Mathematical Intrinsic Function, 4

Conversion Type Intrinsic Functions

 

Function name Value returned

NUMVAL Numeric value of numeric edited item

NUMVAL-C Numeric value of numeric edited item with currency symbol

Investment / Depreciation Statistical Type Intrinsic Functions

Function name Value returned

ANUITY Ratio of annuity paid for “integer” periods at “numeric” interest, on initial investment of 1

PRESENT-VALUE

Present value using “numeric” discount rate for 1 or more periods, the value in each period specified as a “numeric” item

STANDARD-DEVIATION

Standard deviatio of list of “numeric” items

VARIANCE Variance of list of “numeric” items

Page 271: Copy of Cobol

MIN and MAX Intrinsic Functions

 

 

COMPUTE MAX-HOLD = FUNCTION MAX(EMP1SALES, EMP2SALES,

EMP3SALES, EMP4SALES,EMP5SALES)

   MAX-HOLD would contain the highest value of all elements in the list.

 

The MAX function returns the value of the largest item in a list of items, the MIN function returns

the value of the smallest item.

 

The argument in example are assumed to be numeric so compute had to be used

Page 272: Copy of Cobol

The ALL Subscript 

COMPUTE TOTAL-IN = FUNCTION SUM(STORE-SALES(ALL)

  TOTAL-IN will be equal to the summation of all elements of the STORE-SALES table array

 

When an intrinsic function may have a variable number of arguments, you may reference a table

as one or more of the arguments.

 

* If a multidimensional table, ALL may be used in place of one or more of the subscripts