COBOL
Table of Contents 1.
OBJECTIVE...............................................................................................................................................................5
2. INTRODUCTION.. INTRODUCTION............ .................... ..................... ..................... ..................... ..................... .................... ..................... ..................... ..................... ..................... ............................................6 ..................................6
HISTORY OF COBOL.................................................................................................................................................6 ABOUT COBOL..........................................................................................................................................................6 3. PROGRAM STRUCTURE........................................................................................................................................8
REFERENCE FORMAT: -...........................................................................................................................................8 SEQUENCE NUMBER AREA..................................................................................................................................................8 I NDICATOR AREA...............................................................................................................................................................8 AREA A...........................................................................................................................................................................9 AREA B...........................................................................................................................................................................9 4. IDENTIFICATION DIVISION...............................................................................................................................10
PROGRAM-ID...........................................................................................................................................................10 5. ENVIRONMENT DIVISION..................................................................................................................................12
CONFIGURATION SECTION: -...............................................................................................................................12 INPUT-OUTPUT SECTION: -...................................................................................................................................13 I-O CONTROL...........................................................................................................................................................14 FILE-CONTROL........................................................................................................................................................14 RECORD FORMAT...................................................................................................................................................14 EFFICIENT FILE ORGANIZATION AND MANAGEMENT.................................................................................16 SEQUENTIAL FILE .................................................................................................................................................16 INDEXED FILE ........................................................................................................................................................17 RELATIVE FILE .......................................................................................................................................................18 EXERCISES..................................................................................................................................................................21 6. DATA DIVISION......................................................................................................................................................22
LEVELS......................................................................................................................................................................22 CONDITION NAMES (88-LEVEL)..........................................................................................................................23 DATA TYPES.............................................................................................................................................................23 PICTURE CLAUSE...................................................................................................................................................24 PICTURE STRING - R ULES ULES............................................................................................................................................24 FILE SECTION: -.......................................................................................................................................................25 WORKING-STORAGE SECTION: -........................................................................................................................26 REDEFINES...........................................................................................................................................................27 ESTRICTIONS ON REDEFINES.....................................................................................................................................27 R ESTRICTIONS EXTERNAL......... EXTERNAL.................... ..................... ..................... ..................... .................... ..................... ..................... ..................... ..................... .................... ..................... ..................... ...................................28 .........................28 GLOBAL....................................................................................................................................................................29 JUSTIFIED.............................................................................................................................................................29 SIGN................ SIGN........................... ..................... .................... ..................... ..................... ..................... ..................... .................... ..................... ..................... ..................... ..................... ....................................30 ..........................30 SIGN CLAUSE EXAMPLES..................... ................................ ..................... .................... ..................... ..................... ..................... ..................... .................... ..................... .......................................31 ............................31 VALUE CLAUSE: -...................................................................................................................................................31 EDITING: -.............................................................................................................................................................31 LINKAGE SECTION: -.............................................................................................................................................34 USAGE CLAUSE ......................................................................................................................................................35 DISPLAY: -.................................................................................................................................................................37 INDEX: -.....................................................................................................................................................................37 POINTER: -................................................................................................................................................................38 SYNCHRONIZED.....................................................................................................................................................39
EXERCISES..................................................................................................................................................................40 7. PROCEDURE DIVISION.......................................................................................................................................41
SECTIONS AND PARAS: -.......................................................................................................................................41 R ULES -.......................... ..................... ..................... ..................... ..................... .................... ..................... ..................... ................................41 ......................41 ULES FOR SECTION/PARA NAMES: -................ INPUT - OUTPUT VERBS........................................................................................................................................42 ACCEPT.....................................................................................................................................................................42 DISPLAY....................................................................................................................................................................43 DISPLAY - R ULES ............................... ..................... .................... ..................... ..................... ..................... ..................... .................... ..................... ..................... .....................................43 ...........................43 ULES.................... ARITHMETIC OPERATIONS..................................................................................................................................44 ADD: -................. -........................... ..................... ..................... .................... ..................... ..................... ..................... ..................... .................... ..................... ..................... ..................... .....................................44 ..........................44 CORRESPONDING: -...............................................................................................................................................45 ADD CORRESPONDING :-.............. :-........................ ..................... ..................... ..................... ..................... .................... ..................... ..................... ..................... ..................... .....................................46 ...........................46 ON SIZE ERROR OCCURS.................... .............................. .................... ..................... ..................... ..................... ..................... .................... ..................... ..................... ...................................47 .........................47 ROUNDED PHRASE.....................................................................................................................................................47 SUBTRACT................................................................................................................................................................48 MULTIPLY ................................................................................................................................................................50 DIVIDE.......................................................................................................................................................................51 COMPUTE.................................................................................................................................................................52 EXERCISES..................................................................................................................................................................53 8. CONTROL FLOW VERBS.....................................................................................................................................55
CONDITIONAL EXPRESSIONS..............................................................................................................................55 RELATION OPERATORS.........................................................................................................................................55 CLASS CONDITION.................................................................................................................................................56 SIGN CONDITION....................................................................................................................................................56 COMPLEX CONDITIONS........................................................................................................................................57 LOGICAL OPERATORS...........................................................................................................................................57 GO TO.........................................................................................................................................................................58 ALTER........................................................................................................................................................................60 CONTINUE................................................................................................................................................................62 EVALUATE................................................................................................................................................................63 PERFORM .................................................................................................................................................................65 PERFORM (Basic).................................................................................................................................................66 PERFORM (TIMES option)................ option).......................... ..................... ..................... ..................... ..................... .................... ..................... ..................... ..........................................67 ................................67 PERFORM (UNTIL option)....................................................................................................................................67 PERFORM (VARYING)..........................................................................................................................................69 EXIT............. EXIT....................... ..................... ..................... .................... ..................... ..................... ..................... ..................... .................... ..................... ..................... ..................... ..................... .................................73 .......................73 EXERCISES..................................................................................................................................................................74 9. NON-NUMERIC DATA MANIPULATION..........................................................................................................75
MOVE.........................................................................................................................................................................75 INITIALIZE................................................................................................................................................................79 INSPECT....................................................................................................................................................................81 STRING......................................................................................................................................................................84 UNSTRING................................................................................................................................................................85 SET............... SET......................... ..................... ..................... .................... ..................... ..................... ..................... ..................... .................... ..................... ..................... ..................... ..................... .................................86 .......................86 SET - CONDITION NAME.................................................................................................................................................86 10.
SUB-PROGRAM....................................................................................................................................................89
CALL..........................................................................................................................................................................89 CANCEL........... CANCEL..................... .................... ..................... ..................... ..................... ..................... .................... ..................... ..................... ..................... ..................... .................... .......................................91 .............................91 ENTRY.......................................................................................................................................................................92
EXIT PROGRAM.......................................................................................................................................................92 STOP...........................................................................................................................................................................92 GOBACK....................................................................................................................................................................93 END PROGRAM...... PROGRAM................. ..................... ..................... ..................... .................... ..................... ..................... ..................... ..................... .................... ..................... .........................................93 ..............................93 11. FILE OPERATIONS..............................................................................................................................................94
OPEN .........................................................................................................................................................................94 CLOSE........................................................................................................................................................................94 READ..........................................................................................................................................................................95 START........................................................................................................................................................................99 WRITE......................................................................................................................................................................101 REWRITE.................................................................................................................................................................104 DELETE...................................................................................................................................................................105 SORT ........................................................................................................................................................................106 INPUT PROCEDURE:-............................................................................................................................................107 OUTPUT PROCEDURE:-........................................................................................................................................108 RELEASE.................................................................................................................................................................110 RETURN ..................................................................................................................................................................110 MERGE.....................................................................................................................................................................111 INPUT/OUTPUT ERROR HANDLING TECHNIQUES........................................................................................113 THE END-OF-FILE PHRASE (AT END).............................................................................................................113 EXCEPTION/ERROR Declarative.......................................................................................................................114 FILE STATUS key.................................................................................................................................................114 INVALID KEY phrase...........................................................................................................................................114 EXERCISES................................................................................................................................................................115 12. TABLE HANDLING............................................................................................................................................116
OCCURS...................................................................................................................................................................117 FIXED LENGTH TABLES......................................................................................................................................117 VARIABLE LENGTH TABLES..............................................................................................................................118 SET............... SET......................... ..................... ..................... .................... ..................... ..................... ..................... ..................... .................... ..................... ..................... ..................... ..........................................120 ...............................120 COMPLEX TABLES................................................................................................................................................121 TABLE PROCESSING ...........................................................................................................................................122 SEARCH...................................................................................................................................................................125 MERGE........... MERGE..................... ..................... ..................... ..................... ..................... .................... ..................... ..................... ..................... ..................... .................... ..................... .......................................130 ............................130 EXERCISES................................................................................................................................................................132 14. COMPILER OPTIONS.......................................................................................................................................135 APPENDIX
1...............................................................................................................................................................147
FILE STATUS CODES AND MEANING...............................................................................................................147 REFERENCES............................................................................................................................................................149
Cobol
Objective
1. Objective
The main objective of this courseware
To make you learn the Cobol language
To exploit the structured s tructured programming of COBOL
To make you develop mainframe applications using COBOL
Cognizant Academy
Ver 1.0
Page 5 of 149
Cobol
Introduction
2. Introduction HISTORY OF COBOL
Conceived in 1959
Preliminary Version Version in December 1959
First Standard COBOL in 1961
ANSI Approved Versions Versions in 1968, 1974
Latest COBOL Version in 1985
COBOL II / COBOL 85
ABOUT COBOL
There was a growing need in the early days to have a high level language which will be best suited for Business Applications. Applications. Hence In 1959, a new language COBOL – COmmon Business Oriented Language emerged.
Cobol is a High Level Structured Language. This is English like language, which is used to develop major business applications. why most of business applications are developed using Mainframe COBOL ?
Cobol is English like language hence its easy to learn
Can be used with any database like VSAM or DB2, IDMS
Can handle huge volume of Data
COBOL applications can be easily maintained
COBOL language consists of 4 major Divisions namely 1. IDENT IDENTIF IFICA ICATI TION ON DIVISI DIVISION ON 2. ENVI ENVIRO RONM NMEN ENT T DIVI DIVISI SION ON 3. DAT DATA DIV DIVIS ISIO ION N 4. PROC PROCED EDUR URE E DIV DIVIS ISIO ION. N. The IDENTIFICATION DIVISION and ENVIRONMENT DIVISION are the first 2 divisions that need to be defined in the COBOL program. As their names indicate, these divisions contain entries that gives the name of the program, author of the program, Source computer in which the program is written and the object computer in which the program may be run. Let us consider a statement ADD PRINCIPAL, INTEREST TO AMOUNT. The meaning of this statement is quite apparent. The principal and interest are added to get amount. The words PRINCIPAL, INTEREST, AMOUNT are called Data names. It is essential that all the data names which are used in PROCEDURE PROCEDURE DIVISION needs to be defined at the outset.
Cognizant Academy
Ver 1.0
Page 6 of 149
Cobol
Introduction
Hence all the data definitions takes place in DATA DIVISION. Hence DATA DIVISION appears before the PROCEDURE PROCEDURE DIVISION and it is the third division in the COBOL program. The data definition includes the size of the data item, the type and any initial value which needs to be set are defined in DATA DATA DIVISION DIVISION entries. The data that belongs to the input or output record is d efined in FILE SECTION and the data names that holds the intermediate results are defined in the WORKING STORAGE SECTION. SECTION. Now that we have defined all the necessary data names and files to be used by the COBOL program, next comes the algorithm. The last division in the COBOL program is the PROCEDURE DIVISION DIVISION where the actual algorithm of the program is written. The PROCEDURE PROCEDURE DIVISION contains contains statements, which specify operations to be performed by the computer. Thus these 4 divisions form the core structure of COBOL program. These divisions will be explained in detail in the following Chapters.
Cognizant Academy
Ver 1.0
Page 7 of 149
Cobol
Program Structure
3. PROGRAM STRUCTURE Lets try to develop an application using COBOL program. For e.g. Consider Employee Management System in an Organization. An Application Application contains series of programs, Data files, interfaces and Reports.
REFERENCE FORMAT: COBOL programs programs must be written in the COBOL reference format. Figure 4 shows the reference format for a COBOL source line.
1
6
7
8
11
12
72
73
80
The following areas are described below in terms of a 72-character line:
Sequence Number Area Columns 1 through 6: - The sequence number area may be used to label a source statement line. The content of this area may consist of any character in the character set of the computer.
Indicator Area Column 7: ♦
Any sentence, entry, entry, c lause, or phrase that requires more than one line can be continued in Area B of the next line which is not a ♦
comment line
♦
blank line
♦
Area A of a continuation line must be blank
♦
If no hyphen (-) in indicator Area ♦
♦
last character of the preceding line is assumed to be followed by a space
If hyphen in Indicator Area ♦
first non-blank character of this continuation line immediately follows the last non-blank char of continues line
♦
If the continued line contains a non-numeric literal without a closing quotation mark: ♦
all spaces at the end of the continued line (through column 72) are part of the literal
♦
Continuation line must contain a hyphen in the indicator area
♦
First non-blank character must be a quotation mark and Literal
♦
continues with the character following the quotation mark
Cognizant Academy
Ver 1.0
Page 8 of 149
Cobol
Program Structure
Area A Columns 8 through 11 The following items must begin in Area A: ♦
Division header
♦
Section header
♦
Paragraph header or paragraph name
♦
Level indicator or level-number (01 and 77)
♦
DECLARATIVES and END DECLARATIVES.
♦
End program header.
Area B Columns 12 through 72 ♦
Entries, sentences, statements, clauses
♦
Continuation lines.
Cognizant Academy
Ver 1.0
Page 9 of 149
Cobol
Identification Division
4. IDENTIFICATION DIVISION IDENTIFICA IDENTIFICATION TION DIVISION is the first division in the COBOL program. There may be several paragraphs in this division of which PROGRAM-ID is essential paragraph. Each program has a Program id – Name of the program. Author – Person who is writing the program and other information like date written, date compiled. Since the information identify a particular program, these are defined in IDENTIFICATION DIVISION which is the First line of o f the COBOL program. Except PROGRAM-ID PROGRAM-ID all the other paragraphs are optional and are mainly for documentation purposes. The syntax for
{IDENTIFICATION DIVISION ID.} PROGRAM-ID. Program name [AUTHOR. comment.] [INSTALLATION. comment.] [DATE-WRITTEN. comment.] [DATE-COMPILED. comment.] [SECURITY. comment.] PROGRAM-ID The first paragraph of the Identification Division must be the PROGRAM-ID PROGRAM-ID paragraph. The other paragraphs are optional, but, when written, must appear in the order shown in the format. This program names is used to identify the object program. The Program name is a user-defined user-defined word that identifies your program. The system uses the first 8 characters of program-name of the the outermost program as the identifying name of the program. ♦
The first 8 characters of program-name of the outermost program should be unique within the system. The first character must be alphabetic.
♦
If the first character is not alphabetic, it is converted as follows: 1 through 9 are changed to A through I Anything else is changed to J.
♦
If a hyphen is used in characters 2 through 8 of the program-name of the outermost program, it is changed to zero (0). Apart from these statements, there can be comment statements describing the functionality of the program, and a change log block giving the details about programmers who changed the program as a part of enhancement to the program.
Cognizant Academy
Ver 1.0
Page 10 of 149
Cobol
Identification Division
E.G:IDENTIFICATION DIVISION. PROGRAM-ID. EMPMAINT1. AUTHOR. CTS. DATE-WRITTEN. 01/01/01. DATE-COMPILED. ****************************************************************** *********** BRIEF PROGRAM DESCRIPTION ************
* PROGRAM OBJECTIVE: OBJECT IVE: This Program Maintains the Employee file by updating the master file.
Cognizant Academy
Ver 1.0
Page 11 of 149
Cobol
Environment Division
5. ENVIRONMENT DIVISION The identification division gives introduction about the program. Now we need to define the Machine dependent details for our program. These details are given in ENVIRONMENT DIVISION. The ENVIRONMENT DIVISION must follow the IDENTIFICATION DIVISION in the COBOL program. Among Among all the divisions this one is the most machine dependent division. The computer and all the peripheral devices required by the program are described in this division. The Environment Division consists of 2 sections The Configuration Section The Input-Output Section
CONFIGURATION CONFIGURATION SECTION: -
The configuration section appears first. SOURCE-COMPUTER. Computer-name. OBJECT-COMPUTER. OBJECT-COMPUTER. Computer-name. [ PROGRAM COLLA COLLATING TING SEQUENCE IS alphabet-name]. [SPECIAL-NAMES. [, CURRENCY SIGN IS literal-1] [, DECIMAL-POINT IS COMMA] [, ALPHABET alphabet-name IS { STANDARD-1 STANDARD-1 STANDARD-2 EBCDIC NATIVE ♦
In the configuration section at least the source computer and object computer paragraph needs to be coded
♦
SOURCE COMPUTER:- This paragraph specifies the name of the computer used to compile the COBOL program.
♦
OBJECT COMPUTER:- This paragraph specified the name of the computer used to execute the COBOL program.
♦
The SPECIAL SPECIAL NAMES NAMES paragraph paragraph can have entries, which are implement implementor or dependent. dependent. Like the CURRENCY can be changed or the DECIMAL POINT can be COMMA.
Cognizant Academy
Ver 1.0
Page 12 of 149
Cobol ♦
Environment Division
For e.g SPECIAL NAMES. CURRENCY IS DOLLAR. DECIMAL POINT IS COMMA
♦
Default collating sequence is EBCDIC on the IBM. Supposing we want ASCII.
Example 1: CONFIGURATION SECTION. SOURCE-COMPUTER. IBM 3090. OBJECT-COMPUTER. VAX-6410 PROGRAM COLLATING SEQUENCE IS ASCII-order. SPECIAL-NAMES. ALPHABET ASCII-order IS STANDARD-1. STANDARD-1. Example 2: CONFIGURATION SECTION. SOURCE-COMPUTER. IBM 3090. OBJECT -COMPUTER. VAX-6410 PROGRAM COLLATING SEQUENCE IS ASCII-order. SPECIAL-NAMES. ALPHABET ASCII-order IS STANDARD-1 STANDARD-1 DECIMAL IS COMMA CURRENCY IS ‘#’ SYMBOLIC CHARACTERS backspc IS 23 INPUT-OUTPUT INPUT-OUTPUT SECTION: Each application program gets data from some data files and processes data. After data processing, the program writes processed data either into a separate file or updates data in the existing ex isting file. This section contains the information regarding the files to be used by the program and the peripheral device from the file can be accessed. As a application development programmer, we should know what are all the data files needed for processing by our program. These files are defined in FILE-CONTROL paragraph paragraph of the INPUT-OUTPUT section.
This section has 2 paragraph. ♦
I-O CONTROL.
♦
FILE-CONTROL
Cognizant Academy
Ver 1.0
Page 13 of 149
Cobol
Environment Division
I-O CONTROL. I-O CONTROL is not used these days. This feature is invalid in COBOL 370. Each data file used by the program should be defined in the FILE-CONT FILE-CONTROL ROL paragraph. This paragraph also gives the medium through which the file can be accessed. By medium, in Mainframe environment, we mean the DDNAMES in run JCL. In this paragraph, we also describe what type of file it is, what organization is it, which access mode is used to access the files etc. The syntax is as follows
FILE-CONTROL. SELECT
SELECT [OPTIONAL] filnam1 ASSIGN TO assignmtname1 [ORGANIZA [ORGANIZ ATION IS {SEQUENTIAL, {SEQUEN TIAL, INDEXED, RELATIVE) ] [ACCESS MODE IS { SEQUENTIAL RANDOM DYNAMIC } ] [FILE STATUS STATUS IS dataname-1 datan ame-1 [dataname-2] ].
SELECT; - This statement gives the relationship between the filename used in the program and the data file used in the JCL. Filname1: - This is the name used by COBOL to refer inside the program. Assignmtname1: - DDNAME given in JCL. OPTIONAL: This key word is used only for input files. When the key word OPTIONAL is used in the select clause, this file need not be present during the execution. If this keyword is omitted, the file must be present.
RECORD FORMAT ♦
Fixed - Specify RECORDING MODE F - Max length of 01 level entry is less than BLOCK BLOCK contains clause size AND either
♦
Record contains clause has single size (Not a range)
♦
All 01 level entry is same and no depending on option
Cognizant Academy
Ver 1.0
Page 14 of 149
Cobol
Environment Division
♦
Unblocked B L O C K E D ♦
Variable - Specify RECORDING MODE V - Max length of 01 level level entry is less than than BLOCK contains contains clause size AND either
♦
Record contains clause has range ♦
01 level entry is different or has depending on option
BDW
RDW
Data Record
BDW / RDW = 2 byte length + 2 byte System info ♦
Spanned Records - Specify RECORDING MODE S - Max length of 01 level entry + 4 is greater than than BLOCK contains clause size - Can be Fixed or variable - Can be Blocked or Unblocked
BDF
SD F BDF BDF SDF SDF
♦
Rec segment
SDF
- Bloc Block k desc descri ript ptor or fiel field d - Segm Segmen entt desc descri ript ptor or fiel field d
Undefined Records - Unspecified characteristics - Compiler does not derive - Specify RECORDING MODE U - Each block on external storage is treated as a logical record; - Max record length is is •
As specified in Record Contains or varying clause
•
If omitted max 01 level entry size
- BLOCK contains clause is treated as comment comment
Cognizant Academy
Ver 1.0
Page 15 of 149
Cobol
Environment Division
EFFICIENT FILE ORGANIZATION ORGANIZATION AND MANAGEMENT The most important activity while designing the COBOL program is the File organization and management. For this we need to know ♦
File type and organization
♦
Devices
♦
Access modes (sequential, random, or dynamic)
♦
Record formats (fixed, variable, spanned, undefined).
♦
Depending on the input/output requirements and device types, your file organization will either be sequential, indexed, or relative. SAM and VSAM are the two access methods available with COBOL that will handle the input/output requests to the operating system for the storage and retrieval of records from the input/output devices.
♦
If a large percentage of the file is referenced or updated in your application program, sequential processing is faster than indexed or relative. relative. If a small percentage of records are processed during each run of your application program, use indexed or relative access.
♦
A SAM or VSAM VSAM sequential file is the simplest file type. Either works for an application that uses only sequential access of fixed-length or variable-length records and no insertion of records between existing ones.
♦
A VSAM VSAM indexed file is the most flexible flexible data set. It may be used for applications requiring requiring both sequential and random access in the same program. A indexed file file can make use of fixed-length or variable-length records.
♦
A VSAM relative relative file works well for an application that performs random insert and deletes operations. A VSAM relative relative file can make use of fixed-length or variable-length records.
SEQUENTIAL FILE ♦
The sequential files are used for Reports, transaction files, intermediate files for processing, Sort files etc.
♦
Records can be accessed in the order in which they appear in the file
♦
Records can be updated
♦
Records can be appended but not inserted
♦
Records cannot be deleted
Cognizant Academy
Ver 1.0
Page 16 of 149
Cobol
Environment Division
SELECT [OPTIONAL] filnam1 ASSIGN TO assignmtname1 [ORGANIZATION IS SEQUENTIAL] [ACCESS MODE IS SEQUENTIAL ] [FILE STATUS IS dataname-1 [dataname-2] ]. E.G :SELECT MNT91 ASSIGN TO INT91 ORGANIZATION IS SEQUENTIAL SEQUENT IAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS W01-X-FST-NT91. Filname1: - MNT91. Assignmtname1: - INT91. This is the name referred in the DD Statement in the JCL ORGANIZA ORGANIZATION: - gives the type of file. Here its Sequential, which means this file is sequential file.
JCL required at run time for Files
// INT91 INT91 DD DSN=CTS.TEST.NT91, DSN=CTS.TEST.NT91, // DISP=SHR INDEXED FILE
♦
The indexed files are the most flexible type of files. The indexed files can be Master files in the Data base or the History files
♦
The index component of the file provides the logical arrangement of the main file, ordered by record key. key. The actual physical arrangement of the records in the main file is not significant to COBOL program.
♦
Random Access of Records using a Record Key
♦
Records can be Inserted, Updated and Deleted
♦
Indexed Access is faster than Sequential Access
♦
Unique or Non-Unique Indexes
Cognizant Academy
Ver 1.0
Page 17 of 149
Cobol
Environment Division
SELECT filnam1 filnam1 ASSIGN TO assignmtname1 [ORGANIZATION IS INDEXED ] [ACCESS MODE IS { SEQUENTIAL RANDOM DYNAMIC } ] RECORD KEY IS data-name-3 ( [ ALTERNATE RECORD KEY IS data-name-4] [WITH DUPLICATES] ) ... [FILE STATUS STATUS IS dataname-1 datan ame-1 [dataname-2] ]. assignmtname1 = [label-]DDname
E.G : SELECT B20ASIML ASSIGN TO ISIML ORGANIZATION IS INDEXED ACCESS MODE IS DYNAMIC RECORD KEY IS B20A-G-SIML-KEY FILE STATUS IS W01-X-FST-B20A. JCL required at run time for Files
//ISIML DD DSN=CTS.TEST.SIML, DSN=CTS .TEST.SIML, // DISP=SHR ORGANIZATION is INDEXED means it s a VSAM file. The records of the indexed file can be accessed in any mode. ACCESS MODE MODE = SEQUENTIAL – The records can be accessed sequentially. sequentially. Here the file is treated as sequential. RANDOM : - The records can be accessed in any order by giving the key value to the RECORD KEY variable. DYNAMIC: - The records can be accessed both sequentially and randomly.
RELATIVE FILE ♦
Also called Direct Access Files
♦
Each record has a unique address and is identified by its Relative Record Number in the file
♦
Records can be Accessed Randomly using their Relative Record Numbers
Cognizant Academy
Ver 1.0
Page 18 of 149
Cobol
Environment Division
SELECT filnam1 ASSIGN TO assignmtname1 [ORGANIZA [ORGANIZ ATION IS RELATIVE RELATIVE ] [ACCESS MODE IS { SEQUENTIAL RANDOM DYNAMIC } ] RELATIVE KEY IS dataname-3 [FILE STA STATUS IS dataname-1 [dataname-2] ]. assignmtname1 = [label-]DDNAME
ACCESS ORG. SEQ RELATIVE INDEXED
SEQ
RANDOM
DYNAMIC
ORDER OF WRITE INVALID INVALID ASC. ASC. REL. REL. REC. REC. NO. VALUE ALUE OF OF REL. REL. SEQ. OR KEY RANDOM ASC. KE KEY VALUE VALUE OF OF RE REC. SEQ. OR KEY RANDOM
Table 5.1 - File Access Modes File Status [FILE STATUS IS dataname-1 [dataname-2] ] data-name-1 : 2 bytes character data-name-2 : 6 bytes character (For VSAM) 2 byte binary (value 0, 8, 12) ♦
Return code 2 byte binary (0 to 5)
♦
Function code 2 byte binary (0 to 255) Feedback code
Cognizant Academy
Ver 1.0
Page 19 of 149
Cobol
Environment Division
RUN JCL for Program Execution
//PXXBB398 EXEC PGM=MYPROG //ISIML DD DSN=CTS.TEST.SIML, DSN=CTS .TEST.SIML, // DISP=SHR // INT91 INT91 DD DSN=CTS.TEST.NT91, DSN=CTS.TEST.NT91, // DISP=SHR //OCATF //OCATF DD DSN=CTS.CA DSN=CTS .CATF.M0101.B08, TF.M0101.B08, // DISP=(NEW,CATLG,CATLG), // SPACE=(CYL,(10,50),RLSE), // DCB=(RECFM=FB,LRECL=23) //SYSOUT DD SYSOUT=* //SYSUDUMP DD SYSOUT=* //SYSPRINT DD SYSOUT=* //* The above JCL is the RUNJCL for the application program. All the files, which are defined in the select clause in FILE SECTION, are given in the DD statement. The SYSUDUMP DD statement statement is where the dump of the data appears when an Abend occurs while executing the program. The contents of the current input record, when the abend took place also appears in the SYSUDUMP. SYSUDUMP. All the display statement messages appear in the SYSPRINT.
Cognizant Academy
Ver 1.0
Page 20 of 149
Cobol
Exercises
EXERCISES
1. Where do you define the files used, in a COBOL COBOL program? 2. Write the Identification division division for following. following. You are developing a program named EMPMAINT. 3. Write Write the the environm environment ent divisi division on for for the the above above program program The program is written on IBM-3090 machine and run on the same machine. The program EMPMAINT uses employee master file, employee transaction file, error file and card file. The Employee master file is an indexed file with primary key as employee number, the transaction file, error file and card file are all sequential files. Also write the execution JCL.
Cognizant Academy
Ver 1.0
Page 21 of 149
Cobol
DATA DIVISION
6. DATA DIVISION Until now, now, we have defined the environment in which our application program will be executed, the data d ata files used by the program. Our application program needs to know the layout of the f iles used for it to process the data. We define the file layout in the DATA DIVISION. The DATA DIVISION has the following sections. ♦
FILE SECTION
♦
WORKING-STORAGE SECTION
♦
LINKAGE SECTION
This data division has LEVEL structure. The data type for the variables is described using Picture Clause.
LEVELS ♦
Mimic the hierarchy in the Logical Record
♦
The lowest subdivision is an Elementary Item
♦
Elementary items can be combined into group items
♦
Elementary Items may form part of one or more Groups
♦
Level Numbers 01 to 49, 77, 88
♦
The level Number of the Elementary Items is greater than that of the group Item.
♦
The 01 level number is root in the hierarchy of the logical record
♦
The size of the Group item is equal to the sum of the sizes of the elementary or sub-group sub-group items.
E.G. 01
ASSOC-REC. 05 ASSOC-NO 05 ASSOC-NAME. 10 FIRST-NAME 10 LAST-NAME 05 ASSOC-ADDRESS. 10 ADDR-LINE-1 10 ADDR-LINE-2 10 ADDR-LINE-3 10 TELEPHONE-NO
In this example the 01 ASSOC-REC is the root. The 05 level numbers are the sub-group items. The 10 level numbers are the elementary items.
Cognizant Academy
Ver 1.0
Page 22 of 149
Cobol
DATA DIVISION
77 Level ♦
Elementary Data Item not belonging to any group
♦
Must begin in Area A
E.G 01 ASSOC-REC. 77 W04-TEMP-I
PIC X(01).
CONDITION NAMES (88-LEVEL)
88 data-name { VALUE IS VALUES ARE } ( lit-1 [THRU lit-2] ) ... ♦
Used for Condition Checking Example: 01 W03-G-FLAG-VAR. 03 W03-G-FLAG-VAR. 05 W03-X-REPTYPE-FLAG PIC X(02) VALUE 'NR'. 88 C03W-NORMAL-REQ-FLAG C03W-NORMAL-R EQ-FLAG VALUE 'NR'. 88 C03W-SHOP-BOUND-FLA C03W-SHOP-BO UND-FLAG G VALUE 'SB'. 88 C03W-SHOP-VAR-FLAG C03W-SHOP-VAR-FLAG VALUE 'SV'. 05 W03-X-REQ-PROCESSED PIC X(01) VALUE 'N'. 88 C03W-REQUEST C03W-REQUES T-PROCESSED-Y -PROCES SED-Y VALUE 'Y'. 88 C03W-REQUEST C03W-REQUES T-PROCESSED-N -PROCES SED-N VALUE 'N'.
DATA DATA TYPES TYPE S ♦
Elementary Data Items
♦
Alphanumeric
♦
Alphabetic
♦
Numeric (Zoned, Packed, Binary)
♦
Numeric Edited
♦
Alphanumeric Edited
♦
Group Data Items are Alphanumeric
Cognizant Academy
Ver 1.0
Page 23 of 149
Cobol
DATA DIVISION
PICTURE CLAUSE
{ PICTURE IS pic-string1 PIC } ♦
Specified for every Elementary Item
♦
pic-string1 can contain a maximum maximum of 30 Code Characters
♦
Code Character repetitions can be indicated by an integer within within ( ) Code Char 9 X A V P
S B 0 / , . * $ + CR DB
Meaning
Numeric Data Item Any allowable character from the character set a Letter or Space Assumed Decimal Point Position of Ass Assumed umed Deci ecimal Point when it lies outside Data Item is Signed Inserts space Inserts zero Inserts Slash Inserts Comma Inserts Decimal Point Replaces leading zeros Inserts Currency sign Inserts Sign
Sample Picture 99 9 9 XXXX AAAA 99V99 99PPV PPP99 S9(4) XXBXXX 9(5)000 XX/XX/XX 9,999 9,999.99 ****9.99 $9,999.99 +99.99 -99.99 99.99DB 99.99CR
Table 6.1 Code Characters
PICTURE String - Rules ♦
Code characters can be in lower case
♦
Codes usable once or more A B P X Z 9 0 / , + - * $
♦
Codes usable just once -S V . CR DB
Cognizant Academy
Ver 1.0
Page 24 of 149
Cobol
DATA DIVISION
PICTURE String - Rules for data categories ♦
Alphabetic item
Only A allowed ♦
Numeric Items
9 P S V
♦
PICTURE
Valid Range of Values
9999
0 through 9999
S99
-99 through +99
S999V9
-999.9 through +999.9
Numeric-edited Numeric-edited items
- B P V Z 9 0 / , . + - CR DB * $ - At-least one edit char or BLANK WHEN ZERO clause ♦
Alphanumeric items
- The The symbol X or - Combinations of the symbols A, X, and 9. ♦
Alphanumeric-edited Alphanumeric-edited items
-A X 9 B 0 / - Must contain at least one A or X, X, and at least one B or 0 or /.
FILE SECTION: The layouts of the files are described in this section. The files, which are defined in the SELECT clause, should have an FD entry in the FILE SECTION. The record layout for the files is defined in the FD section which is FILE DESCRITPTION DESCRITPTION entry for the files f iles defined in the SELECT clause. The File description entry is followed by the record description entry, A Record Description Description entry is a 01 level group item along with its sub divisions. If there are more than one 01 level, this means that the file defined is a Variable file which has different record layouts.
Cognizant Academy
Ver 1.0
Page 25 of 149
Cobol
DATA DIVISION
The syntax of the FD entry is
FD file-name-1 [ BLOCK CONTAINS [ int1 TO ] int2 { CHARACTERS RECORDS } ] [ RECORDING MODE IS { F V S U } ] [ RECORD { CONT CONTAINS AINS int3 [TO [TO int4] int4] CHARACTERS } ] [ DATA DATA { RECORD REC ORD IS RECORDS ARE } ( data-name-2 ) ... ] BLOCK CONTAINS: The BLOCK CONTAINS CONTAINS CHARACTERS CHARACTERS clause specifies the size of the physical records. The int1 and int2 specifies the minimum minimum and maximum character sizes of the physical physical record. The BLOCK CONTAINS CONTAINS RECORDS clause specifies the number of logical records present in each physical record (the actual data records in the main memory). RECORD CONTAINS: The RECORD contains clause gives the physical record. This has to match with record length in the DD statement parameter. parameter.
E.G. FD INT91. RECORDING MODE IS F BLOCK CONTAINS CONTAINS 2 RECORDS. 01 NT91-HDR PIC X(80). WORKING-STORAGE SECTION: ♦
This section is used to define the temporary variables in the COBOL program. It is used like a scratch pad inside the program.
♦
The data in the working storage may be group item or elementary item.
♦
Level 77 is used to define elementary data item in the working storage section.
♦
Level 88 is used for Conditional variables.
♦
Succeeds File Section
♦
Used for Intermediate Storage
♦
Common Practice to Group related items together
Cognizant Academy
Ver 1.0
Page 26 of 149
Cobol ♦
DATA DIVISION
Example 01 I-ADDRESS. 05 I-ADD-LINE-1 PIC X(30). 05 I-ADD-LINE-2 PIC X(30). 05 I-ADD-LINE-3 PIC X(30).
Syntax for Data Description Entry
level
{data-name-1 FILLER } [REDEF clause] [BLANK-WHEN-ZERO clause] [EXTERNAL clause] [GLOBAL clause] [OCCURS clause] [JUST clause] [PIC clause] [SIGN clause] [USAGE clause] [VALUE [VALUE clause] .
REDEFINES
level {data-name-1 FILLER} REDEFINES data-name-2 ♦
Allows the same area of memory to be referenced by more than one data-name with different format and sizes
♦
Multiple 01 levels of same FD are Implicitly Redefined Redefined
Restrictions on REDEFINES ♦
OCCURS and REDEFINES cannot be combined
♦
Qualification of data-name-2 not required
♦
Value Clauses only in Condition Names
♦
Redefinition Ceases Ceases Whenever a Level No is <= that of data-name-1 or data-name-2 is encountered encountered
♦
The Size of Data-name-1 must be Less than or equal to Data-name-2
♦
Data item lengths and types can also be respecified within an area.
Cognizant Academy
Ver 1.0
Page 27 of 149
Cobol
DATA DIVISION
REDEFINES Examples 05 NAME-2. 10 SALARY PICTURE XXX. 10 SO-SEC-NO PICTURE X(9). 10 MONTH PICTURE XX. 05 NAME-1 REDEFINES NAME-2. 10 WAGE PICTURE 999V999. 10 EMP-NO PICTURE X(6). 10 YEAR PICTURE XX. ♦
When an area is redefined, all descriptions of the area are always in effect.
♦
That is, redefinition does not cause any data to be erased and never supersedes a previous description.
♦
Thus, if B REDEFINES C has been specified, either of the two procedural statements, MOVE X TO B and MOVE Y TO TO C, could be executed at any point in the program.
BLANK WHEN ZERO ♦
BLANK WHEN { ZERO ZEROS ZEROES }
♦
The BLANK WHEN ZERO clause specifies that an item contains nothing but spaces when its value is zero.
♦
The BLANK WHEN ZERO clause can be specified only o nly for elementary numeric or numeric-edited items. These items must be described, either implicitly or explicitly, explicit ly, as USAGE IS DISPLAY DISPLAY
♦
Useful for printing
♦
Not allowed on 66 and 88 levels & on POINTER and INDEX INDEX data items
EXTERNAL ♦
This clause indicates that the data item is external to the program and is common to the entire run unit
Cognizant Academy
Ver 1.0
Page 28 of 149
Cobol
DATA DIVISION
♦
Subordinates to an EXTERNAL group item attains EXTERNAL attribute
♦
All programs referring to the EXTERNAL data item must define same number of standard data format characters (Total length)
♦
Name used for the data item cannot be used on another EXTERNAL item item within the same program
♦
VALUE clause not allowed
♦
Allowed only at the 01 Level
♦
Not allowed in Linkage and File Section
♦
Indexes in an EXTERNAL EXTERNAL data record do not possess the external attribute.
GLOBAL ♦
This clause indicates that the data item is available to all the nested programs unless it is defined in the contained program
♦
Valid only for 01 Level
♦
Valid only in Working Storage and File Section, not valid in Linkage Section
♦
All data-names subordinate to or condition-names or indexes associated with a global name are global names.
♦
The search begins within the program that contains the reference and continues "outward" to containing programs until a match for f or the GLOBAL name is found.
JUSTIFIED { JUSTIFIED JUST} ♦
RIGHT
The JUSTIFIED clause overrides standard positioning rules for a receiving item of the alphabetic or alphanumeric categories
♦
Can’t be specified for other categories
♦
Does not affect initial values, as determined by the VALUE VALUE clause
♦
Does not affect the setting setting of conditional variable when the associated condition name is set
♦
Items described as USAGE IS POINTER
Cognizant Academy
Ver 1.0
Page 29 of 149
Cobol
DATA DIVISION
JUSTIFIED - Examples
05 alig alignn-rt rt pic pic x(5) x(5) 88 c-rt
JUST JUST RIGH RIGHT T. value ‘RT’.
1. MOVE ‘RT’ TO align-rt 2. SET c-rt TO TRUE Value of align-rt Before stmt-1 RTbbb After stmt-1 bbbRT After stmt-2 RTbbb PICTURE [ PICTURE IS string PIC ] ♦
Specifies the characteristics and editing requirements
♦
Must be specified for every elementary item except an index data item or the subject of the RENAMES clause. In these cases, use of this clause is prohibited. prohibited.
♦
The PICTURE clause can be specified only at the elementary level
♦
The PICTURE character-string can contain a maximum of 30 characters
SIGN [SIGN IS
{LEADING TRAILING} ] [ SEPARATE CHARACTER ]
♦
Specifies the position and mode of representation of the operational sign for a numeric entry.
♦
The Sign Clause can be specified for a signed numeric data description entry (that is, one whose PICTURE STRING STRING contains an S)
♦
If a SIGN clause is specified in either an elementary or group entry subordinate to a group item for which a SIGN clause is specified, the SIGN clause for the subordinate entry takes precedence for the subordinate entry.
♦
The SEPARA SEPARATE TE phrase indicates that sign is stores as separately and not in the zoned part.
♦
The TRAILING phrase indicates that sign is to be stored in the trailing position
♦
The LEADING phrase indicates that sign is to be stored in the leading position
Cognizant Academy
Ver 1.0
Page 30 of 149
Cobol
DATA DIVISION
SIGN Clause Examples
77 l-V1 PIC S9(3) SIGN LEADING VALUE VALUE K50 K stands for -2. l-V1
K
5
0
77 l-V2 PIC S9(3) SIGN LEADING SEPARA SEPARATE TE VALUE -250 l-V2
-
2
5
0
77 l-V2 PIC S9 (3) SIGN TRAILING VALUE -250 The value stored internally in 3 characters as l-V2
2
5
0
VALUE CLAUSE: The VALUE VALUE clause is used to set an initial value to the working storage variable. This can be specified only in the working storage variable. The VALUE Clause can not be a part of RECORD DESCRIPTION entry in the FILE SECTION.
E.G WORKING-STORAGE SECTION. 01 W04-G-VAR. 03 W04-X-RUN-TIME W04-X-R UN-TIME PIC X(20) VALUE SPACES. SPACES. 03 W04-X-PGM-NAME PIC X(08) VALUE 'PXXBB290'. 01 W04-TEMP-J PIC 9(02) VALUE ZEROES. In the above example the variable W04-X-PGM-NAME is set to an initial value of PXXBB290 The alphanumeric items can be initialized to Spaces and numeric items can be initialized to Zeros EDITING: Sometimes the data when written to report needs some editing to be done. There are 2 Editing done in COBOL Numeric Editing Alphanumeric Editing
Cognizant Academy
Ver 1.0
Page 31 of 149
Cobol
DATA DIVISION
The Numeric Edit characters are B P V Z 9 0 / , . + - CR DB * $
The alphanumeric Edit Characters are A X 9 B 0 / PICTURE Clause Editing ♦
Insertion
- Simple insertion - Special insertion - Fixed insertion - Floating insertion. ♦
Suppression Suppression & Replacement
- Zero suppression and replacement with asterisks or spaces ♦
EDITING ALLOWED ONLY for Categories:
- Numeric-edited Numeric-edited (All edits) - Alphanumeric-edited Alphanumeric-edited (Only Simple insertion) ♦
Simple insertion
-B0/ only for numeric edited
PICTURE X(2)BX(3)BX(4) 9(2)/9(2)/9(2) 99,B999,B000 9 9 ,9 9 9
Cognizant Academy
Value of Data 19Mar1995 190 3 9 5 1 234 1 234 5
Ver 1.0
Edited Result 19 Mar 1995 19/03/95 01, 234, 000 12,345
Page 32 of 149
Cobol ♦
DATA DIVISION
Special Insertion Editing
- Period (.) is the special insertion symbol; it also represents the actual decimal point for alignment purposes PICTURE 999.99 999.99 999.99 999.99
Value of Data 1.234 12.34 123.45 1 2 3 4 .5
Edited Result 001.23 012.34 123.45 234.50
♦ ♦
Fixed Insertion Editing
- $ (currency symbol) - + - CR DB (editing-sign control symbols) PICTURE 999.99+ +9999.99 9999.99 -$999.99 -$999.99 -$999.99 $9999.99CR $9999.99DB $9999.99DB $9999.99CR ♦
Value of Data +6555.556 -6555.555 +1234.56 -123.45 -123.456 +123.456 +123.45 -123.45 +123.45 -123.45
Edited Result 555.55+ -6555.55 1234.56 -$123.45 -$123.45 $123.45 $ 0 1 2 3 .4 5 $0123.45DB $ 012 3 .45 $0123.45CR
Floating Insertion
- $ + - Mutually exclusive PICTURE $$$$.99 $$$9.99 $,$$$,999.99 +,+++,999.99 $$,$$$,$$$.99CR ++,+++,+++.+++
Cognizant Academy
Value of Data .12 3 .12 -1234.56 -123456.789 -1234567 000 0 .00
Ver 1.0
Edited Result bbb$.12 bb$0.12 bbbb$1,234.56 b-123,456.78 $1,234,567.00CR Bbbbbbb
Page 33 of 149
Cobol
♦
DATA DIVISION
Zero Suppression and Replacement
- Z * (Mutually exclusive) - as floating replacement Z * + - $ are mutually exclusive PICTURE ****.** ZZZZ.ZZ $$$$.$$ $$$$.$$ ZZZZ.99 ZZ99.99 Z,ZZZ.ZZ+ *,***.**+ **,***,***.**+ $ZZ,ZZZ.ZZCR $B*,***,***.**BBDB
Value of Data 0 00 0 .00 00 00 .00 0 00 0 .00 0 00 0 .02 0 0 0 0 .0 0 000 0 .00 +123.456 -123.45 +12345678.9 +1234.56 -12345.67
Edited Result ****.** Bbbbbbb Bbbbbbb $.02 bbbb.00 bb00.00 bb123.45+ **123.4512,345,678.90+ $b1,234.56bb $b ***12,345.67bbDB
LINKAGE SECTION: The LINKAGE SECTION SECTION is used to define any data passed across programs. i.e. the layout of the data passed is defined in the linkage section.
Example: LINKAGE SECTION. 01 SALARY-REC. 05 PTR-NEXT-REC PTR-NEXT-REC POINTER. 05 NAME PIC X(20). 05 DEPT PIC 9(4). 05 SALARY PIC 9(6). Thus in DATA DIVISION, we have defined data used by our program, in the FILE SECTION – Data file layouts, in WORKING-STORAGE SECTION - temporary variables if any, and in the LINKAGE SECTION the layout of the data passed across programs.
Cognizant Academy
Ver 1.0
Page 34 of 149
Cobol
DATA DIVISION
USAGE CLAUSE The data can be stored in more than one internal form in the computer. In COBOL, COBOL, a programmer is allowed to specify the internal form of the data item so as to facilitate the use of the data item more efficiently. efficiently. The The USAGE clause specifies the format of a data item in computer storage. These are forms of internal representation ♦
Computational
♦
Display
♦
Pointer
♦
Packed – decimal
The syntax of the USAGE clause is USAGE IS {BINARY COMP COMPUTATIONAL COMPUTATIONAL COMP-1COMPUTATIONAL-1 COMP-2 COMPUTATIONAL-2
COMP-3
COMPUTATIONAL-3
COMP-4
COMPUTATIONAL-4
DISPLAY INDEX PACKED-DECIMAL POINTER}
COMPUTATIONAL: The Computational or COMP phrase has the following 6 formats ♦
A computational computational item is is a value used in arithmetic arithmetic operations. It must be numeric. numeric. If the USAGE USAGE of a group item is described with any of these items, the elementary items within the group have this usage.
♦
The maximum length of a computational item is 18 decimal digits.
♦
The PICTURE of a computational item can contain only: ♦
9 :- One or more numeric character positions
♦
S :- One operational sign
♦
V :- One implied implied decimal point
♦
P :- One or more decimal decimal scaling positions
Cognizant Academy
Ver 1.0
Page 35 of 149
Cobol
DATA DIVISION
BINARY :Specified for binary data items. items. Such items have a decimal equivalent consisting consisting of the decimal digits 0 through 9, plus a sign. Negative numbers are represented as the two's complement of the positive number with the same absolute value. The amount of storage occupied by a binary item depends on the number of decimal digits defined in its PICTURE clause:
Digi Digits ts in in PICT PICTUR URE E Clau Clause se 1 through 4 5 through 9 10 through 18
Stor Storag agee Occu Occupi pied ed 2 bytes (halfword) 4 bytes (fullword) 8 bytes
(doubleword) COMPUTATIONAL or COMP:This is the equivalent equiva lent of BINARY. BINARY. The COMPUTATIONAL COMPUTATIONAL phrase is synonymous synon ymous with BINARY. BINARY.
COMPUTATIONAL-1 or COMP-1 (Floating-Point): Specified for internal floating-point items (single precision). COMP-1 items are 4 bytes long. The number is actually represented in Hexadecimal form. f orm. Such representation is suitable for Arithmetic operations. The PIC clause cannot be specified for f or this item
COMPUTA COMPUTATIONAL-2 or COMP-2 (Long Floating-Point) Specified for internal floating-point items (double precision). COMP-2 items are 8 bytes long. The advantage is that this increases the precision of the data, which means more significant digits can be available for the item. The PIC clause cannot be specified
COMPUTATIONAL-3 or COMP-3 (Internal Decimal) This is the equivalent of PACKED-DECIMAL. ACKED-DECIMAL. In this form of internal representation the numeric data is represented in the decimal form, but one digit takes half-a-byte. The sign is stored separately as rightmost half-a-byte regardless of whether S is specified in the PIC clause or not. The hexadecimal number C or F denotes positive sign and D denotes negative sign. The number of bytes = n+1/2 Where n is the number of places specified in PIC clause For e.g. 77 ITEM-1
PIC
S9(7) COMP-3
will occupy 4 bytes. COMPUTATIONAL-4 or COMP-4 (Binary) This is the equivalent of BINARY.
Cognizant Academy
Ver 1.0
Page 36 of 149
Cobol
DATA DIVISION
DISPLAY: The data item is stored in character form, 1 character for each 8-bit byte. This corresponds to the format used for printed output. DISPLAY can be explicit or implicit.
USAGE IS DISPLAY is valid for the following types of items:
♦
Alphabetic Alphanumeric Alphanumeric-edited
♦
Numeric-edited
♦
External floating-point
♦
External decimal (numeric)
♦ ♦
INDEX: A data item defined with the INDEX phrase is an index data item. An index data item is a 4-byte elementary item (not necessarily connected with any table) that can be used to save index-name values for future reference. reference. Through a SET statement, statement, an index data item can be assigned an index-name value; such a value corresponds to the occurrence number in a table. Direct references to an index data item can be made only in a SEARCH statement, a SET statement, statement, a relation condition, the USING phrase of the Procedure Division header, or the USING phrase of the CALL statement. An index data item can be part of a group item referred to in a MOVE statement or an input/output statement. An index data item saves values that represent table occurrences, yet is not necessarily defined as part of any table. Thus, when it is referred to directly in a SEARCH or SET statement, or indirectly indirectly in a MOVE or input/output statement, there is no conversion of values when the statement is executed. The USAGE IS INDEX INDEX clause can be written at any level. If a group item is described with the USAGE IS INDEX clause, the elementary items within within the group are index data items; the group itself is not an index data item, and the group name cannot be used in SEARCH and SET statements statements or in relation conditions. The USAGE clause of an elementary item cannot contradict the USAGE clause of a group to which the item belongs. An index data item cannot be a conditional variable. The DATE FORMAT, JUSTIFIED, PICTURE, BLANK WHEN ZERO, SYNCHRONIZED, or VALUE clauses cannot be used to describe group or elementary items described with the USAGE IS INDEX clause.
Cognizant Academy
Ver 1.0
Page 37 of 149
Cobol
DATA DIVISION
SYNCHRONIZED SYNCHRONIZED can be used with USAGE IS INDEX to obtain efficient use of the index data item.
POINTER: A data item defined with USAGE USAGE IS POINTER POINTER is a pointer data item. A pointer data item is a 4-byte elementary item. You can use pointer data items to accomplish limited base addressing. Pointer data items can be compared for equality or moved to other pointer items. A pointer data item can only be used:
♦
In a SET statement (Format 5 only)
♦
In a relation condition
♦
In the USING phrase of a CALL statement, an ENTRY statement, or the Procedure Division header.
The USAGE IS POINTER clause can be written at any level except level 88. If a group item is described with the USAGE IS POINTER clause, the elementary items within the group are pointer data items; the group itself is not a pointer data item and cannot be used in the syntax where a pointer data item item is allowed. The USAGE clause of an elementary item cannot contradict the USAGE clause of a group to which the item belongs. Pointer data items can be part of a group that is referred to in a MOVE statement or an input/output statement. statement. However, if a pointer data item is part of a group, there is no conversion of values when the statement is executed. A pointer data item can be the subject or object of a REDEFINES clause. SYNCHRONIZED can be used with w ith USAGE IS POINTER to obtain efficient use of the pointer data item. A VALUE clause for a pointer data item can contain only NULL or NULLS. A pointer data item cannot be a conditional variable. A pointer data item does not belong to any class or category. The DATE DATE FORMAT, FORMAT, JUSTIFIED, P ICTURE, and BLANK WHEN ZERO clauses cannot be used to describe group or elementary items defined with the USAGE IS POINTER clause. Pointer data items are ignored in C ORRESPONDING operations. A pointer data item can be written to a data set, but, upon subsequent reading of the record containing the pointer, the address contained can no longer represent a valid pointer. USAGE IS POINTER is implicitly specified for the ADDRESS OF special register. register.
Cognizant Academy
Ver 1.0
Page 38 of 149
Cobol
DATA DIVISION
SYNCHRONIZED
[ {SYNCHRONIZED { LEFT SYNC } RIGHT } ] ♦
Specifies the alignment of an elementary item on a natural boundary in storage.
♦
It is never required, but may improve performance on some systems for binary items used in arithmetic.
Cognizant Academy
Ver 1.0
Page 39 of 149
Cobol
EXERCISES
EXERCISES 1. Write Write File Section Section entries entries for the following following file a. Th Thee emp employ loyee ee Mast Master er file file Employee number char 10 (employee number nu mber consists of first 2 chars as their initials, next 4 bytes the month and year of joining, the next 4 bytes a running sequence number), Employee name char 30, Designation char 2, Department char 3, Date of Birth char 10, Date of joining char 10 b. The employ employee ee transa transacti ction on file file Employee number char 10, Employee name char 30, Designation char 2, Department char 3, Date of Birth char 10, Date of joining char 10, run date char 10 c. The Err Error file file The Record number numeric 8, employee number char 10, error description char 40 d. The Card ard fi file The employee number char 10, run date char 10 2. Write Write Working Working storage storage entries entries for for the followi following ng layouts layouts The working storage variables to check the file status of each file, the presence of the employee record in the master file
Cognizant Academy
Ver 1.0
Page 40 of 149
Cobol
Procedure Division
7. PROCEDURE DIVISION Now we have defined the data variables used in the program, files used in the program. We need to process the data available for us to produce the results. The syntax of procedure division is
PROCEDURE DIVISION [USING data-name-1 ... ] The USING clause is optional. It is used when we need to receive data from a calling program or through JCL using LINKAGE section. The data-name1 is the 01 levels defined in the linkage section. The order of the variables should be in the order in which it appears in the linkage section.
SECTIONS AND PARAS: ♦
SECTION is recognized by keyword SECTION
♦
Example MAIN-PROCESS SECTION
♦
PARAGRAPHs consist of SENTENCEs
♦
Paragraph is Identified by Para Name
♦
The scope of the section or paragraph is until the next section or paragraph starts
♦
Example 9999-READ-FILE. READ INT91. 9999-READ-FILE-EXIT. EXIT.
Rules for SECTION/PARA SECTION/PARA Names: ♦
Must not have more than 30 characters
♦
Can contain (0-9) DIGITs, (A-Z) LETTERs & Hyphens (-) only
♦
Hyphen should be embedded SENTENCE & STATEMENT: STATEMENT: -
♦
SENTENCE is composed of one or more STATEMENTs.
♦
STA STATEMENT is a syntactically valid combination of words and symbols beginning with a verb
♦
STATEMENT can be - Conditional - Imperative - Compiler Directing
Cognizant Academy
Ver 1.0
Page 41 of 149
Cobol
Procedure Division
INPUT - OUTPUT VERBS ♦
The input-output verbs are used for processing datasets
♦
Displaying information to and Capturing information from the user
ACCEPT
ACCEPT identifier1 [ FROM { mnemonic-name environment-name DATE DAY DAY DAY-OF-WEEK TIME } ]
♦
Using SPECIAL-NAMES paragraph
♦
A mnemonic name can be assigned to each of the environment names.
♦
For instance, OPERATOR OPERATOR IS CONSOLE can be specified in SPECIAL-NAMES paragraph. Then the ACCEPT statement statemen t can be coded as ACCEPT identifier1 identifie r1 FROM OPERATOR. OPERATOR.
♦
Mnemonic-Name is as specified in SPECIAL-NAMES
♦
Environment-Name can be SYSIN, SYSIPT, CONSOLE
♦
DATE
♦
DAY-OF-WEEK
♦
- 1 TO 7 (Monday to Sunday)
♦
DAY
- YYDDD (Julian)
- 9(5)
♦
TIME
- HHMMSShs
- 9(8)
- YYMMDD
- 9(6) - 9(1)
ACCEPT - Example ♦
COBOL statement ACCEPT in-parm ACCEPT in-parm FROM card
Cognizant Academy
Ver 1.0
Page 42 of 149
Cobol ♦
Procedure Division
JCL statement: //SYSIN DD applicable parameters
♦
LRECL of DCB parameter parameter can be up to a max of 256.
♦
RECFM can be Fixed or Variable
♦
Records are read until identifier is filled or EOF reached
DISPLAY
DISPLAY { identifier1 identi fier1 literal1 } ... [ UPON { mnemonic-name1 environment-name1}] [ WITH NO N O ADVANCING ADVANCING ] ♦
When the UPON is omitted, SYSOUT is the default device
♦
Mnemonic-name is as specified in SPECIAL-NAMES
♦
Environment-name can be SYSOUT, SYSLIST, SYSLST, SYSPCH, SYSPUNCH, CONSOLE
DISPLAY - Example ♦
COBOL statement DISPLAY ‘Return code:’ i-ret-code DISPLAY ‘Return code:’ i-ret-code UPON SYSLIST
♦
JCL statement
//SYOUT DD applicable parameters //SYLIST DD applicable parameters ♦
Default LRECL for SYSOUT is 121 and RECFM is FBA
♦
Records will be folded if length > LRECL - 1.
DISPLAY - Rules ♦
Identifier-1 is converted automatically to external format, if required
♦
Negative signed values cause a low-order sign overpunch
♦
POINTERs POINTERs are converted to an external PIC 9(10)
♦
INDEX names can’t be specified
Cognizant Academy
Ver 1.0
Page 43 of 149
Cobol
Procedure Division
ARITHMETIC OPERATIONS OPERATIONS ♦
BINARY : + - * / **
♦
UNARY : + -
♦
Precedence - Unary - Exponentiation - Multiplication Multiplication and Division - Addition and Subtraction Subtraction
ADD: ♦
Two or more numeric operands are summed up and stored
♦
Rules - Elementary Numeric Items - Literals should be Numeric - Decimal Point Alignment - Internal Format Transformation Transformation in case of mixed usage clause clause
Format 1 ADD { id-1 lit-1 } ... TO ( id-m [ ROUNDED ] ) ... [ ON SIZE ERROR imper-stmt1 ] [ NOT ON SIZE ERROR imper-stmt2 ] [ END-ADD ] Format 2 ADD { id-1 TO { id-3 lit-1 } ... lit-3 } GIVING ( id-m [ ROUNDED ] ) ... [ ON SIZE ERROR imper-stmt1 ] [ NOT ON SIZE ERROR imper-stmt2 ] [ END-ADD ]
Cognizant Academy
Ver 1.0
Page 44 of 149
Cobol
Procedure Division
Format 3 ADD { CORRESPONDING CORR } id-1 TO id-2 [ ROUNDED ] [ ON SIZE ERROR imper-stmt1 ] [ NOT ON SIZE ERROR imper-stmt2 ] [ END-ADD ]
CORRESPONDING: Quite often it is required to move some of the data item of one group to some other data item of other group. If the names of the corresponding data items are distinct then separate MOVE statements have to be used. But if the corresponding data items have identical names, then instead of separate MOVE statements, MOVE CORRESPONDING CORRESPONDING can be used.
E.g. 1
1
PAY-REC. 02 ID-NUMBER 02 NAME 02 DEPARTMENT 02 BASIC-PAY 02 FILLER PRINT-REC. 02 FILLER 02 ID-NUMBER 02 FILLER 02 NAME 02 FILLER 02 DEPARTMENT 02 FILLER 02 BASIC-PAY 02 FILLER 02 DEDUCTIONS 02 FILLER 02 ALLOWANCES 02 FILLER 02 NET-PAY
Cognizant Academy
PIC PI C PI C PI C PIC
9(5). X(25). X(20). 9999V99. X(24).
PIC PIC PIC PI C PIC PI C PIC PI C PIC
X(5). Z(5). X(5). X(25). X(5). X(20). X(5). Z Z Z Z. 9 9 X(5). PIC ZZZZ.99. X(5). PIC ZZZZ.99 X(5). ZZZZ.99
PIC PIC PI C
Ver 1.0
Page 45 of 149
Cobol
Procedure Division
MOVE CORR PAY-REC TO PRINT-REC In the above example the ID-NUMBER, NAME, DEPARTMENT, BASIC-PAY of PAY-REC will be moved the same data item of PRINT-REC. PRINT-REC. This is equivalent to 4 move statements MOVE ID-NUMBER OF PAY-REC TO ID-NUMBER OF PRINT-REC. MOVE NAME OF PAY-REC TO NAME OF PRINT-REC. MOVE DEPARTMENT OF PAY-REC TO DEPARTMENT OF PRINT-REC. MOVE BASIC-PAY OF PAY-REC TO BASIC-PAY OF PRINT-REC. ADD Corresponding:-
For example, if two data hierarchies are defined as follows: 05 ITEM-1 OCCURS 6. 10 ITEM-A PIC S9(3). 10 ITEM-B PIC +99.9. 10 ITEM-C PIC X(4). 10 ITEM-D REDEFINES REDEFINES ITEM-C PIC 9(4). 10 ITEM-E USAGE COMP-1. 10 ITEM-F USAGE INDEX. 05 ITEM-2. 10 ITEM-A PIC 99. 10 ITEM-B PIC +9V9. 10 ITEM-C PIC A(4). 10 ITEM-D PIC 9(4). 10 ITEM-E PIC 9(9) USAGE COMP. COMP. 10 ITEM-F USAGE INDEX. Then, if ADD CORR ITEM-2 TO ITEM-1(X) is specified, ITEM-A and ITEM-A(X), ITEM-B and ITEM-B(X), and ITEM-E and ITEM-E(X) are considered to be corresponding and are added together. together. ITEM-C and ITEM-C(X) ITEM-C(X) are not included because they are not numeric. ITEM-D and ITEM-D(X) are not included because ITEM-D(X) includes a REDEFINES clause in its data description. ITEM-F and ITEM-F(X) are not included because they are defined as USAGE IS INDEX. Note that ITEM-1 is valid as either identifier-1 identifier-1 or identifier-2. identifier-2. If any of the individual operations in the ADD CORRESPONDING statement produces a size error condition, imperative-statement-1 in the ON SIZE ERROR phrase is not executed until all of the individual additions are completed.
Cognizant Academy
Ver 1.0
Page 46 of 149
Cobol
Procedure Division
ON SIZE ERROR Occurs ♦
When the absolute value of the result of an arithmetic arithmetic evaluation, after decimal point point alignment, exceeds the largest value that can be contained in the result field
♦
When division by zero occurs
♦
If the ON SIZE ERROR phrase is specified and a size error condition occurs, the value of the resultant identifier affected by the size error is not altered--that is, the error results are not placed in the receiving identifier. identifier. After completion of the execution of the arithmetic operation, the imperative statement in the ON SIZE ERROR phrase is executed, control is transferred to the end of the arithmetic statement, and the NOT ON SIZE ERROR phrase, if specified, is ignored.
♦
If the NOT ON SIZE ERROR phrase has been specified and, after execution of an arithmetic operation, a size error condition does not exist, the NOT ON SIZE ERROR phrase is executed.
♦
For ADD CORRESPONDING and SUBTRACT CORRESPONDING statements, if an individual arithmetic operation causes a size error condition, the ON SIZE ERROR imperative statement is not executed until all the individual additions or subtractions have been completed.
♦
If the ROUNDED phrase is specified, rounding takes place before size error checking.
ROUNDED Phrase ♦
After decimal point alignment, the number of places in the fraction of the result of an arithmetic operation is compared with the number of places provided for the fraction of the resultant identifier.
Cognizant Academy
Ver 1.0
Page 47 of 149
Cobol ♦
Procedure Division
When the size of the fractional result exceeds the number of places provided for its storage, truncation occurs unless ROUNDED is specified. When ROUNDED is specified, the least significant digit of the resultant identifier is increased by 1 whenever the most significant digit of the excess is greater than or equal to 5.
ADD – Examples ♦
ADD A TO B
♦
ADD 1 TO B
♦
ADD A TO B ROUNDED
♦
ADD A TO B, C
♦
ADD A TO B ROUNDED C ROUNDED
♦
ADD A TO B ROUNDED , C
ON SIZE ERROR MOVE 1 TO ERR-FLAG ♦
ADD A, B, C, D TO X, Y, Z
♦
ADD A , B, C, D TO E GIVING X, Y
Add CORR X to Y (Example)
01 X. 05 X-1 PIC 9(3) VALUE 1. 05 X-2 PIC 9(3) VALUE 2. 05 X-3 PIC 9(3) VALUE 3. 01 Y. 05 X-1 PIC 9(5) VALUE 5. 05 X-2 PIC 9(5) VALUE 9. 05 X-3 PIC 9(5) VALUE 12. After Add, Under group Y: X-1 = 6; X-2 = 11; 11; X-3 = 15 SUBTRACT ♦
To subtract one or the sum of two or more numeric items from one or more items and set the values
of one or more items to the result ♦
Valid only for Numeric Items
♦
Automatic Decimal Alignment
Cognizant Academy
Ver 1.0
Page 48 of 149
Cobol
Procedure Division
SUBTRACT { id-1 lit-1 } ... FROM ( id-m [ ROUNDED ] ) ... [ ON SIZE ERROR imper-stmt1 ] [ NOT ON SIZE ERROR imper-stmt2 ] [ END-SUBTRACT ] SUBTRACT { id-1 lit-1 } ... FROM { id-2 lit-2 } GIVING ( id-m [ ROUNDED ] ) ... [ ON SIZE ERROR imper-stmt1 ] [ NOT ON SIZE ERROR imper-stmt2 ] [ END-SUBTRACT ] SUBTRACT { CORRESPONDING CORR } id-1 FROM id-2 [ ROUNDED ] [ ON SIZE ERROR imper-stmt1 ] [ NOT ON SIZE ERROR [ END-SUBTRACT ]
imper-stmt2
SUBTRACT – Examples ♦
SUBTRACT 1 FROM A
♦
SUBTRACT A FROM B
♦
SUBTRACT A B FROM C D
♦
SUBTRACT A B FROM C GIVING D
♦
SUBTRACT A FROM B
GIVING CROUNDED ♦
SUBTRACT A FROM B ON SIZE ERROR MOVE 1 TO ERROR-FLAG
Cognizant Academy
Ver 1.0
Page 49 of 149
Cobol
Procedure Division
MULTIPLY
MULTIPLY { id-1 lit-1 } BY ( id-2 [ ROUNDED ] ) ... [ ON SIZE ERROR imper-stmt1 ] [ NOT ON SIZE ERROR imperative-stmt2 ] [ END-MULTIPL END -MULTIPLY Y] MULTIPLY MULTIPLY { id-1 BY id-2 lit-1 } GIVING id-3 ( [ ROUNDED ] ) ... [ ON SIZE ERROR imper-stmt1 ] [ NOT ON SIZE ERROR imperative-stmt2 ] [ END-MULTIPL END -MULTIPLY Y] MULTIPLY - Examples ♦
MULTIPLY 5 BY A
♦
MULTIPLY 5 BY A ROUNDED ROUND ED
♦
MULTIPLY A BY B
♦
MULTIPLY A BY B GIVING C D
♦
MULTIPLY MULTIPLY A BY B ON SIZE ERROR
MOVE 1 TO ERROR-FLAG ♦
MULTIPLY A BY B GIVING GIVIN G C ON SIZE ERROR MOVE 1 TO ERROR-FLAG
Cognizant Academy
Ver 1.0
Page 50 of 149
Cobol
Procedure Division
DIVIDE
DIVIDE { id-1 INTO lit-1 } ( id-2 [ ROUNDED ] ) ... [ ON SIZE ERROR imper-stmt1 ] [ NOT ON SIZE ERROR imperative-stmt2 ] [ END-DIVIDE ] DIVIDE { id-1 {BY { id-2 lit-1 } INTO} lit-2 } GIVING ( id-3 [ ROUNDED ] ) ... [ ON SIZE ERROR imper-stmt1 ] [ NOT ON SIZE ERROR imperative-stmt2 ] [ END-DIVIDE ]
DIVIDE A INTO B DIVIDE A INTO B ROUNDED DIVIDE A INTO B C DIVIDE A INTO B GIVING C DIVIDE 2 INTO A GIVING B C DIVIDE A BY B GIVING C DIVIDE A BY 5 GIVING B REMAINDER C
BEFORE A B C
AFTER A B
C
2 2
10 9
-
2 2
5 5
-
2 2
10 10
14 -
2 2
5 10
7 5
2
-
-
2
1
1
6
2
-
6
2
3
8
-
-
8
1
3
Table 7.1 DIVIDE - Examples
Cognizant Academy
Ver 1.0
Page 51 of 149
Cobol
Procedure Division
COMPUTE ♦
COMPUTE - More than one operation in a single statement statement - Shortens Programs - Avoids Intermediate Intermediate data names
♦
EXPRESSIONS - Made up of Operators, Data Names & Literals - Operators evaluated based on parenthesis and/or precedence
COMPUTE id-1 [ ROUNDED ] [ id-2 [ ROUNDED ] ] ... = arithmetic-expression [ ON SIZE ERROR imper-stmt1 ] [ NOT ON SIZE ERROR imperative-stmt2 ] [ END-COMPUTE ] ♦
Examples COMPUTE PROFIT = PRICE - COST, COST, COMPUTE A =B+C*2.
Cognizant Academy
Ver 1.0
Page 52 of 149
Cobol
Exercises
EXERCISES 1.
01 01 01 01 What will be
a. b. C. D.
VAL-1 PIC 999V99 VALUE 999.45. VAL-2 PIC 9(5)V999 VALUE 99008.301. VAL-3 PIC 9(5)V99 VALUE 11.3. VAL-4 PIC 99 99 VALUE 300. contained in V VAL-1,V AL-1,VAL-2,V AL-2,VAL-3,V AL-3,VAL-4 AL-4 after executing execu ting the following state statement ment
ADD VAL-1, VAL-1, VAL-2 VAL-2 GIVING VAL-3 VAL-3 ON SIZE ERROR MOVE MOVE ZERO TO VAL-3. ADD VAL-2, VAL-2, VAL-4 VAL-4 GIVIGN VAL-3 VAL-3 ON SIZE ERROR MOVE ZERO TO VAL-3. DIVIDE VAL-3 VAL-3 INTO VAL-4 VAL-4 GIVING VAL-3 VAL-3 ROUNDED MULITPLY MULITPLY VAL-4 VAL-4 BY VALI-1 VALI-1 GIVING VAL-4 VAL-4 ON SIZE ERROR MOVE 1 TO VAL-4 VAL-4
3. What will will be be the result result of the the following following compute compute statement statement 01 A PI C S9(3)V99. 01 B PI C 9(5)V99. 01 C PI C S9(5). A. B. C. D. E.
COMP COMPUT UTE E A = 999.9 999.988 88 COMPUT COMPUTE E A ROUNDE ROUNDED D = 999.985 999.985 COMPUTE COMPUTE B = 8888.50 / 5.25 + 99.5 / 5.0 * 4425.5 ON SIZE SIZE ERROR ERROR MOVE MOVE 1 TO B. A = 1.555, 1.555, B= 9999.99 C = -111 -11115.96. 15.96. COMPUTE COMPUTE B ROUNDED ROUNDED = C * A COMPUTE COMPUTE B ROUNDED ROUNDED = C ROUNDED ROUNDED * A ROUNDED ROUNDED
4. A field field name name STRING-1 STRING-1 contains contains 80 chars. chars. The The char (/) or or (,) is used used to indicate indicate the end end of a word within these 80 chars. cha rs. Write Write the cobol statement to find the number n umber of words in STRING-1 and the length of the individual words 1. A field field named NAME NAME contains contains 40 characters. characters. Write Write a COBOL COBOL statement statement to to change all instances of “MR.” by “SRI” and “MRS” by “SMT” “SMT”
Cognizant Academy
Ver 1.0
Page 53 of 149
Cobol
Exercises
2. What will will be present present after after the the execution execution of following following statement statement 1 WS-REC-1. 02 NAME PIC X(20). 02 AMT-1 PIC 9(5)V99. 02 AMT-2 PIC 9(5)V99. 02 TOTAL PIC 9(6)V99. INITIALIZE WS-REC-1. INITIALIZE WS-REC-1 REPLACING NUMERIC BY 1000. MOVE 2000 TO AMT-2. COMPUTE TOTAL TOTAL = AMT-1 + AMT-2 What value will be present p resent in TOTAL. TOTAL.
Cognizant Academy
Ver 1.0
Page 54 of 149
Cobol
Control Flow Verbs
8. Control Flow Verbs CONDITIONAL EXPRESSIONS ♦
Types - Relation - Class - Sign - Condition name
♦
Cause the processing to select between alternate paths depending on the truth value of the expression
RELATION OPERATORS ♦
Causes a comparison of two operands. Operands can be an Identifier, Literal or Arithmetic Arithmetic Expression
♦
Syntax operand-1 relop operand-2
♦
Operand-1, operand-2 can be an identifier, identifier, literal, arithmetic arithmetic expression, index-name or a pointer. pointer.
♦
Relational Operators
IS [NOT] GREATER GREATER THAN
[NOT] >
IS [NOT] LESS THAN
[NOT] <
IS [NOT] EQUAL TO
[NOT] =
IS GREATER GREATER THAN OR EQUAL TO
>=
IS LESS THAN OR EQUAL TO
<=
♦
For Numeric operands the comparison is algebraic
♦
Example: 012 12.00 12 +12 are all equal
Cognizant Academy
Ver 1.0
Page 55 of 149
Cobol ♦
Control Flow Verbs
Comparison permitted regardless of Usage
NON-NUMERIC OPERANDS OR ONE NUMERIC & ONE NON-NUMERIC ♦
Comparison is made as per the collating sequence
♦
If both operands’ Usage are are same and relational operator = or NOT = no conversion
♦
All other comparison operands with Usage other than display are converted to display
♦
Comparison starts from left most character
♦
For operands size unequal the comparison proceeds as if the shorter operand had been padded by blanks on the right
♦
Example l-A “JOES” l-B “JOE“ taken as “JOE “ l-A > l-B is TRUE
CLASS CONDITION ♦
Numeric or Alphabetic or user defined class-name check of the operand
♦
Numeric test cannot be done for an item declared as alphabetic (PIC A)
♦
Alphabetic test cannot be done for item declared as Numeric (PIC 9)
♦
Packed-decimal allowed for Numeric test
♦
Syntax
IF id-1 IS [ NOT ] {NUMERIC ALPHABETIC ALPHABETIC-LOWER ALPHABETIC-UPPER class-name } SIGN CONDITION
operand-1 IS [ NOT ] {POSITIVE NEGATIVE ZERO } ♦
Determines whether algebraic value is less than greater than or equal to zero
♦
operand-1 must be a numeric identifier, identifier, or arithmetic containing at least one reference to a variable
Cognizant Academy
Ver 1.0
Page 56 of 149
Cobol
Control Flow Verbs
Condition Name ♦
It is a subset of relational condition
♦
It tests a conditional variable to determine whether its value is equal to any value(s) associated with the condition-name.
♦
condition-name is used in conditions as an abbreviation for the relation condition.
♦
Syntax :
condition-name-1
Conditional expression Examples
IF ASSOC-AGE > 80 SET SENIOR-ASSOC TO TRUE END-IF IF ASSOC-SAL IS POSITIVE SET DEBIT-AMOUNT TO TRUE END-IF COMPLEX CONDITIONS ♦
Formed by - Combining simple conditions - Nested IFs - Logical Connectives
♦
Logical Operators - Used to combine simple simple conditions - Abbreviating conditions - For negation
LOGICAL OPERATORS ♦
NOT - Logical Negation
♦
OR - Logical Inclusive
♦
AND - Logical Conjunction
Cognizant Academy
Ver 1.0
Page 57 of 149
Cobol
Control Flow Verbs
EVALUATION EVALUATION RULES ♦
Precedence - Arithmetic Expression - All Relational Relational Operators Operators - NOT - AND - OR
♦
If a condition is put in parenthesis, it is is evaluated and its truth value depends on the truth value of its constituents
ABBREVIATED ABBREVIATED COMPOUND CONDITIONS
IF A = B AND A = C is same as IF A = B AND = C ♦
Here identical subjects are omitted in a consecutive sequence of relational conditions IF A = B AND A = C is same as IF A = B AND C
♦
Here identical subjects and relational operators are omitted in a consecutive sequence of relational conditions
♦
As indicated in the examples compound conditions can be abbreviated by having implied subjects, or, implied subjects and relational operators.
♦
Examples A > B OR NOT C OR D = (A>B) OR NOT (A>C) OR (A>D)
A > B OR NOT C OR NOT < D = (A>B) OR (A NOT > C) OR (A NOT< D)
GO TO The GO TO statement transfers transfers control from one part of the Procedure Division to another. The GO TO statement has four formats:
Cognizant Academy
Ver 1.0
Page 58 of 149
Cobol
Control Flow Verbs
Unconditional GO TO : The unconditional GO TO statement transfers control to the first statement in the paragraph or section named in procedure-name
The Syntax of the GO TO statement is GO TO procedure-name-1 procedure-name-1 Must name a procedure or a section in the same Procedure Division as the GO TO statement. An unconditional GO TO statement, when it appears in a sequence of imperative statements, must be the last statement in the sequence.
Example:-
IF NOT NUMERIC GO TO 999-ERR-PARA.
Conditional GO TO : -
GO TO proc-name-1 DEPENDING ON int-1 The conditional GO TO statement transfers control to one of a series of procedures, depending on the value of the identifier. procedure-name-1 Must be a procedure or a section in the same Procedure Division Division as the GO TO statement. statement. The number of procedure-names must not exceed 255. identifier-1 Must be a numeric elementary data item, which is an integer. integer. If equal to 1, control is transferred to the first statement in the procedure named by the first occurrence of procedure-name-1 If equal to 2, control is transferred to the first statement in the procedure named by the second occurrence of procedure-name-1, and so forth.
Cognizant Academy
Ver 1.0
Page 59 of 149
Cobol
Control Flow Verbs
If the value of identifier is anything other than a value within the range of 1 through n (where n is the number of procedure-names specified in this GO TO statement), no control transfer occurs. occurs.
Instead,
control passes to the next statement in the normal sequence of execution.
Example: GO TO 100-HDR-PARA 120-REC-PARA 130-TRILER-PARA DEPENDING ON WS-INT-1 When WS-INT-1 = 1, 100-HDR-PARA 100-HD R-PARA WS-INT-1 = 2, 120-REC-PARA WS-INT-1 = 3, 130-TRILER-PARA
ALTER ♦
Changes the transfer point specified in a GO TO statement
♦
The altered GO TO statement transfers control to the first statement of the paragraph named in the ALTER statement. ALTER procedure-name-1 TO PROCEED TO
procedure-name-2 ♦
procedure-name-1 must be that contains only one sentence: sentence: a GO TO without without the DEPENDING DEPENDING ON phrase
ALTER - Watch out ♦
Is an obsolete element and encourages the use of unstructured programming practices; it will be deleted from the next revision of the COBOL 85 Standard. The EVALUA EVALUATE TE statement provides similar functionality
Cognizant Academy
Ver 1.0
Page 60 of 149
Cobol
Control Flow Verbs
ALTER - Example
PROCEDURE DIVISION. ..... A1-PARA. GO TO A1-FIRST-TIME. A1-FIRST-TIME. INIT W-REC-COUNTER. ALTER A1-PARA TO A1-NEXT-TIME. A1-NEXT-TIME. ...... GO TO . is a GO TO form for ALTER ALTER and can c an be used in the above instead of GO TO A1FIRST-TIME. IF
IF condition-1 THEN { statement-1 ... NEXT SENTENCE } [ ELSE [ statement-2 ... NEXT SENTENCE ] ] [ END-IF ] ♦
NEXT SENTENCE SENTENCE means execution should move to stmt after the next separator period
♦
Never use NEXT SENTENCE and Period as IF terminator. It is not a good programming practice
statement-1, statement-2 Can be any one of the following:
An imperative statement A conditional statement An imperative statement followed by a conditional statement.
Cognizant Academy
Ver 1.0
Page 61 of 149
Cobol
Control Flow Verbs
EXAMPLE: IF (WS-NT91-CLT NOT EQUAL ‘99999’) AND WS-NT91-SEQ NOT NUMERIC Statements 1 ELSE Statement 2 END-IF Using conditional-names: -
IF C08W-ERR-OPEN-FLAG C08W-ERR-OPEN-FLAG GO TO 999-ERR-OPEN-PARA END-IF
CONTINUE ♦
Allows you to specify a no operation statement. It indicates that no executable instruction is present.
♦
Syntax :
CONTINUE ♦
It can be used anywhere a conditional statement or an imperative imperative statement can be used. It has no effect on the execution of the program.
CONTINUE - Example IF YEAR-IS-NOT-LEAP CONTINUE ELSE ADD 1 TO NO-OF-FEB-DAYS END-IF ♦
The above IF usage is preferred compared to IF NOT given below:
IF NOT YEAR-IS-NOT-LEAP ADD 1 TO NO-OF-FEB-DAYS END-IF
Cognizant Academy
Ver 1.0
Page 62 of 149
Cobol
Control Flow Verbs
EVALUATE
♦
Provides a shorthand notation for a series of nested IF statements.
♦
It can evalua evaluate te multiple multiple conditi conditions ons..
That That is, the IF statem statement ents s can be made made up of compou compound nd
conditions. ♦
Provides better readability.
♦
When a satisfiable WHEN is met, processing breaks off from the rest of the evaluate block
EVALUA EVALUATE TE subject-1 subjec t-1 [ALSO subject-2] subjec t-2] {{WHEN object-1 [ALSO object-2] imperative-statement-1 ] [WHEN OTHER imperative-statement-2] [ END-EVALUATE Where a subject is { Int-1 Literal –1 Expression TRUE FALSE} And an Object is { ANY condition-1 TRUE FALSE [NOT] { identifier-3 [ { THROUGH literal-3 THRU } { identifier-4 arith-exp-1} literal-4 arith-expr-2} ] } ♦
The execution of the EVALUA EVALUATE TE statement operates as if each selection subject and selection object were evaluated and assigned a numeric or nonnumeric value, a range of numeric or nonnumeric values, or a truth value
♦
The execution of the EVALUA EVALUATE TE statement then proceeds as if the values assigned to the selection subjects and selection objects were compared to determine whether any WHEN phrase satisfies the set of selection subjects. This comparison proceeds a s follows:
Cognizant Academy
Ver 1.0
Page 63 of 149
Cobol
Control Flow Verbs
1. Each selecti selection on object withi within n the set of selection selection objects objects for for the first WHEN WHEN phrase phrase is compared compared to the selection subject having the same ordinal ordinal position within the set of selection selection subjects. One of the following conditions must be satisfied if the comparison is to be satisfied: a. If the items items being compare compared d are assigned assigned numeric numeric or nonnumeric nonnumeric values, values, or a range range of numeric numeric or nonnumeric values, the comparison is satisfied if the value, or one value in the range of values, assigned to the selection object is equal to the value assigned to the selection subject, according to the rules for comparison. b. If the items items being compare compared d are assigned assigned truth-val truth-values, ues, the compari comparison son is satisfied satisfied if the the items items are assigned identical truth-values. c. If the selection selection object object being compared compared is specified specified by the word word ANY, the comparison comparison is always always satisfied, regardless of the value of the selection subject. 2. If the above above comparison comparison is satisfi satisfied ed for every select selection ion object object within within the set of selecti selection on objects objects being compared, the WHEN phrase containing that set of selection objects is selected as the one satisfying the set of selection subjects. 3. If the above above comparison comparison is not satisf satisfied ied for every every selection selection object object within within the set of of selection selection objects objects being compared, that set of selection objects does not satisfy the set of selection subjects. 4. This procedur procedure e is repeated repeated for subsequent subsequent sets sets of selection selection objects objects in the order order of their their appearance appearance in the source program, until either a WHEN phrase satisfying the set of selection subjects is selected or until all sets of selection objects are exhausted.
Cognizant Academy
Ver 1.0
Page 64 of 149
Cobol
Control Flow Verbs
Example 1
EVALUA EVALUATE TE proc-type proc-t ype ALSO cust-type WHEN 1 ALSO 1 MOVE 1 TO RESULT WHEN 3 ALSO 1 THRU 2 MOVE 2 TO RESULT WHEN 2 ALSO 1 MOVE 3 TO RESULT WHEN OTHER MOVE 0 TO RESULT END-EVALUATE In this example subject of Evaluation is an Expression. Depending on these values the control passes to the corresponding WHEN. Example 2
EVALUATE TRUE WHEN l-VALUE < 100 MOVE 1 TO RESULT WHEN l-VALUE < 1000 MOVE 2 TO RESULT WHEN l-VALUE < 10000 WHEN OTHER MOVE 0 TO RESULT END-EVALUATE In this example, the subject is TRUTH value. Depending Depen ding on the values the WHEN phrase satisfying the TRUTH value is executed. If a WHEN does not have a associated imperative statement it is a do-nothing condition (same as coding CONTINUE)
PERFORM ♦
The PERFORM statement transfers control explicitly to one or more procedures and implicitly returns control to the next executable statement after execution of the specified procedure(s) is completed.
♦
An out-of-line PERFORM statement (Procedure-name-1 is specified).
♦
An in-line PERFORM statement statement (Procedure-name-1 is omitted). An in-line PERFORM statement statement must be delimited by the END-PERFORM END-PERFORM phrase.
Cognizant Academy
Ver 1.0
Page 65 of 149
Cobol ♦
Control Flow Verbs
The in-line and out-of-line PERFORM PERFORM statements statements cannot be combined. For example, if procedurename-1 is specified, imperative-statement-1 and the END-PERFORM phrase must not be specified.
♦
Executes group of consecutive statements written inline (called INLINE PERFORM) or elsewhere (called OUT-OF-LINE PERFORM) in a program
♦
Has four formats
♦
Departs from normal sequence of execution and implicit return to next statement after completion
PERFORM (Basic)
PERFORM { proc-name1[{ THRU proc-name2 THROUGH } ] imp-statement-1 END-PERFORM } ♦ Example 1 (Out-of-line) PERFORM PARA-1 THRU PARA-2 In this example the execution of PERFORM statement will start with execution of first statement in PARA-1 and ends with execution of last statement in PARA-2. PARA-2. All the paragraphs in between these 2 paragraphs will be executed. And then control returns to the statement next to the perform statement. This transfer of control occurs implicitly ♦
Example 2 (Inline)
PERFORM MOVE 1 TO FLAG-1 MOVE 2 TO FLAG-2 END-PERFORM In the above example the control is not transferred anywhere. This will execute the statements within the perform statement. This perform is called inline perform statements which does not contain any section name or paragraph name. This perform statement should end with an END-PERFORM statement
PERFORM - Overlap Rules ♦
When the performed procedures executes another PERFORM PERFORM the procedures associated with the 2nd level PERFORM PERFORM must be totally totally included included in or totally excluded from the procedures procedures of the first level PERFORM statement.
Cognizant Academy
Ver 1.0
Page 66 of 149
Cobol ♦
Control Flow Verbs
Two or more such active PERFORM must not have a common exit.
PERFORM (TIMES option) PERFORM { proc-name1 [THRU proc-name2] { id-1 TIMES int-1} { id-1 init-1 } TIMES imp-stmt-1 END-PERFORM } PERFORM (TIMES option) - Rules ♦
Once the perform statement is initiated any changes to the id-1 will have no effect on the nbr of times the para is to be executed
♦
If identifier-1 is zero or a negative number at the time the PERFORM statement is initiated, control passes to the statement following the PERFORM statement.
PERFORM (TIMES) Example
PERFORM B1-PROCESS THRU B1-PROCESS-EXIT 10 TIMES In this example the number of times perform statement is going to be executed is predetermined. Hence this perform statement will be executed 10 times.
PERFORM I-CNT TIMES WRITE OUT-REC OUT-REC FROM I-ERR-REC (I-CNT) SUBTRACT 1 FROM I-CNT END-PERFORM In this example the number of times the perform statement is to be executed is not predetermined. It depends on value of the variable I-CNT. I-CNT. If I-CNT is 0 or negative, this perform statement is not all executed
PERFORM (UNTIL option) PERFORM { proc-name1[THRU proc-name2] until-phrase imp-statement-1 until-phrase END-PERFORM }
Cognizant Academy
Ver 1.0
Page 67 of 149
Cobol
Control Flow Verbs
♦
until-phrase UNTIL condition WITH TEST { BEFORE AFTER } ]
♦
In the UNTIL phrase format, the procedure(s) referred to are performed until the condition specified by the UNTIL phrase is true. Control is then passed to the next executable statement following the PERFORM statement.
♦
Here the condition is tested before only at the beginning of each execution by default
♦
But this default is overridden by TEST AFTER phrase. If the TEST AFTER phrase is specified, the statements to be performed are executed at least once before the condition is tested (corresponds to DO UNTIL).
♦
In either case, if the condition is true, control is transferred to the next executable statement following the end of the PERFORM statement. statement. If neither the TEST TEST BEFORE BEFORE nor the TEST AFTER phrase is specified, the TEST BEFORE phrase is assumed.
Ente r
True E XIT
Condition
False
Executable statements in the perform paragraph
Fig 8.1 Flow chart for Perform..Until
Cognizant Academy
Ver 1.0
Page 68 of 149
Cobol
Control Flow Verbs
PERFORM (UNTIL) Example
MOVE 10 TO I-CNT PERFORM UNTIL I-CNT = ZERO WRITE OUT-REC OUT-REC FROM I-ERR-REC (I-CNT) SUBTRACT 1 FROM I-CNT END-PERFORM In the above example, the WRITE and SUBTRACT statements will be executed until the I-CNT becomes zero. Here perform will be executed 10 times. PERFORM (VARYING) PERFORM { proc-name1[THRU proc-name2] varying-phrase after-phrase varying-phrase imp-stmt-1 END-PERFORM }
varying-phrase [ WITH TEST {BEFORE AFTER } ] VARYING { id-1 FROM { id-2 lit-1 Inx-nm1 } inx-nm-2} BY { id-3 UNTIL cond-1 lit-2 } ♦
after-phrase ( AFTER { id-4 FROM { id-5 lit-1 inx-nm1 } inx-nm-2} BY { id-6 UNTIL cond-2 lit-2 } ) ... ♦
♦
After-phrase provides for varying more than one identifier
♦
If any of the operands specified in cond-1 or cond-2 is subscripted or reference modified, the subscript or reference-modifier is evaluated each time the condition is tested.
Cognizant Academy
Ver 1.0
Page 69 of 149
Cobol ♦
Control Flow Verbs
When TEST BEFORE BEFORE is indicated, all specified conditions are tested before the first execution, and the statements to be performed are executed, ifif at all, only when all specified tests tests fail. When TEST AFTER is indicated, the statements to be performed are executed at least once, before any condition is tested.
♦
Changing the values of identifiers and/or index-names in the VARYING, FROM, and BY phrases during execution changes the the number of times the the procedures are executed.
♦
EXAMPLE:PERFORM PROC1 THRU PROC2 VARYING I FROM 1 BY 1 UNTIL I > 50 AFTER J FROM 1 BY 1 UNTIL J > 10
In the above example the PROC-1 to PROC-2 will be executed 500 times. First with I as 1 and J varying from 1 to 10 in step of 1, then I as 2 and again J varying from 1 to 10 and so on. Every time I changes value, J must vary from 1 to 10. Each time the loop varying J is completed, J is initialized before changing the value of I. Thus after this perform statement is executed, value of I will 51 and that of J will 1 and not 11.
Cognizant Academy
Ver 1.0
Page 70 of 149
Cobol
Control Flow Verbs
Ente
Set Identifier-1 to initial value
True Cond1
E xit
False
Execute the imperative statement in the perform paragraph
Add increment to indentifier-1
Figure 8.2 Flow Chart for Perform…varying… TEST BEFORE
Cognizant Academy
Ver 1.0
Page 71 of 149
Cobol
Control Flow Verbs Ente
Set Id-1 & id-4 to their respective initial values
True Cond1
E xit
False True Cond2
False Execute the imperative statement in the perform paragraph
Add increment (id-6) to id-4
Set id-4 to initial value
Add increment (id-3) to id-1
Figure 8.3 Flow Chart for Perform…varying….After….with TEST BEFORE
Cognizant Academy
Ver 1.0
Page 72 of 149
Cobol
Control Flow Verbs
EXIT ♦
Provides a return mechanism for the Perform statement having Exit para as the last paragraph
♦
The EXIT statement provides a common end point for a series of paragraph.
♦
Must be preceded by a paragraph name
♦
Must be the only statement in the paragraph
♦
Falls thru if there is no associated Perform
♦
Provides a common exit point for a series of paragraphs (by executing a GO TO PARA-EXI PARA-EXIT T in the paragraph)
EXIT - Example
PROCEDURE DIVISION. .... PERFORM B1-PROCESS UNTIL A > 5. ..... B1-PROCESS. …. ADD 1 TO A. IF NOT-VALID-ACTI NOT-VALID-ACTION ON PERFORM B1-PROCESS-EXIT ... B1-PROCESS-EXIT EXIT.
Cognizant Academy
Ver 1.0
Page 73 of 149
Cobol
Exercises
EXERCISES 1. Rewrite Rewrite the following following IF statemen statement-usi t-using ng condition condition names. Also indicate indicate how the the condition condition names are to be defined in the DATA DIVISION. IF MARKS >= 90 MOVE “O” TO GRADE ELSE IF MARKS >= 75 MOVE ‘E’ TO GRADE ELSE IF MARKS >= > = 60 MOVE ‘D’ TO GRADE ELSE IF MARKS >= 50 MOVE ‘C’ TO GRADE ELSE IF MARKS NOT > 40 MOVE ‘B’ TO GRADE ELSE MOVE ‘F’ TO GRADE 2. The following is the information about the patient file Description
Length
N a me
30
Sex
1 (Male – M, Female - F)
Age
3
Height
5 with 2 decimal places
Weight
3
A paragraph named PROCESS-PARA PROCESS-PARA needs to be executed only if the patient is Male whose age is between 25 and 45 yrs and Height is 160 – 175 cms and weight is 60 – 75 kgs.
Write Write the necessary nec essary IF statement using suitable condition con dition names. Also write the record description entry for the patient file
3. Write Write the evaluate statement statement for the following following When the account code is 100, then the rate of o f interest is 10 % . If the account accoun t code is 110, then rate of interest is 9.5%. If the account code is 120, rate of interest is 12%, if the account-code is 130, then rate of interest is 11.5% for all other account codes the rate of interest is 4.5%.
Cognizant Academy
Ver 1.0
Page 74 of 149
Cobol
Non-Numeric Data Manipulation
9. Non-Numeric Data manipulation manipulation ♦
Move data items - MOVE
♦
Count and replace data items - INSPECT
♦
Join data items - STRING
♦
Split data items - UNSTRING
♦
Initialize variables - INITIALIZE
♦
Manipulate addresses with pointer data items - SET
Data Movement and Sub-string Handling ♦
Group moves
♦
Elementary moves
♦
Move corresponding
♦
Format conversion for numeric data types
♦
Sub-string operation (Move by reference)
MOVE MOVE { id-1 TO id-2 ... lit-1 } ♦
All identifiers can be either group or elementary items.
♦
The data in the sending item is moved into the data item referenced by each identifier-2 in the order in which it is specified.
Alphanumeric or Alphanumeric-Edited: ♦
An elementary move is one in which the receiving item is an elementary item, and the sending item is an elementary item or a literal. Any necessary conversion of data from one form of internal internal representation to another takes place during the move, along with any specified editing in, or deediting implied by, the receiving item.
♦
If the size of the sending item is greater than the size of the receiving item, excess characters on the right are truncated after the receiving item is filled.
♦
If the sending item has an operational sign, the the unsigned value is used. If the operational sign occupies a separate character, that character is not moved, and the size of the sending item is considered to be 1 less character than the actual size.
Cognizant Academy
Ver 1.0
Page 75 of 149
Cobol
Non-Numeric Data Manipulation
Numeric or Numeric-edited: ♦
If the receiving item is signed, the sign of the sending item is placed in the receiving item, with any necessary sign conversion. If the sending item is unsigned, a positive operational operational sign is generated for the receiving item.
♦
If the receiving item is unsigned, the absolute value of the sending item is moved, and no operational sign is generated for the receiving item.
♦
When the sending item is alphanumeric, the data is moved as if the sending item were described as an unsigned integer. integer.
♦
When the sending item is floating-point, the data is first converted to either a binary or internal decimal representation and is then moved.
♦
De-editing allows moving a numeric-edited data item into a numeric or numeric-edited receiver. receiver. The compiler accomplishes this by first establishing the unedited value of the numeric-edited item (this value can be signed), then moving the unedited numeric value to the receiving numeric or numericedited data item.
MOVE {CORRESPONDING CORR} id-1 TO id-2 ♦
Both identifiers identifiers must be group items
♦
Both identifiers following the keyword CORRESPOND CORRESPONDING ING must name group items. In this discussion, these identifiers are referred to as identifier-1 and identifier-2.
♦
A pair of data items (subordinate items), items), one from identifier-1 and one from identifier-2, correspond if the following conditions are true:
♦
In a MOVE statement, at least one of the data items is an elementary item, and the move is permitted by the move rules.
♦
The subordinate items are not identified by the keyword FILLER.
♦
Neither identifier-1 nor identifier-2 identifier-2 is described as a level 66, 77, or 88 item, nor is either described as a USAGE IS INDEX item. Neither identifier-1 nor identifier-2 identifier-2 can be reference-modified.
♦
The subordinate items do not include a REDEFINES, RENAMES, OCCURS, or USAGE IS INDEX clause in their descriptions.
♦
However, However, identifier-1 and identifier-2, they can contain or be subordinate to items containing a REDEFINES REDEFINES or OCCURS clause in their descriptions.
♦
Neither identifier-1 nor identifier-2 nor the two subordinate items are described as USAGE IS POINTER items.
♦ ♦
Identifier-1 and/or identifier-2 can be subordinate to a FILLER item. Valid and Invalid Elementary Moves
Cognizant Academy
Ver 1.0
Page 76 of 149
Cobol
Sending Item
Alphabetic and SPACE Alphanume ric(2) Alphanume ric-Edited Numeric Integer and ZERO(5) Numeric Noninteger(6) NumericEdited
Non-Numeric Data Manipulation
Receiving Item Alpha Numeric numeric Edited Yes No
Alphab etic
Aplhanu meric
Yes
Yes
Yes
Yes
Yes
Yes(3)
Yes(3)
Yes
Yes
Yes
No
No
No
Yes
Yes
Yes
Yes
No
No
No
Yes
Yes
No
Yes
Yes
Numeric Edited
No
Yes
Yes
Table 8.2 Valid Sending and Receiving datatypes of move statement 1. Incl Includ udes es DBC DBCS S data data ite items ms.. 2. Includ Includes es nonnum nonnumeri eric c lit litera erals. ls. 3. Figurativ Figurative e constants constants and nonnumeric nonnumeric literals literals must must consist consist only of numeric numeric characters characters and will be treated as numeric integer fields. 4. Figurativ Figurative e constants constants and nonnumeric nonnumeric literals literals must must consist consist only of numeric numeric characters characters and will be treated as numeric integer fields. fields. The ALL ALL literal cannot be used as a sending item. 5. Includ Includes es integ integer er numer numeric ic lite literal rals. s. 6. Includes Includes non-int non-integer eger numeri numeric c literals literals (for (for exampl example, e, 3.142). 3.142). 7. Includes floating-point floating-point literals, literals, external external floating-point floating-point data items (USAGE (USAGE DISPLA DISPLAY), Y), and internal floating-point data items (USAGE COMP-1 or USAGE COMP-2). 8. Includes Includes DBCS DBCS data-ite data-items, ms, DBCS DBCS liter literals, als, and and SPACE SPACE..
Cognizant Academy
Ver 1.0
Page 77 of 149
Cobol
Non-Numeric Data Manipulation
Move - Reference modification ♦
Reference modification defines a data item by specifying a leftmost character and optional length for the data item.
♦
Syntax is Dataname-1(character position:length)
♦
Leftmost-character-position: - must be an arithmetic expression. expression. The evaluation evaluation of leftmostleftmost-
character-position must result in a positive nonzero integer that is less than or equal to the number of characters in the data item referenced by data-name-1. ♦
length ♦
Must be an arithmetic expression.
♦
The sum of leftmost-character-position leftmost-character-position and length minus the value one must be less than or equal to the number of characters in in data-name-1.
If length is omitted, than the length used will be
equal to the number of characters in data-name-1 data-name-1 plus one minus leftmost-character-position. leftmost-character-position. The evaluation of length must result in a positive nonzero integer.
Example 77 name pic x(25). 77 first-name first-name pic x(10). 77 last-n last-name ame pic x(15) x(15).. MOVE name(1:10) MOVE name(11:) ♦
TO first-name TO last-name
Move - Rules ♦
Pointer and Index variables not allowed - In MOVE CORR - ignored
♦
Length, Sub-string, Reference modification evaluation - For source variable only once - before the move to the 1st target target variable - For each target target variable before before the move •
♦
MOVE a(b) TO b, c(b)
Occurs depending on Clause object (ODO) location - When not in same group •
ODO object value decides the length
•
Set value prior to MOVE
Cognizant Academy
Ver 1.0
Page 78 of 149
Cobol
Non-Numeric Data Manipulation
- When in same group •
When no non-subordinate
•
When there are non-subordinates
- Updating ODO object object with complex structures
INITIALIZE ♦
Sets selected categories of data fields to predetermined values.
♦
It is functionally equivalent to one or more MOVE
♦
Can be at - Group level - Elementary level
INITIALIZE ( id-1 [REPLACING {ALPHABETIC ALPHANUMERIC DATA NUMERIC ALPHANUMERIC-EDITED NUMERIC-EDITED } BY {id-2 lit-1 }] ) ... ♦
When id-1 specifies a group item only those items that belong to the category denoted by the REPLACING REPLACING phrase will be initialized by the value denoted by id-2/lit-1
♦
Example 01 A. 02 02 02 02
A1 A2 A3 A4
PIC 9(5). PIC X(4). PIC 9(3). PIC Z(3)9.99.
INITIALIZE A REPLACING NUMERIC DATA BY 50 In the above example on A1 and A3 A3 will be initialized to 50. INITIALIZE A. In the above statement A1 and A3 will be initialized to zeroes and A2 and A4 will be initialized to spaces. ♦
Filler will not be affected by INITIALIZE statements
♦
If any group denoted by id-1 contains a data item described with REDEFINES REDEFINES clause, then the data items sub ordinate to it will not be initialised.
Cognizant Academy
Ver 1.0
Page 79 of 149
Cobol ♦
Non-Numeric Data Manipulation
Example 1
A. 2 A1 PIC 9(5). 02 A2 PIC X(10). 02 B REDEFINES A2. 0 3 B1 PIC 9(4). 0 3 B2 PIC 9(4)V99. INITIALIZE A In the above example A1 will be zeroes A2 will be filled with spaces and not n ot zeroes.
INITIALIZE B This will fill B1 and B2 with zeroes INITIALIZE - Rules ♦
Category of Id-2 should be compatible that of CORR REPLACING
♦
Whether identifier-1 references an elementary or group item, all operations are performed as if a series of MOVE statements had been written, each of which had an elementary item as a receiving field.
♦
Same Category can’t be repeated
♦
If the REPLACING phrase is specified: ♦
If identifier-1 references a group item, any elementary item within the data item referenced by identifier-1 is initialized only if it belongs to the category specified in the REPLACING REPLACING phrase.
♦
If identifier-1 references an elementary item, that item is initialized only if it belongs to the category specified in the REPLACING REPLACING phrase.
♦
All such elementary elementary receiving receiving fields, including all occurrences occurrences of affected, with the following
exceptions:
♦
Index data items
♦
Data items defined with USAGE IS POINTER
♦
Elementary FILLER data items
Cognizant Academy
table items within the group, are are
Ver 1.0
Page 80 of 149
Cobol ♦
Non-Numeric Data Manipulation
Items Items that that are subord subordina inate te to identi identifie fier-1 r-1 and contai contain n a REDEF REDEFINE INES S clause clause,, or any items items subordinat subordinate e to such an item. (However (However,, identifier-1 identifier-1 can contain a REDEFINES REDEFINES clause clause or be subordinate to a redefining item.)
♦
The areas referenced by identifier-1 are initialized in the order (left to right) of the appearance of identifier-1 in the statement. Within a group receiving field, affected elementary items are initialized in the order of their definition within the group.
♦
SPACE is implied source for
- Alpha, Alpha-numeric Alpha-numeric and Alpha-numeric Alpha-numeric edited ♦
ZERO is implied source for - Numeric and Numeric edited edited
♦
For Group initialize the following will not participate - Index variables - Pointer variables - Filler - Redefines - Elementary items items that are not of category category mentioned in REPLACING
INITIALIZE - Examples
INITIALIZE id-1 Length of Id-1 9(5) X(5) 99XX9
Before 123 4 5 AB123 12AB3
After 000 00 Bbbbb Bbbbb
INSPECT ♦
Specifies that characters, or groups of characters in a data item are to be - Counted (tallied) - 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.
Cognizant Academy
Ver 1.0
Page 81 of 149
Cobol
Non-Numeric Data Manipulation
♦
CONVERTING CONVERTING is a special form of replacing
♦
In the following list of comparison rules, the TALLYING and REPLACING phrases are the items being compared: 1.
When When both both the TALL TALLYI YING NG and REPLA REPLACI CING NG phrases phrases are specif specified ied,, the INSPE INSPECT CT stateme statement nt is executed as if an INSPECT TALLYING statement were specified, immediately followed by an INSPECT REPLACING statement.
2.
The first first compara comparand nd is compared compared with with an equal equal number number of leftmo leftmost st contiguou contiguous s characters characters in in the inspec inspected ted item.
The comparan comparand d matche matches s the inspect inspected ed charac character ters s only only if both both are equal, equal,
character-for-character. 3.
If no match match occurs occurs for the first first compara comparand, nd, the compar compariso ison n is repea repeated ted for each each succes successiv sive e comparand until either a match is found or all comparands have been acted upon.
4.
If a match atch is found ound,, tally allyiing or repl replac aciing takes akes plac place, e, as desc descrribed ibed in the the fol followi lowing ng TALLYING/REP ALLYING/REPLACING LACING phrase descriptions. In the inspected item, the first character following the rightmost rightmost matching character is now considered to be in the leftmost character position. position.
The
process described in rules 2 and 3 is then repeated. 5.
If no match match is found, then, then, in the inspect inspected ed item, the the first charact character er following following the the leftmost leftmost inspected inspected character character is now considered considered to be in the leftmost leftmost character character position. position. The process process described in rules 2 and 3 is then repeated.
6.
If the the CHAR CHARAC ACTE TERS RS phra phrase se is spec specif ifie ied, d, an impl implie ied d 1-ch 1-char arac acte terr comp compar aran and d is used used in the the process process described described in rules 2 and 3. The implied implied character character is always considered considered to match the inspected character in the inspected item.
7.
The The actions actions taken taken in rules rules 1 throug through h 6 (defin (defined ed as the comparis comparison on cycle) cycle) are repeat repeated ed until until the rightmost character in the inspected item has either been matched or has been considered as being in the leftmost character character position. Inspection is then terminated.
♦
Format 1 INSPECT id-1 TALLYING id-2 FOR {CHARACTER ALL {id-3 lit-1} LEADING {id-3 lit-1}} [{BEFORE AFTER} INITIAL {id-4 lit-2}]
Cognizant Academy
Ver 1.0
Page 82 of 149
Cobol ♦
Non-Numeric Data Manipulation
Format 2 INSPECT id-1
REPLACING {CHARACTER ALL {id-2 lit-1} LEADING { id-2 lit-1}}
BY {id-3 lit-2 } [{BEFORE AFTER} INITIAL {id-4 lit-3}] ♦
Format 3 INSPECT id-1 CONVERTING {id-2 lit-1} TO {id-3 lit-2} [{BEFORE AFTER} INITIAL {id-4 lit-3}]
INSPECT - Examples
77 countr PIC 9 VALUE ZERO. 01 da data-1 PIC X(6). INSPECT data-1 TALLYING TALLYING countr FOR CHARACTERS AFTER INITIAL "S" REPLACING ALL "A" BY "O" DATA-1 DATA-1 COUNTR COU NTR DATA-1 DATA-1 Before After After ANSELM SACKET PASSED
3 5 3
ONSELM SOCKET POSSED
INSPECT data-1 REPLACING CHARACTERS BY ZEROS BEFORE INITIAL QUOTE. DATA-1 DATA-1 COUNTR COU NTR DATA-1 DATA-1 Before After After ANS”LM SACK”T
Cognizant Academy
0 0
000”LM 0000”T
Ver 1.0
Page 83 of 149
Cobol
Non-Numeric Data Manipulation
INSPECT - Examples INSPECT data-1 CONVERTING ”abcdefghijklmnopqrstuvwxyz" TO "ABCDEFGHIJKLMNOPQRSTUVWXYZ" AFTER INITIAL "/" BEFORE INITIAL "?"
Before
After
a/five/?six r/Rexx/RRRr zfour?inspe
a/FIVE/?six r/REXX/RRRR zfour?inspe
STRING ♦
Strings together the partial or complete contents of two or more data items or literal into one single data item.
♦
One STRING statement can be written instead of a series of MOVE statements.
♦
Process is called concatenation
STRING {id-1 lit-1} ... DELIMITED BY {id-2 lit-2 SIZE} INTO id-3 [WITH POINTER id-4 ] [ON OVERFLOW imperative stmt-1] [NOT ON OVERFLOW imperative stmt-2] [END-STRING] [END-STRING ] STRING - Example
77 77 77 77
FIELD-1 FIELD-2 FIELD-3 FIELD-4
PIC PIC PIC PIC
X(4) X(6) X(9) X(14)
VALUE VALUE VALUE VALUE
‘ABCD’. ‘MA IN ‘. ‘121,34,56’. SPACES.
STRING FIELD-1 FIELD-2 FIELD-3 DELIMITED BY ‘ ‘, ‘,’ INTO INTO FIELD-4 FIELD-4 = ABCDMA121bbbbb
Cognizant Academy
Ver 1.0
Page 84 of 149
Cobol
Non-Numeric Data Manipulation
In the above example, FIELD-1 does not contain any delimiters, all 4 characters are moved to FIELD-4 First 2 characters of FIELD-2 are moved to FIELD-4 as third character is the delimiter First 3 characters of FIELD-3 are moved to FIELD-4 as 4th character is the delimiter STRING - Rules ♦
Receiving fields must not be
- Edited field - With Justified clause - With reference reference modification modification ♦
Pointer variable must be
- Elementary and Numeric Numeric - Large enough to hold max length length of receiving field field ♦
ON OVERFLOW OVERFLOW executed when pointer Value Value <= 0 or exceeds max length of receiving field
UNSTRING ♦
Causes contiguous data in a sending field to be separated and placed into multiple receiving fields:
- Number of characters characters placed in each receiving field - Count of the total total number of characters characters transferred - Special action when all the receiving receiving fields are filled before the end of the sending sending item ♦
Useful to convert display format data to compact form
UNSTRING id-1 [DELIMITED BY ALL { id-2 lit-1 } [OR ALL {id-3 lit-2} ...]] INTO ( id-4 [DELIMITER IN id-5] [ COUNT IN id-6] ) ... [WITH POINTER IN id-7 ] [TALLYING IN id-8 ] [ON OVERFLOW imperative stmt-1] [NOT ON OVERFLOW imperative stmt-2] [END-UNSTRING ]
Cognizant Academy
Ver 1.0
Page 85 of 149
Cobol
Non-Numeric Data Manipulation
UNSTRING - Example
FULL-NM = ‘EDISON, THOMAS ALVA ’ UNSTRING FULL-NM DELIMITED DELIMIT ED BY ‘,’ OR SPACE SPACE INTO LAST-NM COUNT IN LAST-NM-CNT FIRST-NM COUNT IN FIRST-NM-CNT MID-NM COUNT IN MID-NM-CNT LAST-NM = ‘EDISON’ ‘EDISON ’ LAST-NM-CNT = 6 FIRST-NM= ‘THOMAS’ FIRST-NM-CNT = 6 MID-NM MID- NM = ‘ALVA ‘ALVA’ MID-NM-C MID- NM-CNT NT = 4 UNSTRING - Rules ♦
If the DELIMITED BY phrase is not specified, the number of characters examined is equal to the size of the current data receiving field.
♦
If the POINTER phrase - Is not specified specified an implicit implicit value of 1 is assumed
♦
If specified, the source field is examined from the relative character position specified by the value in the pointer field.
SET SET - CONDITION NAME SET cond-name1 ... TO TRUE ♦
The value associated with a cond-name1 is placed in its conditional variable
♦
If more than one Value is defined for the cond-name1 then the 1st is used
♦
If multiple condition-names are specified, the results are the same as if a separate SET statement had been written for each condition-name in the same order in which they are specified in the SET statement.
SET - Condition Name
Cognizant Academy
Ver 1.0
Page 86 of 149
Cobol
Non-Numeric Data Manipulation
Example
77 I-EOF-FLAG PIC x. 88 C-EOF C-EOF VALUE ‘Y’. SET C-EOF TO TRUE (I-EOF-FLAG will have the value ‘Y’ after the execution of the SET statement) 77 I-ACTION-FLAG PIC X. 88 C-ADD VALUE ‘A’ ‘A’ space. 88 C-DEL VALUE ‘D’. 88 C-MOD VALUE ‘M’. SET C-ADD TO TRUE (Will get value ‘A’ - first lit in value clause) SET - Pointer Data SET { id-1 ADDRESS OF id-2 } ... TO { ADDRESS OF OF identifier-3 id-4 NULL NULLS } ♦
id-1 and id-4 must be POINTERs
♦
id-2 and id-3 must be 01 or 77 levels in LINKAGE
♦
NULL, NULLS sets the receiving field to contain the value of an invalid address.
SET - Pointer data Example
77 PTR-FIRST USAGE IS POINTER. LINKAGE SECTION. 01 SALARY-REC. 05 PTR-NEXT-REC PTR-NEXT-REC POINTER. 05 NAME PIC X(20). 05 DEPT PIC 9(4). 05 SALARY PIC 9(6). PROCEDURE DIVISION USING SALARY-REC. SET PTR-FIRST TO ADDRESS OF SALARY-REC DISPLAY NAME DEPT SALARY IF PTR-NEXT-REC NOT = NULL SET ADDRESS OF SALARY-REC TO PTR-NEXT-REC END-IF
Cognizant Academy
Ver 1.0
Page 87 of 149
Cobol
Non-Numeric Data Manipulation
SET – Indexes
SET index-name-3
♦
UP BY identifier-3 DOWN BY integer-2
When this form of the SET statement is executed, the value of the receiving field is increased (UP BY) or decreased (DOWN BY) by a value that corresponds to the value in the sending field.
♦
The receiving field can be specified by index-name-3. index-name-3. This index-name value both before and after the the SET statement execution must correspond to the occurrence numbers in an associated table.
♦
The sending field can be specified as identifier-3, which must be an elementary integer data item, or as integer-2, which must be a nonzero integer.
♦
When the Format 2 SET statement is executed, the contents of the receiving field are increased (UP BY) or decreased (DOWN BY) by a value that corresponds to the number of occurrences represented by the value of identifieridentifier-3 3 or integer-2. integer-2. Receiving Receiving fields fields are acted upon in the left-to-r left-to-right ight order in which they are specified. The value of the incrementing incrementing or decrementing field at the beginning of SET SET statement execution is used for all receiving fields.
Cognizant Academy
Ver 1.0
Page 88 of 149
Cobol
Sub-Program
10. Sub-Program CALL ♦
Transfers Transfers control from one object program to another within the run unit.
♦
Called program starts executing from: - Top of program - ENTRY label (not good programming programming practice)
♦
Transfer control methods
- Call nested program program - Static call - Dynamic call ♦
Parameters to called program: - By reference - By content
♦
Use RETURN-CODE RETURN-CODE special register to pass return codes
♦
Return of control depends on the termination stmt issued by the called program - Stop run unit - Return to called called program
CALL { id-1 lit-1} [ USING { [BY REFERENCE ] { id-2 file-name-1 ADDRESS OF id-3} ... BY CONTENT { [LENGTH OF] id-2 ADDRESS OF id-3 lit-1} ... } ... ] [ON {OVERFLOW imperative stmt-1] EXCEPTION } [ NOT ON EXCEPTION imperative stmt-2] [END-CALL]
Cognizant Academy
Ver 1.0
Page 89 of 149
Cobol
Sub-Program
CALL - Examples
CALL ‘SUBPGM1’. CALL l-SUBPGM-1 USING l-PARM1 l-PARM1 l-PARM2. l-PARM2. CALL l-SUBPGM1 USING BY CONTENT l-PARM1 l-PARM2 BY REFERENCE l-PARM3. CALL - Calling pgm
WORKING-STORAGE SECTION. 77 l-su l-subp bpgm gm-1 -1 pic pic x(8 x(8)) valu valuee ‘SUB ‘SUBPG PGM1 M1’. ’. 01 l-parm1. 05 l-name 05 l-emp-no 01 l-parm2. 05 l-salary 05 l-hra 05 l-leave 01 l-parm3. 05 l-gross 05 l-deduct
pic x(30). pic 9(4). pic s9(9)v99 comp-3. pic s9(9)v99 comp-3. pic s9(2)v9 comp-3. pic s9(9)v99 comp-3. pic s9(9)v99 comp-3.
PROCEDURE DIVISION. .... CALL l-SUBPGM1 USING BY CONTENT l-PARM1 l-PARM1 l-PARM2 l-PARM2 BY REFERENCE REFERE NCE l-PARM3. l-PARM3. IDENTIFICATION DIVISION. PROGRAM-ID. 1-SUBPGM1. …
Cognizant Academy
Ver 1.0
Page 90 of 149
Cobol
Sub-Program
LINKAGE SECTION. 01 L-PARM3. 05 l-gross pic s9(9)v99 comp-3. 05 l-deduct pic s9(9)v99 comp-3. 01 L-PARM1. 05 l-name pic x(30). 05 ll-emp-no pic pic 9( 9(4). 01 L-PARM2. 05 l-salary pic s9 (9) v99 comp-3. 05 l-hra pic s9(9)v99 comp-3. 05 l-leave pic s9(2)v9 comp-3. PROCEDURE DIVISION USING L-PARM1 L-PARM1 L-PARM2 L-PARM3. L-PARM3.
CALL - Rules ♦
The correspondence of identifiers in the using clause of called and calling programs is positional
♦
File-name in using is only for QSAM files
♦
Address of option can be used only for Linkage variables with level 01 or 77
♦
Exception or Overflow cond occurs when the called program cannot be made available.
♦
Called program must not execute a CALL statement that directly or indirectly calls the calling program (Recursion not allowed)
CANCEL CANCEL { id-1 lit-1} ♦
Ensures that the next time the referenced subprogram is called it will be entered in its initial state.
♦
All programs contained in the Canceled program are also canceled.
♦
Same as executing an EXIT PROGRAM or GOBACK in the called subprogram if it possesses the INITIAL attrib.
Cognizant Academy
Ver 1.0
Page 91 of 149
Cobol
Sub-Program
ENTRY ENTRY lit-1 [USING id-1 ...] ♦
Establishes an alternate entry point
♦
Execution of the called program begins at the first executable stmt following the ENTRY stmt whose literal corresponds to the CALL stmt literal or identifier
♦
Not a recommended way of entering a program
Entry - Watch out ♦
Static calls to alternate entry points work without restriction.
♦
Dynamic calls to alternate entry points require: - NAME or ALIAS linkage editor control control statements. - NAME (ALIAS) (ALIAS) compiler option to generate link-edit ALIAS ALIAS card for each ENTRY statement. statement.
EXIT PROGRAM EXIT PROGRAM ♦
Specifies the end of a called program and returns control to the calling program
♦
When no CALL statement is active, control passes through the exit point to the next executable stmt
♦
When there is no next executable stmt in a called program, an implicit EXIT PROGRAM stmt is executed
♦
EXIT PROGRAM PROGRAM stmt in a called program with INITIAL attribute is equivalent to executing a CANCEL
♦
An EXIT PROGRAM executed in a main program has no effect.
STOP ♦
♦
STOP STO P {RUN {R UN lit-1} Halts execution of the program :
- Permanently (RUN option) - Temporarily (Lit-1 option) •
literal communicated to operator and execution suspended
Cognizant Academy
Ver 1.0
Page 92 of 149
Cobol
Sub-Program
•
Program execution is resumed only after operator intervention
♦
STOP RUN statement closes all files defined in any of the programs comprising the run unit.
GOBACK GOBACK ♦
Functions like: - EXIT PROGRAM PROGRAM statement when when coded in a called program - STOP RUN RUN statement when coded in a main program. program.
END PROGRAM END PROGRAM program-name . ♦
An END PROGRAM header terminates a nested program or separates one program from another in a sequence of programs.
♦
The program-name must be same as the program-name declared in the corresponding PROGRAM-ID paragraph.
♦
An END PROGRAM is optional for the last program in a sequence only if that program does not contain any nested source programs.
Cognizant Academy
Ver 1.0
Page 93 of 149
11. FILE FI LE OPERA OPE RATIONS TIONS OPEN OPEN { INPUT file-name1 ... OUTPUT file-name2 ... I-O file-name3 ... EXTEND file-name4 ...
} ...
♦
Opens the file for processing
♦
EXTEND is allowed only for sequential files (not for VSE)
♦
OUTPUT clears the file of its existing records
Open - File position indicator ♦
The successful execution of OPEN INPUT or OPEN OPEN I-O statement sets the file position indicator to - 1 for non-empty QSAM file file - For VSAM sequential and indexed indexed files, to the characters with with the lowest ordinal position in the collating sequence associated with the file. - For VSAM VSAM relative files, files, to 1.
OPEN - Extend Rules ♦
When the EXTEND is specified the file positioned immediately after the last record written in the file - For ESDS or RRDS RRDS file the added records are placed after the last existing existing records - For KSDS your add must have a record key ke y higher than the highest record in the file
CLOSE CLOSE file-name1 ... ♦
Closes the open file
♦
Terminates the file processing
♦
COBOL performs automatic automatic closing if not closed - At termination termination of run-unit run-unit - CANCEL command - Return from program with INITIAL INITIAL attribute
READ Format-1 - Sequential Read READ file-name-1 NEXT RECORD [ INTO identifier-1 ] [ AT END imperative-stmt-1] [ NOT AT END imperative-stmt-2 ] [ END-READ ] ♦
NEXT phrase is optional for SEQUENTIAL access mode & a must for DYNAMIC
♦
When the READ NEXT statement is the first statement to be executed after the OPEN statement on the file, the next record is the first record in the file
♦
USAGE:1. The sequenti sequential al read is used used when when the exact exact key value value is not known known and ifif we want to search search the vsam file for a particular key for processing. 2. This sequent sequential ial read is also also used when when Alterna Alternate te key is used as key to the the indexed indexed file. This This is because the alternate key may not be unique. 3. When we we need to to process process records records with with part of the key matchi matching, ng, we use use sequentia sequentiall read. read. For E.G, E.G, The key field of the EMP-MATER EMP-MATER file is Emp-no, Designation., date-of-joining, if we want to process all employees belonging to designation “Associates”, we use sequential read of the indexed file
Format-2 - Random read READ file-name-1 RECORD [ INTO identifier-1 ] [ KEY IS data-name-1 ] [ INVALID KEY imperative-stmt-3 ] [ NOT INVALID KEY imperative-stmt-4 ] [ END-READ ] ♦
Data-name-1 is either a RECORD KEY or ALTERNATE RECORD KEY of the Indexed file
♦
The result of the execution execution of a READ READ statement statement with the INTO phrase
is equivalent to the
application of the following rules in in the order specified: ♦
The execution of the same READ statement without the INTO phrase.
♦
The current record is moved from the record area to the area specified by identifier-1 according to the rules for the MOVE statement without the CORRESPONDING CORRESPONDING phrase. The size of the current record is determined by rules specified for the the RECORD clause. If the file description entry contains contains a RECORD IS VARYING VARYING clause, clause, the implied move is a group move. The implied MOVE statement does not occur if the execution of the READ READ statement was unsuccessful. Any subscripting or reference modification associated with identifier-1 is evaluated after the record has been read and immediately before it is moved to the data item. The record is available in both the record area and the data data item referenced by identifier-1.
♦
This format of READ is used when the ACCESS mode is either random or dynamic
♦
USAGE:- The random reading of indexed file is used when the key value for the file is exactly exactly known. The random read can be used in real time systems like Patient monitoring system in hospitals. Here there might be necessary to retrieve a particular patient’s record. The full key value for the Patient master file is known. Hence we use random read in this case. The random read of indexed file is faster.
READ Random - Indexed file ♦
Key of reference :
- Data name specified in KEY phrase - The prime RECORD KEY data name if KEY phrase not specified ♦
The KEY IS phrase phrase can be specified only for indexed files. Data-name-1 must identify identify a record key associated with file-name-1
♦
When dynamic access is specified, this key of reference is used for subsequent executions of sequential READ
♦
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 indicator is positioned to this record, which which is then made available. If no record can be so identified, an INVALID INVALID KEY condition 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 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.
♦
KEY Phrase: - When the KEY phrase is specified, data-name becomes the key of reference for this request. When dynamic access is specified, this key of reference reference is used for subsequent executions of sequential READ statements, until a different key of reference is established.
READ Random - Relative file ♦
Execution of a Format 2 READ statement reads the record whose relative record number is contained in the RELATIVE KEY data item,
♦
The KEY phrase must not be specified
Multiple Record Processing If more than one record description entry is associated with file-name-1 in the File Description, these records automatically share the same storage area; that is, they are implicitly redefined. After a READ statement is executed, only those data items within the range of the current record are replaced; data items stored beyond that range are undefined. The below example example illustrates this concept. If the range of the current record exceeds the record description entries for file-name-1, the record is truncated on the right to the maximum size. In either of these cases, the READ statement is successful and an I-O status (04) is set indicating a record length Conflict has occurred.
EXAMPLE: The FD entry is: FD INPUT-FILE INPUT-FILE LABEL RECORDS OMITTED. 01 RECORD-1 PICTURE X(30). 01 RECORD-2 PICTURE X(20). Contents of RECORD-1 when READ statement is executed: ABCDEFGHIJKLMNOPQRSTUVWXYZ1234 When the next record from the file is read into RECORD-2, Contents of record being read in RECORD-2: 01234567890123456789
But since the record description contains two 01 levels and it’s a variable length file Contents of record area after second READ is executed: 01234567890123456789?????????? The last 10 characters of the record area is undefined. I.e. This storage area can hold any characters depending on the sequence of reads and any process done inside the program using RECORD-1. In the above example, exa mple, assume there was no processing then the last 10 bytes would contain “UVWXYZ1234”. But this area cannot be accessed, when we use RECORD-2 layout because this is implicitly redefined item More on File Position Indicators ♦
The file position indicator is a conceptual entity used to facilitate exact specification of the next record to be accessed within a given file during certain certain sequences of input-output operations. Only the OPEN, CLOSE, READ and START statements affect the setting of the file position indicator. The concept of a file position indicator has no meaning for a file opened in the output or extends mode.
♦
Indicates the next record to be accessed for sequential COBOL requests
♦
You do not specify them anywhere in your program
♦
It is set by successful:
1. OPEN, OPEN, STAR START T, READ, READ, and READ READ NEXT NEXT statem statements ents 2. The successful successful execution execution of an OPEN OPEN INPUT INPUT or OPEN OPEN I-O I-O statement statement for sequential files sets the file file position indicator to 1. 3. Execution Execution of an OPEN OPEN INPUT INPUT or OPEN OPEN I-O statem statement ent sets the file file position position indicator indicator:: 4. For VSAM VSAM sequentia sequentiall and indexed indexed files, files, to the characters characters with with the lowest lowest ordinal ordinal position position in the the collating sequence associated with the file. 5. For VSAM VSAM relati relative ve files, files, to 1. ♦
Subsequent READ or READ NEXT requests then uses & updates it
♦
It is not used or affected by the output statements :
6. WRITE WRITE,, REWRI REWRITE TE,, or or DELE DELETE. TE. ♦
If the record is no longer accessible , i.e. it has been deleted, the file position indicator is updated to point to the next existing record in the file
♦
The file position indicator has no meaning for random processing
READ - Example
File- Indexed, Dynamic Access Record Description: 01 ASSOC-REC 05 ASSOC-NO-KEY PIC 9(4). 05 ASSOC-NAME PIC X(10). Assoc # Assoc Name 00 04 RAJESH 00 10 RAMESH 00 15 GOPAL 00 16 RAGHAVAN 01 00 SARITA 04 01 RA N I
Operation OPEN input READ next READ Key 0100 READ next READ key 0015 READ key 0090 READ next
File Position Pointer 0 00 4 0 0 10 0 40 1 end of file 0 01 6 Undefined Undefined
Record Area Not defined 0004 Rajesh 0100 Sarita 0401 Rani 0015 Gopal Undefined (Invalid key) Undefined
Table 11.1 File position indicator example
START ♦
Enables the positioning of the pointer at a specific point in an indexed or relative file
♦
File should be opened in Input or I-O mode
♦
Access mode must be Sequential or Dynamic
♦
Does not read the record
START file-name data-name] [ KEY IS { EQUAL TO = GREATER THAN > NOT LESS THAN NOT < THAN } [ INVALID KEY imperative-stmt-1 ] [ NOT INVALID KEY imperative-stmt-2 ] [ END-START ]
START - Rules ♦
Invalid Key arises if the record position is empty
♦
When KEY phrase is not specified KEY EQUAL TO primary key is implied
♦
File position indicator points to the first record in the file whose key field satisfies the comparison
♦
When the KEY phrase is specified, the file position indicator is positioned at the logical record in the file whose key field satisfies the comparison.
♦
When the KEY phrase is not no t specified, KEY IS EQUAL (to the prime record key) is implied.
♦
When the START START statement is executed, a comparison is made between the current value in the key data-name and the corresponding key field in the file's index.
♦
PROGRAM COLLATING SEQUENCE clause, if specified, has no effect
♦
The file position indicator points to the first record in the file whose key field satisfies the comparison. If the operands in the comparison are of unequal lengths, the comparison proceeds as if the longer field were truncated on the right to the length length of the shorter field. All other numeric and nonnumeric nonnumeric comparison rules apply
START
File- Indexed, Dynamic Access Record Description: 01 ASSOC-REC 05 ASSOC-NO-KEY PIC 9(4). 05 ASSOC-NAME PIC X(10). Assoc # Assoc Name
0004
RAJESH
0010 0015 0016 0100 0401
RAMESH GOPAL RAGHAVAN SARITA RANI OPERATION OPEN I-O START START ASSOC.NO-KEY ASSOC.NO -KEY = 0004 READ NEXT START START ASSOC-NOASSOC -NOKEY > 0016 READ NEXT START START ASSOC-NOASSOC -NOKEY > 0401
POINTER VALUE TOP OF FILE 00 04
REC-AREA NOT DEFINED NOT DEFINED
00 10 01 00
0004 RAJESH 0004 RAJESH
04 01 UNKNOWN
0100 SARITA 0100 SARITA
Table 11.2 Illustration Il lustration of START statement WRITE WRITE rec-name [FROM id-1] [ { BEFORE ADVANCING ADVANCING AFTER } { int-1 { LINE id-2 LINES } mnemonic-name PAGE } ] [AT { END-OF-PAGE stmt-1 EOP } [NOT AT { END-OF-PAGE stmt-2 EOP } [END-WRITE]
♦
Releases a record onto the output file
♦
ADVANCING phrase is only for Printer Files
♦
when this phrase is specified, the following rules apply: 1. When BEFORE ADVANCING ADVANCING is specified, the line is printed before the page is advanced. 2. When AFTER AFTER ADV ADVANCING is specified, the page is advanced before the line is printed. 3. When identifier-2 is specified, specified, the page is advanced the number of lines equal to the current value value in identifier-2. Identifier-2 must name an elementary elementary integer data item.
♦
File Position is not affected by this statement
♦
When END-OF-PAGE END-OF-PAGE is specified, and the logical end of the printed page is reached during execution of the WRITE statement, the END-OF-PAGE END-OF-PAGE imperative-statement is executed
WRITE for Seq. Files ♦
From its Record Area defined at 01 Level WRITE ASSOC-REC
♦
First Copy into File Area and then Write WRITE ASSOC-REC FROM COPY-REC
♦
Note that File Name is not no t mentioned in the Write W rite Statement
♦
Facilitates Multiple-Record Multiple-Record Type Files also known as Non-Homogeneous Files.
♦
The various 01 levels defined for the same file implicitly redefine each other. That is they share the same record area. Therefore, in case of Non-Homogeneous Files the Record Layouts must contain a Record Type Field for identification.
♦
The WRITE statement can only be executed for a sequential file opened in OUTPUT or EXTEND EXTEND mode for a sequential file.
WRITE for Printer Files ♦
Facilities for Paper Movement are provided - Print and Advance - Advance and Print - Position to New Page - Advance by given given number of lines - End of Page Logic (FD entry for this this file must contain a LINAGE clause)
♦
When ADVANCING option is used - First char of record record reserved for printer printer control - If compile has ADV the LRECL of file should be one more than FD entry record record area length - If compile option is NOADV NOADV then LRECL of of file is same as FD entry record area length length
•
leave the 1st char for printer control
WRITE for Disk Files WRITE record-name [ FROM id-1 ] [ INVALID KEY imperative-stmt-1 ] [ NOT INVALID KEY imperative-stmt-2 ] [ END-WRITE ] WRITE - Invalid key ♦
Not Allowed for ESDS
♦
Attempt to write beyond file boundary
♦
Record with specified key already present (KSDS, RRDS)
♦
FROM phrase: ♦
The result of the execution of the WRITE statement with the FROM identifier-1 phrase is equivalent to the execution of the following statements in the order specified. MOVE identifier-1 TO record -name-1. WRITE record-name-1.
WRITE - Rules for VSAM ♦
When access is sequential - For KSDS, records must must be released in ascending order of RECORD RECORD KEY values
♦
Else INVALID KEY condition will be raised - For RRDS system returns the RELATIVE KEY if clause is specified in SELECT stmt
♦
When access is random or dynamic - For KSDS populate RECORD key data item and ALTERNATE ALTERNATE key data item (if any) - For RRDS populate popula te the RELATIVE key data item
♦
When an attempt is made to write beyond the externally defined boundaries of the file, the execution of the WRITE statement is unsuccessful, and an EXCEPTION/ERROR EXCEPTION/ERROR condition condition exists. The contents of record-name are unaffected. If specified, the status key is updated, and, ifif an explicit or implicit implicit EXCEPTION/ERROR EXCEPTION/ERROR procedure is specified for the file, the procedure is then executed; if no such procedure is specified, the results are unpredictable.
♦
Before the WRITE statement is executed, you must set the prime record key (the RECORD KEY data item, as defined in the File-Control entry) to the desired value.
♦
If the ALTERNATE RECORD KEY clause is also specified in the File-Control entry, each alternate record key must be unique, unless the DUPLICATES phrase is specified. specified . If the DUPLICATES DUPLICATES phrase is specified, alternate record record key values may not be unique. In this case, the system stores the records so that later sequential access to the records allows retrieval in the same order in which they were stored.
♦
When ACCESS IS SEQUENTIAL is specified in the File-Control entry, records must be released in ascending order of RECORD KEY values.
REWRITE REWRITE record-name [ FROM id-1] [ INVALID KEY imperative-stmt-1] [ NOT INVALID KEY imperative-stmt-2 ] [ END-REWRITE ] ♦
Updates an existing record in a file
♦
File should be opened in I-O mode
REWRITE - Invalid Key ♦
When access mode is sequential, and the value of RECORD KEY of the record to be replaced not = RECORD KEY data item of the last-retrieved record
♦
Value contained in RECORD KEY not = any record in file
♦
Duplicate ALTERNATE RECORD KEY when duplicates are not allowed
REWRITE - Rules ♦
File should be opened in I-O
♦
After REWRITE record is not available in the rec area
♦
After a REWRITE statement statement with the FROM phrase is executed, the information is still available in identifier-1
♦
File position ind not affected
♦
For Sequential files
- INVALID INVALID KEY not allowed - Record length can’t change ♦
For random or dynamic access the record to be re written need not be read first
DELETE DELETE file-name-1 RECORD [ INVALID KEY imperative-stmt-1] [ NOT INVALID KEY imperative-stmt-2] [ END-DELETE ] ♦
Removes a record from an indexed or relative file
♦
For indexed files, the key can then be reused f or record addition.
♦
For relative files, the space is then available for a new record with the same RELATIVE RELATIVE KEY value.
♦
If the FILE STATUS clause is specified in the File-Control entry, the associated status key is updated when the DELETE statement is executed.
♦
The file position indicator is not affected by execution of the DELETE statement.
♦
For a file in sequential access mode, the last input/output statement must have been a successfully executed READ statement. statement. When the DELETE statement statement is executed, the the system removes the record retrieved by that READ statement.
♦
For a file in sequential access mode, the INVALID KEY and NOT INVALID KEY phrases must not be specified. However, However, an EXCEPTIONERROR EXCEPTIONERROR procedure can be specified.
♦
When the DELETE statement is executed, the system removes the record identified by the contents of the prime RECORD KEY data item for VSAM indexed files, or the RELATIVE KEY data item for VSAM relative files. If the file does not contain such a record, an INVALID INVALID KEY condition condition exists.
DELETE - Rules ♦
File should opened for I-O
♦
In sequential access mode, the last input/output statement must have been a successfully executed READ
- INVALID INVALID key not allowed ♦
For Random or Dynamic access system removes record pointed by the RECORD key(KSDS) or RELATIVE key(RRDS)
SORT
♦
While processing sequential files, it is sometimes necessary that the records should appear in some predetermined sequence. The process of sequencing records in file in some predetermined order on some fields is called SORTING
♦
The fields based on which the records are sequenced are called SORT KEYS.
♦
The sequencing can be ascending or descending order of the KEY. KEY.
SORT file-1 {ON {ASCENDING DESCENDING} KEY id-1... } ... {USING file-2 {GIVING file-3 ♦
This is a simple sort verb that accepts a input file and creates a sorted output file. The Sort verb needs a work file for sorting the given input file. Hence this sort requires 3 files for processing – unsorted input file, works file and sorted output file.
♦
In the above format file-1 is the work file , file-2 is the unsorted input file, file-3 is the sorted output file
♦
File-2 and file-3 are defined in the FD section
♦
The work file File-1 is defined in the file section as SD entry sort description entry
♦
The format of SD entry is same as the FD entry
♦
The sort verb opens input, output and the work files before the sorting begins and closed these files when sorting is over.
♦
Example
♦
Assume the following record description for the input file
FD 1
EMP-FILE. EMP-REC. 02 ID-NUM 02 NAME 02 DEPARTMENT 02 BASIC-PAY 02 ALLOWANCE 02 DEDUCTION
PIC 9(6). PIC X(24). PIC X(10). PIC 9(5)V99. PIC 9(4)V99. PIC 9(4)V99.
We want to sort this file on DEPARTMEN DEPARTMENT T on ascending sequence and then within each DEPARTMENT, arrange BASIC-PAY on descending sequence. This means that the records with same DEPARTMENT value are to be arranged from highest to lowest value of the BASIC-PAY. The work file and output files are SORT-FILE SORT-FILE and OUTPUT-FILE. OUTPUT-FILE. The FD and SD entries for these files are as follows
SD 01
FD 1
SORT-FILE SORT-REC. 02 FILLER 02 DEPARTMENT 02 BASIC-PAY 02 FILLER OUTPUT-FILE OUT-REC
PIC X(30). PIC X(10). PIC 9(5)V99. PIC X(12).
PIC X(59).
The sort statement for this is SORT SORT-FILE SORT-FILE ON ASCENDING KEY DEPAR DEPARTMENT TMENT DESCENDING KEY BASIC-PAY USING EMP-FILE GIVING OUTPUT-FILE. Sometimes its necessary to edit records before sorting or after sorting before writing it to the output file. Editing in this context can mean selection of appropriate records from the input file for sorting. For example, a file with variable length records will require some padding with some characters to make it fixed length for the purpose of sorting. The sort verb allows user to specify the INPUT & OUTPUT PROCEDURE PROCEDURE in the sort statement, which perform the necessary processing of the records. The input and output procedures are nothing but sections placed outside the SORT statement.
INPUT PROCEDURE:The sort statement before the start of the sorting process implicitly performs the specified input procedure. This procedure reads the records from input file, performs the necessary processing and then release the records to Sorting operation by RELEASE statement which is discussed later in this chapter
OUTPUT PROCEDURE:The output procedure is performed implicitly by sort statement in order to perform editing on the sorted records. The output procedure gets the sorted records by means of RETURN statement that is discussed later in this chapter.
SORT file-1 { ON {ASCENDING DESCENDING} KEY id-1... } ... [WITH DUPLICATES IN ORDER] [COLLATING [COLLATING SEQUENCE IS alphabet-name-1] {USING file-2 INPUT PROCEDURE IS proc-nm-1 [THRU proc-nm-2]} {GIVING file-3 OUTPUT PROCEDURE IS proc-nm-3 [THRU proc-nm-4]} SORT - Examples ♦
SORT sorted-emp-file ASCENDING ASCENDING s-last-nm s-last-nm s-first-nm DESCENDING s-emp-nbr USING emp-file OUTPUT PROCEDURE write-emp-list THRU write-emp-list-exit
ENVIRONMENT DIVISION. CONFIGURATION SECTION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT EMP-FILE ASSIGN TO EMPMSTR. SELECT SORTED-EMP-FILE ASSIGN TO EMPSORT. SELECT EMP-LIST ASSIGN TO REPORT. DATA DIVISION. FILE SECTION.
FD EMP-FILE LABEL RECORDS ARE OMITTED. 01 EMP-REC. 05 EMP-NBR PIC 9(4). 05 LAST-NM PIC X(20). 05 FIRST-NM PIC X(20). 05 MID-NM PIC X(20).
SD SORTED-EMP-FILE SORTED-EMP-FILE LABEL RECORDS ARE OMITTED. 01 SORT-EMP-REC. 05 S-EMP-NBR PIC 9(4). 05 S-LAST-NM PIC X(20). 05 S-FIRST-NM S-FIRST-NM PIC X(20). 05 S-MID-NM PIC X(20). PROCEDURE DIVISION. ..... SORT sorted-emp-file ASCENDING s-last-nm s-first-nm DESCENDING s-emp-nbr USING emp-file OUTPUT PROCEDURE write-emp-list THRU write-emp-list-exit ... WRITE-EMP-LIST. ...... WRITE-EMP-LIST-EXIT. EXIT.
♦
Collating Sequences - COLLATING COLLATING SEQUENCE option of the SORT SORT statement that is defined in SPECIAL NAMES paragraph - PROGRAM COLLATING COLLATING SEQUENCE if specified in the Configuration Section - Default is EBCDIC
RELEASE ♦
Transfers records to the initial phase of sort operation
♦
It’s It’s like WRITE statement
RELEASE sort-rec-name-1 [FROM id-1] ♦
If INPUT PROCEDURE is used, at-least one RELEASE stmt must be exe cuted
RELEASE - Examples MOVE emp-rec RELEASE sort-emp-rec ♦
♦
TO
sort-emp-rec
RELEASE sort-emp-rec FROM emp-rec
RETURN ♦
Transfers Transfers records from the final phase of a sorting or merging operation to an OUTPUT PROCEDURE. PROCEDURE.
♦
It’s like READ statement
RETURN sort-file-name-1 [RECORD INTO id-1] [AT END imperative stmt1 ] [NOT AT END imperative stmt2] [END-RETURN] [END-RETURN ] RETURN - Rules ♦
If OUTPUT PROCEDURE is used, at-least one RETURN stmt must be ex ecuted
RETURN – Examples read-sorted-rec. RETURN sorted-emp-file AT END SET c-sort-eof TO TRUE END-RETURN . read-sorted-rec-exit. EXIT.
WRITE-EMP-LIST. SET c-not-sort-eof TO TRUE PERFORM read-sorted-rec THRU read-sorted-rec-exit PERFORM UNTIL c-sort-eof PERFORM string-emp-name THRU string-emp-name-exit MOVE w-emp-name TO rep-name MOVE s-emp-nbr s-emp-nbr TO rep-emp-nbr WRITE emp-list-rec PERFORM read-sorted-rec THRU read-sorted-rec-exit END-PERFORM . WRITE-EMP-LIST-EXIT. EXIT. MERGE Sometimes it becomes necessary to create a new output file from 2 input files. These 2 files needs to be merged and new file needs to be created For example A Company Company has its marketing operations divided into 2 zones and for each zone there is file. Each of these files contains zone name, district name, salesman name, product name and amount of sales for a particular product. The files are sorted on product name. We need to merge these 2 files into a single file to get a single transaction file to update the master file. The MERGE verb is used to merge 2 or more identical files sorted on the same field
MERGE file-1 { ON {ASCENDING DESCENDING} KEY id-1... } ... [COLLATING [COLLATING SEQUENCE IS alphabet-name-1] USING file-2 [file-3 ...] {GIVING file-4 OUTPUT PROCEDURE IS proc-nm-1 [THRU proc-nm-2]} The input files to be merged through MERGE statement are file-2, file-3. The file-1 is the work file, which should be defined in the SD entry. The file-2 file-2 and file-3 should be sorted on the key used to merge these 2 files.
MERGE - Examples
MERGE sorted-emp-ph-file ASCE ASCEN NDIN DING s-la s-lasst-nm t-nm s-first-nm DESCENDING s-emp-nbr USING emp-ph-file emp-addon-ph-file GIVING new-emp-ph-file
MERGE - Rules ♦
When USING / GIVING option is specified the input / output file(s) to merge must not be open
♦
The key used in the MERGE statement cannot be variably located.
♦
When When the file refere reference nced d by filena filenameme-1 1 is merged merged contro controll passes passes to first first stmt stmt in the OUTP OUTPUT UT PROCEDURE.
♦
-
Collating Sequences COLLATING
SEQUENCE
option
of
MERGE
statement
SPECIAL-NAMES SPECIAL-NAMES paragraph - PROGRAM COLLATING COLLATING SEQUENCE specified in the Configuration Configu ration Section Default is EBCDIC
that
is
defined
in
INPUT/OUTPUT ERROR HANDLING TECHNIQUES The following are techniques of intercepting and Handling input/output Errors. ♦ The end-of-file phrase (AT END) ♦ The EXCEPTION/ERROR declarative ♦ The FILE STATUS key ♦ The INVALID KEY phrase.
THE END-OF-FILE PHRASE (AT (AT END) An end-of-file condition condition may or may not represent an error. error. In many designs, reading sequentially sequentially to the end of a file is done intentionally, and the AT END condition is expected. For example, suppose you are processing a file containing transactions in order to update a master file:
PERFORM UNTIL TRANSACTION-EOF = "TRUE" READ UPDATE-TRANSACTION-FILE UPDATE-TRANSACTION-FILE INTO WS-TRANSACTION-RECORD AT END DISPLAY "END OF TRANSACTION UPDATE FILE REACHED" MOVE "TRUE" TO TRANSACTION-EOF END READ . . . END-PERFORM In some cases, howev however, er, the condition conditio n will reflect an error. You code the AT AT END phrase of the READ statement to handle either case, according to your program design. If you code an AT AT END phrase, upon end-of-file the phrase is executed. If you do not code an AT END END phrase, the associated ERROR declarative is executed. Following an AT AT END condition, the contents of the associated record area are undefined, and attempts to move data to or from the associated record may result in a protection exception.
EXCEPTION/ERROR Declarative
You can code one on e or more ERROR declarative procedures in your program that will be given control if an input/output error error occurs. You can have: ♦
A single, common procedure for the entire program
♦
Group procedures for each file open mode (whether INPUT, OUTPUT, I-O, or EXTEND)
♦
Individual procedures for each particular file
FILE STATUS key The system updates the FILE STATUS STATUS key after each input/output statement executed for a file placing values in the two digits of the file file status key. key. In general, a zero in the first digit indicates indicates a successful operation, and a zero in both digits means "nothing abnormal to report". Establish a FILE STA STATUS key using the FILE STATUS clause in the FILE-CONTROL and data definitions in the Data Division.
INVALID KEY phrase This phrase will be given control in the event that an input/output error occurs because of a faulty index key. You can include includ e INVALID KEY phrases on o n READ, START START,, WRITE, REWRITE, and DELETE requests reques ts for indexed and relative files. You can also include INVALID KEY on WRITE requests for QSAM files. In the case of QSAM files, however, however, the INVALID INVALID KEY phrase has limited meaning. It is used only when you attempt to write to a disk that is full. INVALID KEY phrases differ from ERROR declaratives in three ways: 1. INVALID INVALID KEY KEY phrases phrases operate for only limited types of errors, whereas whereas the ERROR declarative encompasses all forms. 2. INVALID INVALID KEY KEY phrases phrases are coded directly onto the input/output verb, whereas ERROR declaratives are coded separately. separately. 3. INVALID INVALID KEY KEY phrases phrases are specific for one single input/output operation, whereas whereas ERROR ERROR declaratives declaratives are more general. If you specify INVALID INVALID KEY in a statement that causes an INVALID INVALID KEY condition, control is transferred to the INVALID INVALID KEY imperative statement. In this case, any ERROR declaratives you have coded are not executed.
Cobol
EXERCISES
EXERCISES 1. Assume there is a Transaction sequential file with record length 80 characters. The following are the fields in the transaction file Emp-no 10 chars Emp-name 30 chars Emp-birth-date 8 c ha hars(ddmmyyyy) Emp-designation 8 ch chars Emp-department 6 ch chars date-of-joining 8 chars Emp-status 2 chars Gross-salary 8 numeric with 2 decimal The master file is the indexed file with the same fields as above. This transaction file records needs to be inserted in the master indexed file if the emp-no is not present and if the emp-status id NA (new active). If the records is present and if the emp-status id is TT the emp record from the master file needs to be deleted as he is an terminated employee. If the record is present, and the emp status is OA which is old active, the record in the indexed file needs to be updated. Write the COBOL code to do the processing of the transaction and master files. COBOL code includes environment division, data division and procedure proced ure division entries.
Cobol
Table Handling
12. Table handling Sometimes it becomes necessary to handle group of data consisting of similar items. Such a group is called a Table Table or Array. An array is used to store stor e similar items or elements. ele ments. For eg. A series of totals tota ls in the working storage with the same format. A table is a list of stored fields that are looked up or referenced by the program. It also eliminates the need for separate entries for repeated data items. The usage of tables can be illustrated by the following example For example when we need to list the months normal way of representing it is
1
MONTH-TABLE. 02 MON-1 02 MON-2 02 MON-3 02 MON-4 02 MON-5 02 MON-6 02 MON-7 02 MON-8 02 MON-9 02 MON-10 02 MON-11 02 MON-12
PIC X(9) PIC X(9) PIC X(9) PIC X(9) PIC X(9) PIC X(9) PIC X(9) PIC X(9) PIC X(9) PIC X(9) PIC X(9) PIC X(9)
VALUE VALUE VALUE VALUE VALUE VALUE VALUE VALUE VALUE VALUE VALUE VALUE
‘JANUARYbb‘. ‘FEBRUARYb ‘. ‘MARCHbbbb‘. ‘APRILbbbb‘. ‘MAY bbbbbb‘. ‘JUNEbbbbbb‘. ‘JULYbbbbbb‘. ‘AUGUSTbbb‘. ‘SEPTEMBER‘. ‘OCTOBERbb‘. ‘NOVEMBERb‘. ‘DECEMBERb‘.
In the above example, the same data month name is being repeated repeated 12 times. Instead of defining the elements like this we can define it as a table with 12 elements. Each element of the table can be referred using a Subscript or an index. Now lets us look at how the table can be defined in COBOL
01
MONTH-TABLE. 02 MON-NAME PIC X(9) OCCURS 12 TIMES.
This table can be fixed length tables and Variable length tables. The tables or Arrays are define using OCCURS in COBOL. Now lets look at Occurs clause in detail.
Cobol
Table Handling
OCCURS ♦
Used for defining Tables(Arrays)
♦
The OCCURS clause specifies tables whose elements can be referred to by indexing or subscripting.
♦
It also eliminates the need for separate entries for repeated data items.
♦
Occurs clause can be specified for elementary or group item.
♦
VALUE clause cannot be specified for associated data name defined with OCCURS clause or any sub item to the occurs clause
♦
REDEFINES REDEFINES and OCCURS clause cannot appear for the same data item. However REDEFINES REDEFINES clause can appear for a group item whose sub item contains occurs clause
♦
The occurs clause is used to define single dimension and multi-dimensional tables.
♦
Tables can be Fixed Length or Variable Length
♦
Can’t be defined for a data item which: - Has a level number of 01, 66, 77, or 88. - Describes a redefined data item
FIXED LENGTH TABLES OCCURS integer-2 TIMES [ {ASCENDING KEY IS DESCENDING } dataname-2 [ ... ] ] [ INDEXED BY index-name-1 [ ... ] ]
OCCURS - Index Name ♦
In COBOL, INDEXING can do the subscripting of table.
♦
An index can be defined for a particular table or dimension of table using INDEXED BY phrase. phrase.
♦
Required if item is indexed anywhere in the program
♦
Conceptually, Conceptually, an index similar to subscript. The internal representation of a subscript and index are different. A subscript is an integer data item. But index inde x is referenced in a more efficient manner internally. internally. INDEX is an offset or displacement of the element from the beginning of the table
Cobol ♦
Table Handling
Example 03
YEAR PIC
9(4)
OCCURS
10 TIMES INDEXED BY I1.
In the above example the displacement of first element is zero, 2 nd is 4, 3rd is 8 and so on. I.e. the index I1 assumes these values for occurrence numbers 1,2,3 and so on. ♦
The value of Index item is set by the occurrence number and not the internal value
♦
The value of index is set using SET clause. The statements like Move or Add cannot be used on index
♦
Index name is implicitly defined
♦
Index name cannot be associated with any other data hierarchy
♦
Must be initialized before it can be used using SET and PERFORM VARYING VARYING
VARIABLE LENGTH TABLES OCCURS - Depending On ♦
When a table of variable size needs to be b e defined, Occurs Depending clause may be used
♦
EXAMPLE 77 1
A1
PIC
99
PIC
XX.
REC-1. 2
P1
02 P2 PIC
99 OCCURS 1 TO 90 TIMES DEPENDING ON A1.
In this example depending on the value of A1, the size of the table may vary from 1 to 90. The syntax is
OCCURS int1 TO int2 TIMES DEPENDING ON data-name-1 [ {ASCENDING KEY IS DESCENDING } dataname-2 [ ... ] ] [ INDEXED BY index-name-1 [ ... ] ] ♦
Object of the OCCURS DEPENDING ON (ODO) clause cannot be variably located;
Cobol
Table Handling
♦
If subject of OCCURS is defined as EXTERNAL EXTERNAL then ODO ought to be defined as EXTERNAL
♦
The int-1 and int-2 defined must be positive integers.
♦
The data name-1 can be defined at the same level as ODO but it cannot be defined as sub item to ODO.
♦
Example 01 REC-1. 02 A1 PIC 99. 02 P1 PIC XX. 02 P2 PIC 99 OCCURS 1 TO 90 DEPENDING ON A1. The above example is valid. 01 REC-1. 02 P1 PIC XX. 02 P2 PIC 99 OCCURS 1 TO 90 DEPENDING ON A1. 02 A1 PIC 99. This definition is invalid
♦
GLOBAL definition definition needs rules similar to EXTERNAL EXTERNAL
♦
ODO cannot be REDEFINED
♦
Example. This is invalid 01 REC-1. 02 A1 02 P1 02 P2 02 P3
♦
PIC 99. PIC XX. PIC 99 OCCURS 1 TO 90 TIMES DEPENDING ON A1. REDEFINES P2
Length of group item containing Occurs depending - If ODO is outside the group the ODO ODO value decides - If ODO is inside and group item is is sending field then also ODO value decides - If ODO is inside and group item is is receiving field then max length of group value used provided provided there are no non-subordinate to the group item
Cobol
Table Handling
SET SET { id-1 index-name-1 } ... TO { id-2 index-name-2 int-1 } SET
index-name-1 ... { UP BY { id-3 int-1 } DOWN BY }
SET - Examples
05 TABLE-ITEM OCCURS OCCURS 10 INDEXED BY INX-A PIC X (8). ♦
To set the index INX-A to 5th occurrence of TABLE-ITEM TABLE-ITEM use stmt: SET INX-A TO 5
♦
The Value in INX-A would be (5 - 1) * 8 = 32.
♦
To refer to 6th element we could use relative indexing - TABLE-ITEM (INX-A+1)
♦
Or Set the index first using - SET INX-A UP BY 1 and then refer as TABLE-ITEM(INX-A) TABLE-ITEM(INX-A)
Sending flds Index Name Index data item Integer data item Numeric literal
Index Name V V* V V
Receiving Fields Index Data Item Integer Data Item V* V V* -
Table 12.1 Set - Sending and Receiving Fields
Cobol
Table Handling
Note : * - No Conversion
COMPLEX TABLES ♦
Data item with Occurs Depending On is followed by - Non-subordinate item - Non-subordinate item with Occurs Depending Depending On
♦
01
Data item with Occurs Depending On is nested
FILLER. 05 CTR1 05 CTR2 05 FIELD-A. 1 10 TABLE-1. 15 REC-1 OCCURS 1 TO 5 DEPENDING ON CT CTR1 10 EMP-NR 2 10 TABLE-2 OCCURS 5 3 INDEXED BY INDX. 4 15 TABLE-ITEM
PIC S99. PIC S99.
PIC X(3). PIC X (5).
PIC 99.
5 15 20
RECREC-2 2 OCC OCCUR URS S 1 TO 3 DEPE DEPEND NDIN ING G ON CTR2. TR2. DATA-NUM PIC S99. ♦ Complex ODO item
1 - A group item of variable length 2 - An elementary data item following, and not subordinate to, a variable length table (variably located item) 3 - A group item following, and not subordinate to, a variable-length table 4 - An index name for a table that has variable length elements 5 - An element of a table that has variable-length elements
Cobol
Table Handling
Watch out... ♦
The location of non-subordinate items following the item with OCCURS clause is affected by new value of the ODO object. - If you want to preserve the contents of these items, prior to to the change in the ODO object, save all non subordinate items following the variable item and after the change in the ODO object, restore all the items back.
♦
Careful when using complex-ODO index names. - In the example ifif the value of the the ODO object CTR2 CTR2 is changed then the offset offset in index index INDX is no longer valid for the table TABLE-2. TABLE-2.
♦
To avoid making this error : - Save the value of index index as an occurrence number before changing ODO object. - After changing ODO object, object, restore the value of index name from the integer integer data item
77 INT-DAT INT-DATA-1 PIC 99. 77 NEW-VALUE PIC S99. SET INT-DATA-1 TO INDX MOVE NEW-VALUE NEW-VALUE TO CTR2 SET INDX TO INT-DATA-1 OCCURS - Example
WORKING STORAGE SECTION. 01 TABLE-RECORD. 05 EMPEM P-T TABLE ABLE OCC OCCURS URS 100 100 ASCEN SCENDI DING NG KEY KEY IS WAGE-RATE EMP-NO INDEXED BY A, B. 10 EMP-NAME PIC X (20). 10 EMP-NO PIC 9(6). 10 WAGE-RATE PIC 9999V99. 10 WEEK-RECORD OC OCCURS 52 52 ASCENDING KEY IS WEEK-NO INDEXED BY C. 15 WEEK-NO PIC 99. 15 ABSENCES PIC 99.
TABLE PROCESSING Now we have seen how to define tables of various sizes and dimension, we now see how to process these tables using PERFORM verb.
Cobol
Table Handling
EXAMPLE: Consider the following example 77 01 1
A1 PIC 99. PRICE-1 PIC S9 (7) V99. DATA-REC. 05 PRODUCT-CODE PIC X (6) 05 PRICE-REC OCCURS 36 TIMES. 10 PERIOD PIC X (10). 10 PROD-PRICE PIC S9 (7) V99.
Now we want to find the average price of the product for a period. MOVE ZERO TO TOTAL. MOVE 1 TO A1. PERFORM ADD-PRICE-PARA 36 TIMES. COMPUTE AVERAGE = TOTAL / 36 ADD-PRICE-PARA. COMP COMPUT UTE E TOT TOTAL = PROD PROD-P -PRI RICE CE (A1 (A1)) + TOT TOTAL AL ADD 1 TO A1. This is one form of PERFORM statement used for FIXED length tables. Now we want to find the price of a product for period 011999 (mmyyyy)
MOVE 1 TO A1 PERFORM FIND-PRICE-PARA UNTIL (PERIOD = ‘011999’ OR A1 > 36) FIND-PRICE-PARA IF PERIOD = ‘011999’ MOVE PROD-PRICE (A1) TO PRICE-1 END-IF ADD 1 TO A1 In this form, the paragraph is executed repetitively until the period id 011999 011999 or until the subscript of the table is greater than the maximum table limits. The same fixed length table can be defined as variable length table.
Cobol
Table Handling
In this case again we want to find the price of a product for period 011999(mmyyyy) 011999(mmyyyy)
77 PRICE-1 PIC S9 (7) V99. 01 DATA-REC. 05 PRODUCT PIC X(10). 05 TAB-CNT PIC S9(04) COMP. COMP. 05 DAT DATA-TABLE OCCURS 1 TO 37 TIMES DEPENDING ON TAB-CNT INDEXED BY INX-1. 07 PERIOD PIC X(6). 07 PROD-PRICE PIC S9(7)V9(02). PROCEDURE DIVISION. SET INX-1 TO 1. PERFORM FIND-PRICE-PARA VARYING INX-1 BY 1 UNTIL INX-1 > TAB-CNT OR PERIOD = ‘011999’ FIND-PRICE-PARA IF PERIOD = ‘011999’ MOVE PROD-PRICE(INX-1) END-IF
TO PRICE-1
In the above statement the increment of the INDEX is not given explicitly. explicitly. It is done automatically.
♦
Either fixed length or variable length the table can be in the sorted order by defining a key for the table.
♦
The sorted table reduces the time of search, when a search is performed on the table.
♦
The example for SORTED TABLES
02 ASSOC-DATA OCCURS 10 TIMES ASCENDING KEY IS A-NAME INDEXED BY INX-1.
♦
05 A-NAME
PIC X(20).
05 A-NUM
PIC 9(04).
The data have to be sorted in the correct order (ascending or descending) by the programmer .
Cobol
Table Handling
SEARCH ♦
To search a table element that satisfies a specified condition
♦
Options - SEARCH VARYING VARYING Linear Search - SEARCH ALL Binary Search, valid only for sorted tables with key specified.
SEARCH - Sequential SEARCH id-1 [ VARYING { id-2 index-name-1 } ] [ AT END imperative-statement-1 ] WHEN condition-1 { imper-stmt2 NEXT SENTENCE } [ WHEN condition-2 { imper-stmt3 NEXT SENTENCE } ] ... [ END-SEARCH ] ♦
This search is serial search or linear search.
♦
The table may sorted or not
♦
WHENs are performed one after another for each table entry until TRUE or NO more WHEN cond
♦
AT END executed if no match
♦
Set starting points of id-2 or index. The increment of the index or id-2 is taken care of by the search statement itself.
♦
The search statement can be performed on he table defined by OCCURS and INDEXED BY phrase.
♦
The search verb starts with initial value of index and tests whether condition stated in the when clause have been satisfied or not. If none of the conditions are satisfied the index is incremented by 1 automatically. automatically. The process is continued until un til the index value exceeds the size of the t he table and the search is terminated. When one of conditions is satisfied before the index value reaches the size of the table, the statements following the WHEN clause is executed. If these statements are not present, then execution is transferred to next statement. The value of the index remains set at the point where the condition has been satisfied.
Cobol ♦
When the SEARCH terminates without finding the necessary value, the index contains unpredictable values.
♦
Table Handling
Example
77 NAME PIC X(20). 05 ASSOC-TABLE ASSOC-TABLE OCCURS 350 TIMES TIMES INDEXED BY I-1. 10 ASSOC-NAME PIC X (20). 10 ASSOC-NUM PIC 9(4). SET I-1 TO 1. SEARCH ASSOC-TABLE AT END DISPLAY ‘NAME NOT FOUND’ WHEN NAME = ASSOC-NAME (I-1) DISPLAY ‘NAME FOUND’.
Cobol
Table Handling
If the value of index associated with id-1 is > size of the
YES
Execute imperative statement-1
Go to next executabl e
NO
Is condition-1 true?
YES Execute imperative statement-2
Go to next executabl e
NO
Is condition2 true?
YES Execute imperative statement-3
NO Index associated with id-1 is incremented by 1
id-2/index-name-1 is incremented by 1
Figure 12.1 Flow Chart for SEARCH with Varying and When option
Go to next executabl e
Cobol
Table Handling
SEARCH ALL SEARCH ALL id-1 impera tive-statement tement-1 -1 ] [ AT END imperative-sta WHEN { dataname-1= equal-clause Condition-name-1} [ AND { dataname-1= equal-clause Condition-name-1} ] ... { imper-stmt2 NEXT SENTENCE } [ END-SEARCH ]
Equal-clause can be { id-2 lit-1 arithexp-1} ♦
This SEARCH all is the Binary search.
♦
For
this
search
the
table
needs
to
be
in
sorted
order
using
ASCENDING/DESC ASCENDING/DESCENDING ENDING option in occurs clause ♦
When the binary search is used, it is assumed that at the time of search the table is arranged in the sorted order depending on the definition of the table.
♦
In this search, the table is split into 2 halves and determines in which half the item to be searched is present. Then item to be searched is compared with the last item of the first half or first item of the second to determine in which the item to be searched is likely to be present. Then again the half which is selected is split into 2 and the comparison is done to determine in which half the item to be search searched ed is prese present. nt. Like wise wise the search search contin continues ues until until the item to be searched is found or the final division is just a single item. Now a single comparison with this item determines whether the item is present or not.
♦
This type of search minimizes the number of comparison that needs to be done on the table elements.
♦
Initia Initiall setti setting ng of index ignored, ignored, but if set it must not be greate greaterr than than the maximum size
♦
Duplicate index will indicate the first entry it encountered
♦
Unpredictable results if table is not in sorted order
Cobol
Table Handling
77 NAME PIC X(20). 05 ASSOC-TABLE ASSOC-TABLE OCCURS 350 TIMES ASCENDING KEY IS A-NAME INDEXED BY I-1. 10 A-NAME PIC X(20). 10 A-NUM PIC 9(4). SEARCH ALL ASSOC-TABLE AT END DISPLAY ‘NAME NOT FOUND’ WHEN NAME = A-NAME(I-1) DISPLAY ‘NAME FOUND’
Cobol
Table Handling
MERGE ♦
Combines two or more identically sorted files and makes records available in merged order
MERGE file-1 { ON {ASCENDING DESCENDING} KEY id-1... } ... [COLLATING [COLLATING SEQUENCE IS alphabet-name-1] USING file-2 [file-3 ...] {GIVING file-4 OUTPUT PROCEDURE IS proc-nm-1 [THRU proc-nm-2]} MERGE - Examples
MERGE sorted-emp-ph-file ASCE ASCEND NDIING s-las -lastt-nm nm s-first-nm DESCENDING s-emp-nbr USING emp-ph-file emp-addon-ph-file GIVING new-emp-ph-file
MERGE - Rules ♦
When USING / GIVING option is specified the input / output file(s) to merge must not be open
♦
The key used in the MERGE statement cannot be variably located.
♦
When the file referenced by filename-1 is merged control passes to first stmt in the OUTPUT PROCEDURE.
♦
-
Collating Sequences COLLA COLLATI TING NG SEQUEN SEQUENCE CE option option of MERGE MERGE statem statement ent that is define defined d in SPECIAL-NAMES paragraph
- PROGRAM COLLATING COLLATING SEQUENCE specified specifie d in the Configuration Section Default is EBCDIC
Cobol
Table Handling
Cobol
Exercises
EXERCISES 1.
Write rite the the dat dataa divi divisi sion on sta state teme ment ntss for for the the fol follo lowi wing ng tab table le.. a. The table table contains contains marks of student student for the the each month month for the whole whole year year. The marks marks will will be 3 digits. b. The insurance insurance company company maintain maintainss the premium premium paid paid by the policy policy holders holders on a periodic periodic basis. The period depends depend s on the policy. policy. It can be a monthly, half-yearly, half-yearly, quarterly or annual premium. The premium is 13 digits with 2 decimal places. Write Write the table structure with policy number, period and premium as fields. This is a variable length table
2. How many times will the the procedure procedure named named PROCESS-R PROCESS-ROUTIN OUTINE E be executed executed by the the following PERFORM statements? a. PERFORM PERFORM PROCESS-ROUTI PROCESS-ROUTINE NE VAR VARYING YING A FROM FROM 1 BY 1 UNTIL A = 15. b. PERFORM PERFORM PROCESS-ROUTI PROCESS-ROUTINE NE VAR VARYING YING A FROM FROM 1 BY 1 UNITL A > 15. 3. The following following are DAT DATA DIVISION DIVISION entries entries.. 77 I PIC 99. 77 TOTAL PIC 99. 1 TABLE-1. 02 FILLER PIC X (9) VALUE IS “123456789”. 01 TABLE-2 REDEFINES TABLE-1. 02 A OCCURS 9 TIMES PIC 9. Indicate how many elements of the array A would be added to TOTAL TOTAL and what will be the final value of TOTAL TOTAL when the control goes goe s to PARA-2 PARA-2 in the following program segment? MOVE ZERO TO TOTAL. PERFORM PARA-1 VARYING I FROM 1 BY 2 UNTIL I > 9. GO TO PARA-2 PARA-1. ADD A (I) TO TOTAL. PARA-2. 4. A table table contains contains the the monthly sales data data for 12 months months of the year and and for the 4 sales sales zones zones where each zone has 8 districts. Write Write the PROCEDURE DIVISION statements to find the total sale of each district within each zone and then find the total sale of each zone. Store these totals in 2 tables - one district d istrict total and the other containing the zone totals. Write Write the Data division entries to define all these tables. 5. The follow following ing is a PROCEDUR PROCEDURE E DIVISIO DIVISION N statemen statement. t. PERFORM PARA-AGAIN VARYING I FROM 1 BY 1 UNTIL I > 4 AFTER J FROM 0 BY –1 UNTIL J < -2 AFTER K FROM 1 BY 2 UNTIL K > 8. How many times is the procedure named PARA-AGAIN executed? Which data name varied least rapidly and which varied most rapidly.
13. Compiler Directive - COPY
Cobol
Exercises
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 file descriptions, record descriptions, descriptions, or procedures without re-coding them. These entries and procedures 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 Each COPY statement must be preceded by a space and ended with a separator period. A COPY statement statement can appear in the source program anywhere a character string or a separator can appear.
COPY { text-name lit-1 } [ { OF { lib-name lit-2 } ] IN } [ SUPPRESS ] [ REPLACING ( op-1 BY op-2 ) ... ] . ♦
op-1 and op-2 can be either pseudo-text, an identifier, a literal, or a COBOL word
(except COPY).
Compiler Directive COPY – Example
01 :TAG:. 02 :TAG:-WEEK :TAG:-WEEK PIC S99. 02 :TAG :TAG::-GR GROSS OSS-P -PA AY PIC PIC 9(5) 9(5)V9 V99. 9. 02 :TAG:-HOURS :TAG:-HOURS PIC S999 OCCURS 1 TO 52 TIMES DEPENDING ON :TAG:-WEEK :TAG:-WEEK OF :TAG:. COPY PAYLIB REPLACING ==:TAG:== BY ==Payroll==.
Cobol
Compiler Directives
01 PAYROLL. 02 PAYROLL-WEEK YROLL-WE EK PIC S99. 02 PAYROLL-GROSS-PA YROLL-G ROSS-PAY Y PIC S9(5)V99. S9(5)V9 9. 02 PAYROLL-HOURS YROLL-H OURS PIC S999 OCCURS 1 TO 52 TIMES DEPENDING ON PAYROLL-WEEK OF PAYROLL. Compiler Directive COPY - Rules ♦
Copy statement can be nested but
- Can’t contain contain REPLACING REPLACING option ♦
Should not cause recursion
♦
If SUPPRESS - Specified then listing will will not contain the statement within within the COPY member member - If not then listing will contain contain the statements with a C after the the source program
line number
Cobol
Compiler Options
14. Compiler Options ♦
Helps to control the compilation
♦
Specify these options in
- PARM field of the JCL - CBL or PROCESS statement in program ♦
Most of the options come in pairs
- XREF/NOXREF ♦
Some options have sub-parameters. - LINECOUNT (44)
♦
Watch out - There are default options options when compiler is installed
♦
Precedence of Compiler Options - Level 1: (Highest precedence) Installation defaults, defaults, fixed by your installation installation - Level 2: Those on PROCESS PROCESS (or CBL) stmt - Level 3: Those on the JCL PARM PARM - Level 4: (Lowest precedence) Installation defaults, but not fixed.
♦
Object code generation - COMPILE, CMPR2, DECK, NAME, OBJECT
♦
Use of virtual storage - BUFSIZE, SIZE
♦
Object code execution - ADV, ADV, ADW, DAT DATA, DYNAM, FASTSRT, FASTSRT, OPTIMIZE, OUTDD, OU TDD, NUMPROC - RENT, RENT, RESIDENT, RESIDENT, SSRANGE, TRUNC, ZWB
♦
Maps, listing, and diagnostics - DUMP, DUMP, FLAG, FLAGMIG, FLAGSAA, FLAGSTD, FL AGSTD, LANGUAGE, LINECOUNT LINECO UNT,, LIST, LIST, MAP, MAP, NUMBER, OFFSET, OFFSET, SEQUENCE, SOURCE, SPACE, TERMINAL, VBREF, VBREF, XREF
♦
Debugging - FDUMP, TEST
♦
Literal delimiters - APOST, APOST, QUOTE, DBCS
Cognizant Academy
Ver 1.0
Page 135 of 149
Cobol ♦
Compiler Options
Reserved word list
- WORD ♦
Processing of COPY ETC..
- LIB ♦
Provision of User Exit
- EXIT ♦
ADV / NOADV Default is: ADV ADV has meaning only if you use WRITE W RITE . . . ADVANCING ADVANCING in your source code. With ADV in effect, the compiler adds 1 byte to the record length to account for the printer control character. character. Use NOADV if you have already adjusted your record length to include 1 byte for the printer control character
♦
CMPR2 / NOCMPR2 Default is: NOCMPR2 Use CMPR2 when you want the compiler to generate code that is compatible with code generated by VS COBOL II Release 2. Valid Valid COBOL source programs that compiled successfully under VS COBOL II Release 2 will also compile successfully under IBM COBOL for MVS & VM with CMPR2 in effect and will provide compatible results.
♦
COMPILE / NOCOMPILE (W/E/S) Default is: NOCOMPILE(S) Abbreviations are: C / NOC Use the COMPILE option only if you want to force full compilation even in the presence of serious errors. All diagnostics and object code will be generated. Do not try to run run the object code generated generated if the compilation resulted in serious errors--the results could be unpredictable or an abnormal termination could occur.
♦
DATA(24/31) Default is: DATA(31) DATA(31)
Language Environment provides services that that control the storage used at run time. IBM COBOL for MVS & VM uses these services for all storage requests. For reentrant programs, the DATA (24|31) compiler option and the HEAP run-time option control whether storage for dynamic data areas (such as WORKING-STORAG WORKING-STORAGE E section and FD record areas) is obtained from below the 16-megabyte line or from unrestricted storage.
Cognizant Academy
Ver 1.0
Page 136 of 149
Cobol
Compiler Options
When you specify the run-time option HEAP (BELOW), the DATA (24|31) compiler option has no effect; the storage for all dynamic data areas is allocated from below the the 16-megabyte line. However, However, with HEAP (ANYWHERE) (ANYWHERE) as the run-time option, storage for dynamic data areas is allocated from below the line if you compiled the program with the DATA (24) compiler option or from unrestricted storage if you compiled with the DATA (31) compiler option. Specify the DATA DATA (24) compiler option for programs running in 31-bit addressing mode that is passing data parameters to programs in 24-bit addressing addressing mode. This ensures that the data will be addressable address able by the called program.program. - With NORENT compiler option, DATA(31) DATA(31) has no effect ♦
DECK / NODECK Default is: NODECK Abbreviations are: D / NOD Use DECK to produce object code in the form form of 80-column card images. If you use the DECK option, be certain that SYSPUNCH is defined in your JCL for compilation. - SYSPUNCH SYSPUNCH ddname must for DECK opt
♦
DYNAM / NODYNAM Default is: NODYNAM Abbreviations are: DYN / NODYN Use DYNAM to cause separately compiled programs invoked through the CALL literal statement to be loaded dynamically at run time. DYNAM causes dynamic loads loads (for CALL) and deletes (for CANCEL) CANCEL) of separately compiled programs at object time. Any CALL identifier identifier statements that cannot be resolved in your program are also handled as dynamic calls. - DYNAM forced RESIDENT option
Cognizant Academy
Ver 1.0
Page 137 of 149
Cobol ♦
Compiler Options
FLAG(x,y) / NOFLAG Default is: FLAG(I) Abbreviations are: F / NOF x :- I, W, E, S, or U y:- I, W, E, S, or U Use FLAG (x) to produce diagnostic messages for errors of a severity level x or above at the end of the source listing. Use FLAG (x, y) to produce diagnostic messages for errors of severity level x or above at the end of the source listing, with error messages of severity y and above to be embedded directly in the source listing. The severity coded for y must not be lower than the severity coded for x. To use FLAG (x, y), you must also specify the SOURCE compiler option. Error messages in the source listing are set off by embedding the statement number in an arrow that points to the message code. The message code is then followed by the message text Use NOFLAG to suppress error error flagging. NOFLAG will will not suppress error messages for compiler options. - Control listing listing of error messages
♦
LIB / NOLIB - Default is: NOLIB Abbreviation is: None If your program uses COPY, BASIS, or REPLACE statements, you need to specify the LIB compiler option. In addition, for COPY and BASIS statements, include include in your JCL DD statements for the library library or libraries from which the compiler can take the copied code, and also include a JCL DD statement to allocate SYSUT5.SYSUT5.- Allocate - SYSLIB and SYSUT5 SYSUT5 ddnames
♦
LIST / NOLIST Default is: NOLIST Use LIST to produce a listing of the assembler-language expansion of your source code. You will also get these in your output listing: ♦
Global tables
♦
Literal pools
♦
Information about Working-Storage
♦
Size of the program's Working-Storage and its location in the object code if the program is compiled with the NORENT option
- LIST and OFFSET OFFSET are mutually mutually exclusive and if both given LIST ignored
Cognizant Academy
Ver 1.0
Page 138 of 149
Cobol ♦
Compiler Options
MAP / NOMAP Default is: NOMAP Use MAP to produce a listing of the items you defined in the DATA DATA DIVISION. Map output includes: includ es: ♦
DATA DIVISION map
♦
Global tables
♦
Literal pools
♦
Nested program structure map, and program attributes
♦
Size of the program's Working-Storage and its location in the object code if the program is compiled with the NORENT option
By selecting the MAP option, you can also print an embedded MAP report in the source code listing. The condensed MAP information is printed to the right of data-name definitions in the FILE SECTION, WORKING-STORAGE SECTION, and LINKAGE SECTION of the DATA DIVISION. ♦
NUMBER / NONUMBER Default is: NONUMBER Abbreviations are: NUM / NONUM Use NUMBER if you have line numbers in your source code and want those numbers to be used in error messages and MAP, LIST, and XREF listings. If you request NUMBER, columns 1 through 6 are checked to make sure that they contain only numbers, and the sequence is checked according to numeric collating sequence. When a line number is found to be out of sequence, the compiler assigns to it a line number with a value one number higher than the line number of the preceding statement. statement. Sequence checking continues with the next statement, based on the newly assigned value of the previous line. If you use COPY statements and NUMBER is in effect, be sure that your source program line numbers and the COPY member line numbers are coordinated. If you are doing a batch compilation and LIB and NUMBER are in effect, effect, all programs in the batch compile compile will be treated as a single input file. file. The sequence numbers of the entire input file must be in ascending order. order. Use NONUMBER if you do not have line numbers in your source code, or if you want the compiler to ignore the line numbers you do have in your source code. With NONUMBER NONUMBER in effect, the compiler compiler generates line numbers for your source statements and uses those numbers as references in listings.
Cognizant Academy
Ver 1.0
Page 139 of 149
Cobol ♦
Compiler Options
NUMPROC(PFD or NOPFD or MIG) Default is: NUMPROC(NOPFD) Use NUMPROC (NOPFD) (NOPFD) if you want the compiler compiler to perform invalid sign processing. This option is not as efficient as NUMPROC (PFD); object code size will be increased, and there could be an increase in run-time overhead to validate all signed data. NUMPROC (PFD) is a performance option that can be used to bypass invalid sign processing. Using NUMPROC (PFD) (PFD) can affect class tests for numeric data Use NUMPROC (MIG) to aid in-migrating OS/VS COBOL programs to IBM COBOL for MVS & VM. When NUMPROC (MIG) is in effect, the following processing occurs:
♦
♦
Preferred signs are created only on the output of MOVE statements and arithmetic operations.
♦
No explicit sign repair is done on input.
♦
Some implicit sign repair might occur during conversion.
♦
Numeric comparisons are performed by a decimal compare, not a logical compare.
OBJECT / NOOBJECT Default is: OBJECT Abbreviations are: OBJ / NOOBJ Use OBJECT to place the generated object code on disk or tape to be later used as input for the linkage editor. If you specify OBJECT, OBJECT, include a SYSLIN DD statement in your JCL for compilation. The only difference between DECK and OBJECT is in the routing of the data sets: ♦
DECK output goes to the data set associated with SYSPUNCH ddname.
♦
OBJECT output goes to the data set associated with SYSLIN ddname.
NOOBJECT & TEST - mutually exclusive ♦
OFFSET / NOOFFSET Default is: NOOFFSET Abbreviations are: are: OFF / NOOFF Use OFFSET to produce a condensed PROCEDURE DIVISION listing. With OFFSET, OFFSET, the condensed condens ed PROCEDURE PROCEDURE DIVISION listing will contain line numbers, statement references, and the location of the first instruction generated generated for each statement. In addition, the following are are produced: ♦
Global tables
♦
Literal pools
♦
Size of the program's Working-Storage, and its location in the object code if the program is compiled with the NORENT option.
- OFFSET & LIST are mutually mutually exclusive. exclusive.
Cognizant Academy
Ver 1.0
Page 140 of 149
Cobol ♦
Compiler Options
OPTIMIZE / NOOPTIMIZE The COBOL optimizer optimizer is activated when you use the OPTIMIZE compiler option. The purpose of the OPTIMIZE compiler compiler option is to do the following: Eliminate unnecessary transfers of control or simplify inefficient branches, including those generated by the compiler that are not evident from looking at the source program. Simplify the compiled code for both a PERFORM statement and a CALL statement to a contained (nested) program. Where possible, the optimizer places places the statement inline, eliminating eliminating the need for linkage code. This optimization, known as procedure integration, is further discussed in "PERFORM Procedure Integration" If procedure integration cannot be done, the optimizer uses the simplest linkage possible (perhaps as few as two instructions) to get to and from the called program. Eliminate duplicate computations (such as subscript computations and repeated statements) that have no effect on the results of the program. Eliminate constant computations by performing them when the program is compiled. Eliminate constant conditional expressions. Aggregate moves of contiguous items (such as those that often occur with the use of MOVE CORRESPONDING) CORRESPONDING) into a single single move. Both the source and target must be contiguous for the moves to be aggregated. Delete from the program, and identify with a warning message, code that can never be performed (unreachable code elimination). The FULL suboption requests that the compilers discard any unreferenced data items from the DAT DATA DIVISION, DIVISION, and suppress generation of code to initialize these data items to their VALUE clauses. For unit testing your programs, you might might find it easier to debug code that has not been optimized. optimized. But when the program is ready for final test, specify OPTIMIZE, so that the tested code and the production code are identical. You might also want to use the option during development, development, if a program is used frequently without recompilation. recompilation. However, However, the overhead for OPTIMIZE might outweigh its benefits if you re-compile frequently, frequently, unless you are using the assembler language expansion (LIST option) to fine tune your program. OPTIMIZE & TEST - mutually exclusive
♦
OUTDD(ddname) - To get run-time DISPLAY output on a data set other than SYSOUT
Cognizant Academy
Ver 1.0
Page 141 of 149
Cobol ♦
Compiler Options
QUOTE / APOST Default is: QUOTE Abbreviations are: are: Q / APOST Use QUOTE if you want the figurative constant [ALL] QUOTE or [ALL] QUOTES to represent one or more quotation mark (") characters. Use APOST APOST if you want the figurative constant [ALL] QUOTE or [ALL] QUOTES to represent one or more apostrophe (') characters. Note: Either quotes or apostrophes can be used as literal delimiters, delimiters, regardless of whether whether the APOST or QUOTE option is in effect. The delimiter character used as the opening delimiter for a literal must be used as the closing delimiter for that literal.
♦
RENT / NORENT - object code is to be reentrant - Have RESIDENT RESIDENT option for all programs programs in a unit unless the run-time option MIXRES MIXRES has been specified.
♦
SOURCE / NOSOURCE Default is: SOURCE Abbreviations are: S / NOS Use SOURCE to get a listing listing of your source program. This listing will include include any statements embedded by PROCESS or COPY statements. SOURCE must be specified if you want embedded messages in the source listing. Use NOSOURCE to suppress the source code from the compiler output listing.
♦
SPACE (1/2/3) - to select single, double, or triple triple spacing in your source code listing.
♦
TEST / NOTEST Default is: NOTEST Use TEST to produce object code that enables Debug Tool Tool to perform batch and interactive debugging. The amount of debugging support available available depends on which TEST suboptions you use. The TEST option also allows you to request that symbolic symbolic variable be included in the formatted dump produced by Language Environment. Use NOTEST ifif you do not want to generate object code with debugging information and do not want the formatted dump to include symbolic variables. TEST has two suboptions; you can specify both, just one of the suboptions, or neither of the suboptions:
Cognizant Academy
Ver 1.0
Page 142 of 149
Cobol
Compiler Options
Hook: - The hook-location suboption controls where compiled-in hooks will be generated to provide
information to the debugger. NONE: - No hooks will be generated. BLOCK: - Hooks will be generated at all program entry and exit points. PATH: - Hooks will be generated at all program entry and exit points and at all path points. A path point is anywhere in a program where the logic flow is not necessarily sequential or can change. Some examples of path points are IF-THEN-ELSE IF-THEN-ELSE constructs, PERFORM loops, ON SIZE ERROR phrases, and CALL statements. STMT: STMT: - Hooks will be generated at every statement and label, as well as at all program entry and exit point. In addition, if the DATEPROC DATEPROC option is in effect, hooks will be generated at all date processing statements. ALL: - Hooks will be generated at all statements, all path points, and at all program entry and exit points. In addition, if the DATEPROC DATEPROC option is in effect, hooks will be generated at all date processing statements. Symbol: - The symbol-table suboption controls whether dictionary tables will be generated.
SYM: - Dictionary and calculation tables will be generated. NOSYM: - Dictionary and calculation tables will not be generated. ♦
SSRANGE / NOSSRANGE Default is: NOSSRANGE Abbreviations are: SSR / NOSSR Use SSRANGE to generate code that checks if subscripts (including ALL subscripts) subscripts) or indexes try to reference an area outside the region of the table. Each subscript or index is not individually individually checked for validity; rather, the effective address is checked to ensure that it does not cause a reference outside the region of the table. Variable-length items will also be checked to ensure that the reference is within their maximum defined length. Reference modification expressions will be checked to ensure that: ♦
The reference modification starting position position is greater than or equal to 1.
♦
The reference modification starting position is not greater than the current length of the subject data item.
♦
The reference modification length value (if specified) is greater than or equal to 1.
♦
The reference modification starting position and length value (if specified) do not reference an area beyond the end of the subject data item.
- Use itit while while testing
Cognizant Academy
Ver 1.0
Page 143 of 149
Cobol ♦
Compiler Options
TRUNC (OPT or STD or BIN) Default is: TRUNC(STD) TRUNC (STD): -
Use TRUNC(STD) TRUNC(STD) to control the the way arithmetic arithmetic fields are truncated during MOVE
and arithmetic operations. TRUNC (STD) (STD) applies only to USAGE BINARY receiving fields in MOVE statements and arithmetic expressions. When TRUNC (STD) (STD) is in effect, the final result of an arithmetic expression, or the sending field in the MOVE statement, is truncated to the number of digits in the PICTURE clause of the BINARY receiving receiving field. TRUNC (OPT): (OPT): - TRUNC (OPT) is a performance option. When TRUNC (OPT) (OPT) is specified, the compiler assumes that the data conforms to PICTURE and USAGE specifications of the USAGE BINARY receiving receiving fields in MOVE statements and arithmetic expressions. expressions. The results are manipulated in the most optimal way, either truncating to the number of digits in the PICTURE clause, or to the size of the binary field in storage (halfword, fullword, or doubleword). TRUNC (BIN) :-
The TRUNC(BIN) TRUNC(BIN) option option applies to all COBOL language that processes USAGE USAGE
BINARY data. When TRUNC (BIN) is in effect: ♦ ♦
BINARY receiving receiving fields are truncated only at halfword, fullword, or doubleword boundaries. BINARY sending sending fields are handled as halfwords, fullwords, or doublewords when the receiver is numeric; TRUNC (BIN) has no effect when the receiver is not numeric.
♦
♦
The full binary content of the field is significant.
♦
DISPLAY DISPLAY will convert the entire content of the binary field, with no truncation.
VBREF / NOVBREF Default is: NOVBREF Use VBREF to get a cross-reference among all verb types used in the source program and the line numbers in which they are used. VBREF also produces a summary summary of how many times each verb was used in the program. Use NOVBREF for more efficient compilation.
Cognizant Academy
Ver 1.0
Page 144 of 149
Cobol ♦
Compiler Options
WORD(xxxx) / NOWORD Default is: NOWORD Abbreviations are: WD / NOWD xxxx :- Are the ending characters of the name of the reserved word table (IGYCxxxx) to be used in your compilation. IGYC are the first 4 standard standard characters of the name, and xxxx can be 1 to 4 characters in length. Use WORD(xxxx) to specify that an alternate reserved word table is to be used during compilation. Alternate reserved word tables provide changes to the IBM-supplied default reserved word table.
♦
XREF(FULL or SHORT) / NOXREF Default is: NOXREF Abbreviations are: X / NOX You can choose XREF, XREF (FULL), or XREF (SHORT). Use XREF to get a sorted cross-reference cross-reference listing. EBCDIC data-names data-names and procedure-names are listed in alphanumeric order. order. DBCS data-names and procedure-names procedure-names are listed based on their physical order in the program, and appear before the EBCDIC data-names and procedure-names, unless the DBCSXREF installation installation option is selected with a DBCS ordering program. In this case, DBCS data-names and procedure-names are ordered as specified by the DBCS ordering program. Also included is a section listing all the program names that are referenced in your program, and the line number where they are defined. External program names are identified as such. If you use XREF and SOURCE, cross-reference cross-reference information will also be printed on the same line as the original source in the listing. listing. Line number references or other information, information, will appear on the right hand side of the listing page. On the right of source lines that reference reference intrinsic functions, the letters letters 'IFN' will appear with the line numbers of the location where the function's arguments are defined. Information included in the embedded references lets you know if an identifier is undefined or defined more than once. (UND or DUP will be printed); if an item is implicitly defined defined (IMP), such as special registers or figurative constants; and if a program name is external (EXT). If you use XREF and NOSOURCE, NOSOURCE, you'll get only the sorted cross-reference listing. XREF (SHORT) (SHORT) will print only the explicitly referenced variables in the cross-reference listing. XREF (SHORT) (SHORT) applies to DBCS data names and procedure-names as well as EBCDIC names. NOXREF suppresses this listing.
Cognizant Academy
Ver 1.0
Page 145 of 149
Cobol ♦
Compiler Options
ZWB / NOZWB Default is: ZWB With ZWB, the compiler removes the sign from a signed external decimal (DISPLAY) field when comparing this field to an alphanumeric elementary field during execution. If the external decimal item is a scaled item (contains the symbol 'P' in its PICTURE characterstring), its use in comparisons is is not affected by ZWB. Such items always have their sign removed removed before the comparison is made to the alphanumeric field. ZWB affects how the program runs; the same COBOL source program can give different results, depending on the option setting. Use NOZWB if you want to test input numeric fields for SPACES. SPACES.
Compiler option - Coding Example
♦
♦
♦
//COB EXEC PGM=IGYCRCTL, // PARM='LIST, NOCOMPILE (S), OBJECT' CBL LIST,NOCOMPILE(S),OBJECT LIST,NOCOMPILE(S),OBJECT IDENTIFICATION DIVISION. PROGRAM-ID. myprog. PROCESS LIST,NOCOMPILE(S),OBJECT LIST,NOCOMPILE(S),OBJECT IDENTIFICATION DIVISION. PROGRAM-ID. myprog.
Cognizant Academy
Ver 1.0
Page 146 of 149
Cobol
APPENDIX 1
APPENDIX 1 FILE STATUS CODES AND MEANING 2 char code - Status key 1 - Status key 2 ♦
♦
Status key 1 tells the type of error
♦
Status key 2 gives the detail
♦
Status key 1
0 - Successful Completion 1 - At end condition 2 - Invalid key condition condition 3 - Permanent error condition condition 4 - Logic error 9 - Implementor defined (VSAM) ♦
Successful Completion-0 0 - No further info 1 - Duplicate - Read, (Re) Write 2 - Length error for Fixed files 5 - Optional file not present
♦
At end condition-1 0 - End of file 4 - Relative key > max possible
♦
♦
Invalid Key-2 1 - Ascending key violation/Rewrite change primary Key 2 - Duplicate key when not allowed (Primary, (Primary, Alternate Alternate or relative key) 3 - Record not found 4 - Write beyond boundary Permanent error-3 0 - no further info 4 - Due to boundary violation 5 - File not available (ddname not found/defined) 7 - Invalid open mode on open 8 - Open of file closed with lock 9 - DCB conflict during open
♦
Logic error-4
Cognizant Academy
Ver 1.0
Page 147 of 149
Cobol
APPENDIX 1
1 - Open of file in open status 2 - Close of file not in open stat 3 - Rewrite or Delete after unsuccessful Read 4 - Rewrite changed record len or Write record len > max 5 - No position for Read next 7 - Read on file not opened for Input or I-O 8 - Write on file not opened for Output or I-O or Extend 9 - Rewrite on file not opened for I-O ♦
Implementor def- 9(VSAM) 0 - No further info 1 - Password failure 2 - Logic error 3 - Resource not available 4 - No file position for cmpr2 opt 5 - Invalid/Incomplete file info 6 - No DDname found 7 - Open successful; File verified
Cognizant Academy
Ver 1.0
Page 148 of 149
Cobol
References
References 1. 2. 3. 4.
Ster Stern n and and Ster Stern n Stru Struct ctur ured ed COBO COBOL L Prog Progra ramm mmin ing g St Structured COBOL COBOL Programming How to design & develop COBOL programs VS COB COBOL OL II - guid guidee for for progr program amme mers rs 2 ed. ed.
- Nanc Nancy y ster stern n - Philippakis and Kazmier - Roy & Dastidar - Paul N. - Anne Anne pri prince nce