String handling statements in COBOL are used to do multiple functional operations on strings. Following are the string handling statements −
Inspect
String
Unstring
Inspect
Inspect verb is used to count or replace the characters in a string. String operations can be performed on alphanumeric, numeric, or alphabetic values. Inspect operations are performed from left to right. The options used for the string operations are as follows −
Tallying
Tallying option is used to count the string characters.
Syntax
Following is the syntax of Tallying option −
INSPECT input-string
TALLYING output-count FOR ALL CHARACTERS
The parameters used are −
input-string − The string whose characters are to be counted.
output-count − Data item to hold the count of characters.
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS= A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
When you compile and execute the above program, it produces the following result −
OLD STRING : ABCDACDADEAAAFF
NEW STRING : XBCDXCDXDEXXXFF
String
String verb is used to concatenate the strings. Using STRING statement, two or more strings of characters can be combined to form a longer string. Delimited By clause is compulsory.
There are some tasks that need to be done over and over again like reading each record of a file till its end. The loop statements used in COBOL are −
Perform Thru
Perform Until
Perform Times
Perform Varying
Perform Thru
Perform Thru is used to execute a series of paragraph by giving the first and last paragraph names in the sequence. After executing the last paragraph, the control is returned back.
In-line Perform
Statements inside the PERFORM will be executed till END-PERFORM is reached.
Syntax
Following is the syntax of In-line perform −
PERFORM
DISPLAY 'HELLO WORLD'
END-PERFORM.
Out-of-line Perform
Here, a statement is executed in one paragraph and then the control is transferred to other paragraph or section.
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS= A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
When you compile and execute the above program, it produces the following result −
IN A-PARA
IN C-PARA
IN D-PARA
IN E-PARA
IN B-PARA
Perform Until
In perform until, a paragraph is executed until the given condition becomes true. With test before is the default condition and it indicates that the condition is checked before the execution of statements in a paragraph.
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS= A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
When you compile and execute the above program, it produces the following result −
IN B-PARA 1
IN B-PARA 2
IN B-PARA 3
IN B-PARA 4
GO TO Statement
GO TO statement is used to change the flow of execution in a program. In GO TO statements, transfer goes only in the forward direction. It is used to exit a paragraph. The different types of GO TO statements used are as follows −
Unconditional GO TO
GO TO para-name.
Conditional GO TO
GO TO para-1 para-2 para-3 DEPENDING ON x.
If ‘x’ is equal to 1, then the control will be transferred to the first paragraph; and if ‘x’ is equal to 2, then the control will be transferred to the second paragraph, and so on.
Conditional statements are used to change the execution flow depending on certain conditions specified by the programmer. Conditional statements will always evaluate to true or false. Conditions are used in IF, Evaluate, and Perform statements. The different types of conditions are as follows −
IF Condition Statement
Relation Condition
Sign Condition
Class Condition
Condition-Name Condition
Negated Condition
Combined Condition
IF Condition Statement
IF statement checks for conditions. If a condition is true, the IF block is executed; and if the condition is false, the ELSE block is executed.
END-IF is used to end the IF block. To end the IF block, a period can be used instead of END-IF. But it is always preferable to use END-IF for multiple IF blocks.
Nested-IF − IF blocks appearing inside another IF block. There is no limit to the depth of nested IF statements.
Syntax
Following is the syntax of IF condition statements −
IF [condition] THEN
[COBOL statements]
ELSE
[COBOL statements]
END-IF.
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS= A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
When you compile and execute the above program, it produces the following result −
IN LOOP 1 - IF BLOCK
IN LOOP 2 - ELSE BLOCK
Relation Condition
Relation condition compares two operands, either of which can be an identifier, literal, or arithmetic expression. Algebraic comparison of numeric fields is done regardless of size and usage clause.
For non-numeric operands
If two non-numeric operands of equal size are compared, then the characters are compared from left with the corresponding positions till the end is reached. The operand containing greater number of characters is declared greater.
If two non-numeric operands of unequal size are compared, then the shorter data item is appended with spaces at the end till the size of the operands becomes equal and then compared according to the rules mentioned in the previous point.
Syntax
Given below is the syntax of Relation condition statements −
[Data Name/Arithmetic Operation]
[IS] [NOT]
[Equal to (=),Greater than (>), Less than (<),
Greater than or Equal (>=), Less than or equal (<=) ]
[Data Name/Arithmetic Operation]
Example
IDENTIFICATIONDIVISION.PROGRAM-ID. HELLO.DATADIVISION.WORKING-STORAGESECTION.01 WS-NUM1 PIC9(9).01 WS-NUM2 PIC9(9).PROCEDUREDIVISION.
A000-FIRST-PARA.MOVE25TO WS-NUM1.MOVE15TO WS-NUM2.IF WS-NUM1 ISGREATERTHANOREQUALTO WS-NUM2 THENDISPLAY'WS-NUM1 IS GREATER THAN WS-NUM2'ELSEDISPLAY'WS-NUM1 IS LESS THAN WS-NUM2'END-IF.STOPRUN.
JCL to execute the above COBOL program −
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS= A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
When you compile and execute the above program it produces the following result −
WS-NUM1 IS GREATER THAN WS-NUM2
Sign Condition
Sign condition is used to check the sign of a numeric operand. It determines whether a given numeric value is greater than, less than, or equal to ZERO.
Syntax
Following is the syntax of Sign condition statements −
IDENTIFICATIONDIVISION.PROGRAM-ID. HELLO.DATADIVISION.WORKING-STORAGESECTION.01 WS-NUM1 PICS9(9)VALUE-1234.01 WS-NUM2 PICS9(9)VALUE123456.PROCEDUREDIVISION.
A000-FIRST-PARA.IF WS-NUM1 ISPOSITIVETHENDISPLAY'WS-NUM1 IS POSITIVE'.IF WS-NUM1 ISNEGATIVETHENDISPLAY'WS-NUM1 IS NEGATIVE'.IF WS-NUM1 ISZEROTHENDISPLAY'WS-NUM1 IS ZERO'.IF WS-NUM2 ISPOSITIVETHENDISPLAY'WS-NUM2 IS POSITIVE'.STOPRUN.
JCL to execute the above COBOL program −
JCL to execute the above COBOL program −
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS= A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
When you compile and execute the above program it produces the following result −
WS-NUM1 IS GREATER THAN WS-NUM2
Sign Condition
Sign condition is used to check the sign of a numeric operand. It determines whether a given numeric value is greater than, less than, or equal to ZERO.
Syntax
Following is the syntax of Sign condition statements −
IDENTIFICATIONDIVISION.PROGRAM-ID. HELLO.DATADIVISION.WORKING-STORAGESECTION.01 WS-NUM1 PICS9(9)VALUE-1234.01 WS-NUM2 PICS9(9)VALUE123456.PROCEDUREDIVISION.
A000-FIRST-PARA.IF WS-NUM1 ISPOSITIVETHENDISPLAY'WS-NUM1 IS POSITIVE'.IF WS-NUM1 ISNEGATIVETHENDISPLAY'WS-NUM1 IS NEGATIVE'.IF WS-NUM1 ISZEROTHENDISPLAY'WS-NUM1 IS ZERO'.IF WS-NUM2 ISPOSITIVETHENDISPLAY'WS-NUM2 IS POSITIVE'.STOPRUN.
JCL to execute the above COBOL program −
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS= A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
When you compile and execute the above program it produces the following result −
WS-NUM1 IS NEGATIVE
WS-NUM2 IS POSITIVE
Class Condition
Class condition is used to check if an operand contains only alphabets or numeric data. Spaces are considered in ALPHABETIC, ALPHABETIC-LOWER, and ALPHABETIC-UPPER.
Syntax
Following is the syntax of Class condition statements −
IDENTIFICATIONDIVISION.PROGRAM-ID. HELLO.DATADIVISION.WORKING-STORAGESECTION.01 WS-NUM1 PICX(9)VALUE'ABCD '.01 WS-NUM2 PIC9(9)VALUE123456789.PROCEDUREDIVISION.
A000-FIRST-PARA.IF WS-NUM1 ISALPHABETICTHENDISPLAY'WS-NUM1 IS ALPHABETIC'.IF WS-NUM1 ISNUMERICTHENDISPLAY'WS-NUM1 IS NUMERIC'.IF WS-NUM2 ISNUMERICTHENDISPLAY'WS-NUM2 IS NUMERIC'.STOPRUN.
JCL to execute the above COBOL program −
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS= A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
When you compile and execute the above program, it produces the following result −
WS-NUM1 IS ALPHABETIC
WS-NUM2 IS NUMERIC
Condition-name Condition
A condition-name is a user-defined name. It contains a set of values specified by the user. It behaves like Boolean variables. They are defined with level number 88. It will not have a PIC clause.
Syntax
Following is the syntax of user-defined condition statements −
88 [Condition-Name] VALUE [IS, ARE] [LITERAL] [THRU LITERAL].
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS= A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
When you compile and execute the above program, it produces the following result −
Both condition OK
Evaluate Verb
Evaluate verb is a replacement of series of IF-ELSE statement. It can be used to evaluate more than one condition. It is similar to SWITCH statement in C programs.
Example
IDENTIFICATIONDIVISION.PROGRAM-ID. HELLO.DATADIVISION.WORKING-STORAGESECTION.01 WS-A PIC9VALUE0.PROCEDUREDIVISION.MOVE3TO WS-A.EVALUATETRUEWHEN WS-A >2DISPLAY'WS-A GREATER THAN 2'WHEN WS-A <0DISPLAY'WS-A LESS THAN 0'WHENOTHERDISPLAY'INVALID VALUE OF WS-A'END-EVALUATE.STOPRUN.
JCL to execute the above COBOL program −
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS= A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
When you compile and execute the above program, it produces the following result −
COBOL layout is the description of use of each field and the values present in it. Following are the data description entries used in COBOL −
Redefines Clause
Renames Clause
Usage Clause
Copybooks
Redefines Clause
Redefines clause is used to define a storage with different data description. If one or more data items are not used simultaneously, then the same storage can be utilized for another data item. So the same storage can be referred with different data items.
Following are the details of the used parameters −
WS-OLD is Redefined Item
WS-NEW1 and WS-NEW2 are Redefining Item
Level numbers of redefined item and redefining item must be the same and it cannot be 66 or 88 level number. Do not use VALUE clause with a redefining item. In File Section, do not use a redefines clause with 01 level number. Redefines definition must be the next data description you want to redefine. A redefining item will always have the same value as a redefined item.
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS= A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
When you compile and execute the above program it produces the following result −
WS-DATE1 : 20140831
WS-DATE2 : 20140831
Renames Clause
Renames clause is used to give different names to existing data items. It is used to re-group the data names and give a new name to them. The new data names can rename across groups or elementary items. Level number 66 is reserved for renames.
Renaming is possible at same level only. In the above example, WS-A, WS-B, and WS-C are at the same level. Renames definition must be the next data description you want to rename. Do not use Renames with the level numbers 01 or, 77. The data names used for renames must come in sequence. Data items with occur clause cannot be renamed.
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS= A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
When you compile and execute the above program, it produces the following result −
WS-RENAME : 56AABB
Usage Clause
Usage clause specifies the operating system in which the format data is stored. It cannot be used with level numbers 66 or 88. If usage clause is specified on a group, then all the elementary items will have the same usage clause. The different options available with Usage clause are as follows −
Display
Data item is stored in ASCII format and each character will take 1 byte. It is default usage.
The following example calculates the number of bytes required −
01 WS-NUM PICS9(5)V9(3)USAGEISDISPLAY.
It requires 8 bytes assignand decimal doesn't require any byte.01 WS-NUM PIC9(5)USAGEISDISPLAY.
It requires 5 bytes assign.
COMPUTATIONAL / COMP
Data item is stored in binary format. Here, data items must be integer.
The following example calculates the number of bytes required −
01 WS-NUM PICS9(n)USAGEISCOMP.If'n'=1to4, it takes 2 bytes.If'n'=5to9, it takes 4 bytes.If'n'=10to18, it takes 8 bytes.
COMP-1
Data item is similar to Real or Float and is represented as a single precision floating point number. Internally, data is stored in hexadecimal format. COMP-1 does not accept PIC clause. Here 1 word is equal to 4 bytes.
COMP-2
Data item is similar to Long or Double and is represented as double precision floating point number. Internally, data is stored in hexadecimal format. COMP-2 does not specify PIC clause. Here 2 word is equal to 8 bytes.
COMP-3
Data item is stored in packed decimal format. Each digit occupies half a byte (1 nibble) and the sign is stored at the rightmost nibble.
The following example calculates the number of bytes required −
01 WS-NUM PIC9(n)USAGEISCOMP.Numberof bytes = n/2(If n is even)Numberof bytes = n/2+1(If n is odd, consider only integer part)01 WS-NUM PIC9(4)USAGEISCOMP-3VALUE21.
It requires 2 bytes of storage as each digit occupies half a byte.01 WS-NUM PIC9(5)USAGEISCOMP-3VALUE21.
It requires 3 bytes of storage as each digit occupies half a byte.
Copybooks
A COBOL copybook is a selection of code that defines data structures. If a particular data structure is used in many programs, then instead of writing the same data structure again, we can use copybooks. We use the COPY statement to include a copybook in a program. COPY statement is used in the WorkingStorage Section.
The following example includes a copybook inside a COBOL program −
DATADIVISION.WORKING-STORAGESECTION.COPY ABC.
Here ABC is the copybook name. The following data items in ABC copybook can be used inside a program.
01 WS-DESCRIPTION. 05 WS-NUM. 10 WS-NUM1 PIC 9(2) VALUE 20. 10 WS-NUM2 PIC 9(2) VALUE 56. 05 WS-CHAR. 10 WS-CHAR1 PIC X(2) VALUE ‘AA’. 10 WS-CHAR2 PIC X(2) VALUE ‘BB’.
COBOL verbs are used in the procedure division for data processing. A statement always start with a COBOL verb. There are several COBOL verbs with different types of actions.
Input / Output Verbs
Input/Output verbs are used to get data from the user and display the output of COBOL programs. The following two verbs are used for this process −
Accept Verb
Accept verb is used to get data such as date, time, and day from the operating system or directly from the user. If a program is accepting data from the user, then it needs to be passed through JCL. While getting data from the operating system, FROM option is included as shown in the following example −
ACCEPT WS-STUDENT-NAME.
ACCEPT WS-DATE FROM SYSTEM-DATE.
Display Verb
Display verb is used to display the output of a COBOL program.
DISPLAY WS-STUDENT-NAME.
DISPLAY "System date is : " WS-DATE.
When you compile and execute the above program, it produces the following result −
Name : TutorialsPoint
Date : 200623
Initialize Verb
Initialize verb is used to initialize a group item or an elementary item. Data names with RENAME clause cannot be initialized. Numeric data items are replaced by ZEROES. Alphanumeric or alphabetic data items are replaced by SPACES. If we include REPLACING term, then data items can be initialized to the given replacing value as shown in the following example −
IDENTIFICATIONDIVISION.PROGRAM-ID. HELLO.DATADIVISION.WORKING-STORAGESECTION.01 WS-NAME PICA(30)VALUE'ABCDEF'.01 WS-ID PIC9(5).01 WS-ADDRESS.05 WS-HOUSE-NUMBER PIC9(3).05 WS-COUNTRY PICX(15).05 WS-PINCODE PIC9(6)VALUE123456.PROCEDUREDIVISION.
A000-FIRST-PARA.INITIALIZE WS-NAME, WS-ADDRESS.INITIALIZE WS-ID REPLACINGNUMERICDATABY12345.DISPLAY"My name is : "WS-NAME.DISPLAY"My ID is : "WS-ID.DISPLAY"Address : "WS-ADDRESS.DISPLAY"House Number : "WS-HOUSE-NUMBER.DISPLAY"Country : "WS-COUNTRY.DISPLAY"Pincode : "WS-PINCODE.STOPRUN.
JCL to execute the above COBOL program −
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS= A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
When you compile and execute the above program, it produces the following result −
My name is :
My ID is : 12345
Address : 000 000000
House Number : 000
Country :
Pincode : 000000
Move Verb
Move verb is used to copy data from source data to destination data. It can be used on both elementary and group data items. For group data items, MOVE CORRESPONDING/CORR is used. In try it option, MOVE CORR is not working; but on a mainframe server, it will work.
For moving data from a string, MOVE(x:l) is used where x is the starting position and l is the length. Data will be truncated if the destination data item PIC clause is less than the source data item PIC clause. If the destination data item PIC clause is more than the source data item PIC clause, then ZEROS or SPACES will be added in the extra bytes. The following example makes it clear.
Given below is the syntax for Subtract operations −
SUBTRACT A B FROM C D
SUBTRACT A B C FROM D GIVING E
SUBTRACT CORR WS-GROUP1 TO WS-GROUP2
In syntax-1, A and B are added and subtracted from C. The result is stored in C (C = C-(A+B)). A and B are added and subtracted from D. The result is stored in D (D = D-(A+B)).
In syntax-2, A, B, C are added and subtracted from D. The result is stored in E (E = D-(A+B+C))
In syntax-3, sub-group items within WS-GROUP1 and WS-GROUP2 are subtracted and the result is stored in WS-GROUP2.
Data Division is used to define the variables used in a program. To describe data in COBOL, one must understand the following terms −
Data Name
Level Number
Picture Clause
Value Clause
01 TOTAL-STUDENTS PIC9(5) VALUE '125'.
| | | |
| | | |
| | | |
Level Number Data Name Picture Clause Value Clause
Data Name
Data names must be defined in the Data Division before using them in the Procedure Division. They must have a user-defined name; reserved words cannot be used. Data names give reference to the memory locations where actual data is stored. They can be elementary or group type.
Example
The following example shows valid and invalid data names −
Level number is used to specify the level of data in a record. They are used to differentiate between elementary items and group items. Elementary items can be grouped together to create group items.
Sr.No.
Level Number & Description
1
01Record description entry
2
02 to 49Group and Elementary items
3
66Rename Clause items
4
77Items which cannot be sub-divided
5
88Condition name entry
Elementary items cannot be divided further. Level number, Data name, Picture clause, and Value clause (optional) are used to describe an elementary item.
Group items consist of one or more elementary items. Level number, Data name, and Value clause (optional) are used to describe a group item. Group level number is always 01.
Example
The following example shows Group and Elementary items −
Picture clause is used to define the following items −
Data type can be numeric, alphabetic, or alphanumeric. Numeric type consists of only digits 0 to 9. Alphabetic type consists of letters A to Z and spaces. Alphanumeric type consists of digits, letters, and special characters.
Sign can be used with numeric data. It can be either + or .
Decimal point position can be used with numeric data. Assumed position is the position of decimal point and not included in the data.
Length defines the number of bytes used by the data item.
Symbols used in a Picture clause −
Sr.No.
Symbol & Description
1
9Numeric
2
AAlphabetic
3
XAlphanumeric
4
VImplicit Decimal
5
SSign
6
PAssumed Decimal
Example
The following example shows the use of PIC clause −
Value clause is an optional clause which is used to initialize the data items. The values can be numeric literal, alphanumeric literal, or figurative constant. It can be used with both group and elementary items.
Example
The following example shows the use of VALUE clause −
‘Characters’ are lowest in the hierarchy and they cannot be divided further. The COBOL Character Set includes 78 characters which are shown below −
Sr.No.
Character & Description
1
A-ZAlphabets(Upper Case)
2
a-zAlphabets (Lower Case)
3
0-9Numeric
4
Space
5
+Plus Sign
6
–Minus Sign or Hyphen
7
*Asterisk
8
/Forward Slash
9
$Currency Sign
10
,Comma
11
;Semicolon
12
.Decimal Point or Period
13
“Quotation Marks
14
(Left Parenthesis
15
)Right Parenthesis
16
>Greater than
17
<Less than
18
:Colon
19
‘Apostrophe
20
=Equal Sign
Coding Sheet
The source program of COBOL must be written in a format acceptable to the compilers. COBOL programs are written on COBOL coding sheets. There are 80 character positions on each line of a coding sheet.
Character positions are grouped into the following five fields −
Positions
Field
Description
1-6
Column Numbers
Reserved for line numbers.
7
Indicator
It can have Asterisk (*) indicating comments, Hyphen (-) indicating continuation and Slash ( / ) indicating form feed.
8-11
Area A
All COBOL divisions, sections, paragraphs and some special entries must begin in Area A.
12-72
Area B
All COBOL statements must begin in area B.
73-80
Identification Area
It can be used as needed by the programmer.
Example
The following example shows a COBOL coding sheet −
000100IDENTIFICATIONDIVISION.000100000200PROGRAM-ID. HELLO.000101000250* THIS IS A COMMENT LINE000102000300PROCEDUREDIVISION.000103000350 A000-FIRST-PARA.000104000400DISPLAY Coding Sheet.000105000500STOPRUN.000106
JCL to execute the above COBOL program −
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS= A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
When you compile and execute the above program, it produces the following result −
Coding Sheet
Character Strings
Character strings are formed by combining individual characters. A character string can be a
Comment,
Literal, or
COBOL word.
All character strings must be ended with separators. A separator is used to separate character strings.
Frequently used separators − Space, Comma, Period, Apostrophe, Left/Right Parenthesis, and Quotation mark.
Comment
A comment is a character string that does not affect the execution of a program. It can be any combination of characters.
There are two types of comments −
Comment Line
A comment line can be written in any column. The compiler does not check a comment line for syntax and treats it for documentation.
Comment Entry
Comment entries are those that are included in the optional paragraphs of an Identification Division. They are written in Area B and programmers use it for reference.
The text highlighted in Bold are the commented entries in the following example −
000100IDENTIFICATIONDIVISION.000100000150PROGRAM-ID. HELLO.000101000200AUTHOR. TUTORIALSPOINT.000102000250* THIS IS A COMMENT LINE000103000300PROCEDUREDIVISION.000104000350 A000-FIRST-PARA.000105000360/First Para Begins - Documentation Purpose 000106000400DISPLAY Comment line.000107000500STOPRUN.000108
JCL to execute above COBOL program −
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS= A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
When you compile and execute the above program, it produces the following result −
Comment Line
Literal
Literal is a constant that is directly hard-coded in a program. In the following example, “Hello World” is a literal.
PROCEDUREDIVISION.DISPLAY'Hello World'.
There are two types of literals as discussed below −
Alphanumeric Literal
Alphanumeric Literals are enclosed in quotes or apostrophe. Length can be up to 160 characters. An apostrophe or a quote can be a part of a literal only if it is paired. Starting and ending of the literal should be same, either apostrophe or quote.
Example
The following example shows valid and invalid Alphanumeric Literals −
Valid:
This is valid
"This is valid"
This isnt invalidInvalid:
This isinvalid
This isnt valid
Numeric Literal
A Numeric Literal is a combination of digits from 0 to 9, +, , or decimal point. Length can be up to 18 characters. Sign cannot be the rightmost character. Decimal point should not appear at the end.
Example
The following example shows valid and invalid Numeric Literals −
Valid:100+10.9-1.9Invalid:1,0010.10.9-
COBOL Word
COBOL Word is a character string that can be a reserved word or a user-defined word. Length can be up to 30 characters.
User-Defined
User-defined words are used for naming files, data, records, paragraph names, and sections. Alphabets, digits, and hyphens are allowed while forming userdefined words. You cannot use COBOL reserved words.
Reserved Words
Reserved words are predefined words in COBOL. Different types of reserved words that we use frequently are as follows −
Keywords like ADD, ACCEPT, MOVE, etc.
Special characters words like +, -, *, <, <=, etc
Figurative constants are constant values like ZERO, SPACES, etc. All the constant values of figurative constants are mentioned in the following table.
Figurative Constants
Sr.No.
Figurative Constants & Description
1
HIGH-VALUESOne or more characters which will be at the highest position in descending order.
2
LOW-VALUESOne or more characters have zeros in binary representation.
3
ZERO/ZEROESOne or more zero depending on the size of the variable.
4
SPACESOne or more spaces.
5
QUOTESSingle or double quotes.
6
ALL literalFills the data-item with Literal.
Print Page
Character Set
‘Characters’ are lowest in the hierarchy and they cannot be divided further. The COBOL Character Set includes 78 characters which are shown below −
Sr.No.
Character & Description
1
A-ZAlphabets(Upper Case)
2
a-zAlphabets (Lower Case)
3
0-9Numeric
4
Space
5
+Plus Sign
6
–Minus Sign or Hyphen
7
*Asterisk
8
/Forward Slash
9
$Currency Sign
10
,Comma
11
;Semicolon
12
.Decimal Point or Period
13
“Quotation Marks
14
(Left Parenthesis
15
)Right Parenthesis
16
>Greater than
17
<Less than
18
:Colon
19
‘Apostrophe
20
=Equal Sign
Coding Sheet
The source program of COBOL must be written in a format acceptable to the compilers. COBOL programs are written on COBOL coding sheets. There are 80 character positions on each line of a coding sheet.
Character positions are grouped into the following five fields −
Positions
Field
Description
1-6
Column Numbers
Reserved for line numbers.
7
Indicator
It can have Asterisk (*) indicating comments, Hyphen (-) indicating continuation and Slash ( / ) indicating form feed.
8-11
Area A
All COBOL divisions, sections, paragraphs and some special entries must begin in Area A.
12-72
Area B
All COBOL statements must begin in area B.
73-80
Identification Area
It can be used as needed by the programmer.
Example
The following example shows a COBOL coding sheet −
000100IDENTIFICATIONDIVISION.000100000200PROGRAM-ID. HELLO.000101000250* THIS IS A COMMENT LINE000102000300PROCEDUREDIVISION.000103000350 A000-FIRST-PARA.000104000400DISPLAY Coding Sheet.000105000500STOPRUN.000106
JCL to execute the above COBOL program −
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS= A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
When you compile and execute the above program, it produces the following result −
Coding Sheet
Character Strings
Character strings are formed by combining individual characters. A character string can be a
Comment,
Literal, or
COBOL word.
All character strings must be ended with separators. A separator is used to separate character strings.
Frequently used separators − Space, Comma, Period, Apostrophe, Left/Right Parenthesis, and Quotation mark.
Comment
A comment is a character string that does not affect the execution of a program. It can be any combination of characters.
There are two types of comments −
Comment Line
A comment line can be written in any column. The compiler does not check a comment line for syntax and treats it for documentation.
Comment Entry
Comment entries are those that are included in the optional paragraphs of an Identification Division. They are written in Area B and programmers use it for reference.
The text highlighted in Bold are the commented entries in the following example −
000100IDENTIFICATIONDIVISION.000100000150PROGRAM-ID. HELLO.000101000200AUTHOR. TUTORIALSPOINT.000102000250* THIS IS A COMMENT LINE000103000300PROCEDUREDIVISION.000104000350 A000-FIRST-PARA.000105000360/First Para Begins - Documentation Purpose 000106000400DISPLAY Comment line.000107000500STOPRUN.000108
JCL to execute above COBOL program −
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS= A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
When you compile and execute the above program, it produces the following result −
Comment Line
Literal
Literal is a constant that is directly hard-coded in a program. In the following example, “Hello World” is a literal.
PROCEDUREDIVISION.DISPLAY'Hello World'.
There are two types of literals as discussed below −
Alphanumeric Literal
Alphanumeric Literals are enclosed in quotes or apostrophe. Length can be up to 160 characters. An apostrophe or a quote can be a part of a literal only if it is paired. Starting and ending of the literal should be same, either apostrophe or quote.
Example
The following example shows valid and invalid Alphanumeric Literals −
Valid:
This is valid
"This is valid"
This isnt invalidInvalid:
This isinvalid
This isnt valid
Numeric Literal
A Numeric Literal is a combination of digits from 0 to 9, +, , or decimal point. Length can be up to 18 characters. Sign cannot be the rightmost character. Decimal point should not appear at the end.
Example
The following example shows valid and invalid Numeric Literals −
Valid:100+10.9-1.9Invalid:1,0010.10.9-
COBOL Word
COBOL Word is a character string that can be a reserved word or a user-defined word. Length can be up to 30 characters.
User-Defined
User-defined words are used for naming files, data, records, paragraph names, and sections. Alphabets, digits, and hyphens are allowed while forming userdefined words. You cannot use COBOL reserved words.
Reserved Words
Reserved words are predefined words in COBOL. Different types of reserved words that we use frequently are as follows −
Keywords like ADD, ACCEPT, MOVE, etc.
Special characters words like +, -, *, <, <=, etc
Figurative constants are constant values like ZERO, SPACES, etc. All the constant values of figurative constants are mentioned in the following table.
Figurative Constants
Sr.No.
Figurative Constants & Description
1
HIGH-VALUESOne or more characters which will be at the highest position in descending order.
2
LOW-VALUESOne or more characters have zeros in binary representation.
3
ZERO/ZEROESOne or more zero depending on the size of the variable.
A COBOL program structure consists of divisions as shown in the following image −
A brief introduction of these divisions is given below −
Sections are the logical subdivision of program logic. A section is a collection of paragraphs.
Paragraphs are the subdivision of a section or division. It is either a user-defined or a predefined name followed by a period, and consists of zero or more sentences/entries.
Sentences are the combination of one or more statements. Sentences appear only in the Procedure division. A sentence must end with a period.
Statements are meaningful COBOL statements that perform some processing.
Characters are the lowest in the hierarchy and cannot be divisible.
You can co-relate the above-mentioned terms with the COBOL program in the following example −
It is the first and only mandatory division of every COBOL program. The programmer and the compiler use this division to identify the program. In this division, PROGRAM-ID is the only mandatory paragraph. PROGRAM-ID specifies the program name that can consist 1 to 30 characters.
Try the following example using the Live Demo option online.
IDENTIFICATIONDIVISION.PROGRAM-ID. HELLO.PROCEDUREDIVISION.DISPLAY'Welcome to Tutorialspoint'.STOPRUN.
Given below is the JCL to execute the above COBOL program.
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS= A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
When you compile and execute the above program, it produces the following result −
Welcome to Tutorialspoint
Environment Division
Environment division is used to specify input and output files to the program. It consists of two sections −
Configuration section provides information about the system on which the program is written and executed. It consists of two paragraphs −
Source computer − System used to compile the program.
Object computer − System used to execute the program.
Input-Output section provides information about the files to be used in the program. It consists of two paragraphs −
File control − Provides information of external data sets used in the program.
I-O control − Provides information of files used in the program.
Data division is used to define the variables used in the program. It consists of four sections −
File section is used to define the record structure of the file.
Working-Storage section is used to declare temporary variables and file structures which are used in the program.
Local-Storage section is similar to Working-Storage section. The only difference is that the variables will be allocated and initialized every time a program starts execution.
Linkage section is used to describe the data names that are received from an external program.
COBOL Program
IDENTIFICATIONDIVISION.PROGRAM-ID. HELLO.ENVIRONMENTDIVISION.INPUT-OUTPUTSECTION.FILE-CONTROL.SELECT FILEN ASSIGNTOINPUT.ORGANIZATIONISSEQUENTIAL.ACCESSISSEQUENTIAL.DATADIVISION.FILESECTION.FD FILEN
01 NAME PICA(25).WORKING-STORAGESECTION.01 WS-STUDENT PICA(30).01 WS-ID PIC9(5).LOCAL-STORAGESECTION.01 LS-CLASS PIC9(3).LINKAGESECTION.01 LS-ID PIC9(5).PROCEDUREDIVISION.DISPLAY'Executing COBOL program using JCL'.STOPRUN.
The JCL to execute the above COBOL program is as follows −
When you compile and execute the above program, it produces the following result −
Executing COBOL program using JCL
Procedure Division
Procedure division is used to include the logic of the program. It consists of executable statements using variables defined in the data division. In this division, paragraph and section names are user-defined.
There must be at least one statement in the procedure division. The last statement to end the execution in this division is either STOP RUN which is used in the calling programs or EXIT PROGRAM which is used in the called programs.
IDENTIFICATIONDIVISION.PROGRAM-ID. HELLO.DATADIVISION.WORKING-STORAGESECTION.01 WS-NAME PICA(30).01 WS-ID PIC9(5)VALUE12345.PROCEDUREDIVISION.
A000-FIRST-PARA.DISPLAY'Hello World'.MOVE'TutorialsPoint'TO WS-NAME.DISPLAY"My name is : "WS-NAME.DISPLAY"My ID is : "WS-ID.STOPRUN.
JCL to execute the above COBOL program −
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS= A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
When you compile and execute the above program, it produces the following result −
Hello World
My name is : TutorialsPoint
My ID is : 12345
We have set up the COBOL Programming environment online, so that you can compile and execute all the available examples online. It gives you confidence in what you are reading and enables you to verify the programs with different options. Feel free to modify any example and execute it online.
For most of the examples given in this tutorial, you will find a Try it option in our website code sections at the top right corner that will take you to the online compiler. So just make use of it and enjoy your learning.
Installing COBOL on Windows/Linux
There are many Free Mainframe Emulators available for Windows which can be used to write and learn simple COBOL programs.
One such emulator is Hercules, which can be easily installed on Windows by following a few simple steps as given below −
Download and install the Hercules emulator, which is available from the Hercules’ home site: www.hercules-390.eu
Once you have installed the package on Windows machine, it will create a folder like C:/hercules/mvs/cobol.
Run the Command Prompt (CMD) and reach the directory C:/hercules/mvs/cobol on CMD.
The complete guide on various commands to write and execute a JCL and COBOL programs can be found at:www.jaymoseley.com/hercules/installmvs/instmvs2.htm
Hercules is an open-source software implementation of the mainframe System/370 and ESA/390 architectures, in addition to the latest 64-bit z/Architecture. Hercules runs under Linux, Windows, Solaris, FreeBSD, and Mac OS X.
A user can connect to a mainframe server in a number of ways such as thin client, dummy terminal, Virtual Client System (VCS), or Virtual Desktop System (VDS). Every valid user is given a login id to enter into the Z/OS interface (TSO/E or ISPF).
Compiling COBOL Programs
In order to execute a COBOL program in batch mode using JCL, the program needs to be compiled, and a load module is created with all the sub-programs. The JCL uses the load module and not the actual program at the time of execution. The load libraries are concatenated and given to the JCL at the time of execution using JCLLIB or STEPLIB.
There are many mainframe compiler utilities available to compile a COBOL program. Some corporate companies use Change Management tools like Endevor, which compiles and stores every version of the program. This is useful in tracking the changes made to the program.
IGYCRCTL is an IBM COBOL compiler utility. The compiler options are passed using the PARM parameter. In the above example, RMODE instructs the compiler to use relative addressing mode in the program. The COBOL program is passed using the SYSIN parameter. Copybook is the library used by the program in SYSLIB.
Executing COBOL Programs
Given below is a JCL example where the program MYPROG is executed using the input file MYDATA.URMI.INPUT and produces two output files written to the spool.
The load module of MYPROG is located in MYDATA.URMI.LOADLIB. This is important to note that the above JCL can be used for a non-DB2 COBOL module only.
Executing COBOL-DB2 programs
For running a COBOL-DB2 program, a specialized IBM utility is used in the JCL and the program; DB2 region and required parameters are passed as input to the utility.
The steps followed in running a COBOL-DB2 program are as follows −
When a COBOL-DB2 program is compiled, a DBRM (Database Request Module) is created along with the load module. The DBRM contains the SQL statements of the COBOL programs with its syntax checked to be correct.
The DBRM is bound to the DB2 region (environment) in which the COBOL will run. This can be done using the IKJEFT01 utility in a JCL.
After the bind step, the COBOL-DB2 program is run using IKJEFT01 (again) with the load library and the DBRM library as the input to the JCL.
In the above example, MYCOBB is the COBOL-DB2 program run using IKJEFT01. Please note that the program name, DB2 Sub-System Id (SSID), and DB2 Plan name are passed within the SYSTSIN DD statement. The DBRM library is specified in the STEPLIB.
COBOL is a high-level language. One must understand the way COBOL works. Computers only understand machine code, a binary stream of 0s and 1s. COBOL code must be converted into machine code using a compiler. Run the program source through a compiler. The compiler first checks for any syntax errors and then converts it into machine language. The compiler creates an output file which is known as load module. This output file contains executable code in the form of 0s and 1s.
Evolution of COBOL
During 1950s, when the businesses were growing in the western part of the world, there was a need to automate various processes for ease of operation and this gave birth to a high-level programming language meant for business data processing.
In 1959, COBOL was developed by CODASYL (Conference on Data Systems Language).
The next version, COBOL-61, was released in 1961 with some revisions.
In 1968, COBOL was approved by ANSI as a standard language for commercial use (COBOL-68).
It was again revised in 1974 and 1985 to develop subsequent versions named COBOL-74 and COBOL-85 respectively.
In 2002, Object-Oriented COBOL was released, which could use encapsulated objects as a normal part of COBOL programming.
Importance of COBOL
COBOL was the first widely used high-level programming language. It is an English-like language which is user friendly. All the instructions can be coded in simple English words.
COBOL is also used as a self-documenting language.
COBOL can handle huge data processing.
COBOL is compatible with its previous versions.
COBOL has effective error messages and so, resolution of bugs is easier.
Features of COBOL
Standard Language
COBOL is a standard language that can be compiled and executed on machines such as IBM AS/400, personal computers, etc.
Business Oriented
COBOL was designed for business-oriented applications related to financial domain, defense domain, etc. It can handle huge volumes of data because of its advanced file handling capabilities.
Robust Language
COBOL is a robust language as its numerous debugging and testing tools are available for almost all computer platforms.
Structured Language
Logical control structures are available in COBOL which makes it easier to read and modify. COBOL has different divisions, so it is easy to debug.