Download - Advanced Cobol
![Page 1: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/1.jpg)
Advanced COBOL
Dr. David E. Woolbright
2009
![Page 2: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/2.jpg)
Documentation
IBM Enterprise COBOL for z/OS
http://www-306.ibm.com/software/awdtools/cobol/zos/library/
Especially helpful for programmers:
Language Reference Manual
Programming Guide
![Page 3: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/3.jpg)
Course Outline
• QSAM File Processing- Defining files- Dynamic File processing in COBOL
• Subprograms– CALL– Parameter passing techniques– CANCEL– Nested programs– Recursion
• Tables– Single Dimension– Multi-Dimension– Subscripts and Indexes– Searching
![Page 4: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/4.jpg)
Course Outline
• Debugging– Basics– Dumps
• XML and COBOL– Introduction to XML– Parsers– Cobol Features– Parsing– Events
![Page 5: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/5.jpg)
Course Outline
• Files with Variable Length Records
• Strings– STRING– UNSTRING– INSPECT– Reference modification
• Pointers
• VSAM File Processing
![Page 6: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/6.jpg)
Course Outline
• Files with Variable Length Records
• Strings– STRING– UNSTRING– INSPECT– Reference modification
• Pointers
• VSAM File Processing
![Page 7: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/7.jpg)
QSAM File Processing
Queued Sequential Access Method
![Page 8: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/8.jpg)
QSAM Files
• Unkeyed, Sequentially created and processed• Records cannot change length or position• QSAM files on direct access storage can be modified
with REWRITE• ENVIRONMENT DIVISION.• FILE-CONTROL paragraph SELECT • I-O-CONTOL paragraph APPLY WRITE-ONLY• DATA DIVISION• FILE SECTION FD
![Page 9: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/9.jpg)
Environment Division - File Control
SELECT file-name1 OPTIONAL ASSIGN assignment-name TO
![Page 10: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/10.jpg)
Environment Division File-CONTROL
• Optional – used for files opened in I-O, INPUT, or EXTEND. File doesn’t have to be present when the program is executed.
• File-name1 – identifies an FD entry (internal file name)
• Assignment-name – identifies the external file. If name component of the SELECT clause is found in the JCL it is treated as a DD name. If not found in the JCL, then “name” is treated an an environment variable
![Page 11: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/11.jpg)
QSAM File Name
name label- S- • Label – documents for the programmer the device and device class to
which the file is assigned. No effect on execution. Must end with a dash
• S – Optional. Indicates sequential organization
![Page 12: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/12.jpg)
Environment Variables
![Page 13: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/13.jpg)
Environment Variables
• Defined as WORKING-STORAGE fields using value clauses
01 FILE-ENV-VAR PIC X(39)
VALUE “DYNFILE=DSN(INPUT.FILE) SHR”.
![Page 14: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/14.jpg)
Reserve Clause (optional)
RESERVE integer
AREA
AREAS
![Page 15: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/15.jpg)
RESERVE Clause
• Specifies the number of I/O buffers allocated the file at run-time
• If omitted, the number of buffers is taken from the DD statement. If none are specified, the system default is taken
![Page 16: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/16.jpg)
QSAM Buffering
• QSAM buffers can be allocated above the 16 MB line if all of the following are true:
- Enterprise COBOL - z/OS Language Environment - the programs are compiled with RENT and DATA(31) or compiled with NORENT and | RMODE(ANY) - the program is executing in AMODE 31 - the program is executing on MVS - the ALL31(ON) run-time option is used (for
EXTERNAL files)
![Page 17: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/17.jpg)
ORGANIZATION Clause (optional)
• ORGANIZATION IS SEQUENTIAL
• Other non-QSAM options: INDEXED, RELATIVE, LINE SEQUENTIAL
• Records are read and written in a serial manner
![Page 18: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/18.jpg)
PADDING Clause
PADDING data name
CHARACTER IS literal
Specifies a character for block padding on sequential files
Data name – a one character field
Literal – a one character alphanumeric literal or national symbol
![Page 19: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/19.jpg)
ACCESS MODE Clause
ACCESS SEQUENTIAL
MODE IS
Default mode is SEQUENTIAL
Options for other types of files include RANDOM and DYNAMIC
![Page 20: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/20.jpg)
FILE STATUS Clause
STATUS dname1
FILE IS dname2
- The operating system moves a value to dname1 and possibly dname2 after each I/O operation.
-dname1 - a two character alphanumeric or national field
-dname2 – used for VSAM
![Page 21: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/21.jpg)
Environment DivisionI-O-CONTROL
ENVIRONMENT DIVISION.INPUT-OUTPUT SECTION.FILE-CONTROL. SELECT …I-O-CONTROL. APPLY WRITE-ONLY ON MYFILE.
(Used for sequential variable blocked files.)
![Page 22: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/22.jpg)
Defining QSAM Files and Records
FILE-CONTROL.
SELECT CUSTOMER-MASTER
ASSIGN TO CUSTMAST
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL
FILE STATUS IS RC.
![Page 23: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/23.jpg)
DATA DIVISIONFILE SECTION - Sequential
![Page 24: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/24.jpg)
EXTERNAL
• The EXTERNAL clause specifies that a file connector is external, permitting file sharing between two programs in the same run unit
![Page 25: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/25.jpg)
GLOBAL
• GLOBAL clause specifies the file-connector name is available to the declaring program and all programs contained directly or indirectly
• Used for nested programs
![Page 26: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/26.jpg)
BLOCK CONTAINS
• BLOCK CONTAINS 0 RECORDS• If this clause is omitted, records are unblocked by default!
• Allows the blocksize to be specified in the JCL or by the operating system
• Code this Statement! (TSYS Standard)
![Page 27: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/27.jpg)
RECORD Clause
• Specifies the number of bytes in a record (fixed or variable)
• When omitted, the compiler determines lengths based on record descriptions.
• RECORD CONTAINS 80 CHARACTERS• RECORD CONTAINS 50 TO 80 CHARACTERS• RECORD IS VARYING IN SIZE
FROM 40 TO 60 CHARACTERS
DEPENDING ON REC-COUNT.
![Page 28: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/28.jpg)
RECORDING MODE
• Specifies the format of physical records in a QSAM file (ignored for VSAM)
• F – fixed size, V – variable size, U – unblocked, fixed or variable, S – spanned, large records that span a block
• RECORDING MODE IS F• RECORDING MODE IS V• RECORDING MODE IS U• RECORDING MODE IS S
![Page 29: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/29.jpg)
DATA RECORD Clause
• DATA RECORD clause identifies the data areas associated with the file
• Syntax checked but is only documentation
DATA RECORD IS INPUT-AREA.
DATA RECORDS ARE INPUT-AREA1
INPUT-AREA2
![Page 30: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/30.jpg)
FD Example
FD IN-FILE IS GLOBAL RECORDING MODE F BLOCK CONTAINS 0 RECORDS LABEL RECORDS ARE STANDARD RECORD CONTAINS 80 CHARACTERS DATA RECORD IS IN-AREA.01 IN-AREA. 05 …
![Page 31: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/31.jpg)
LABEL RECORDS
• Label records are records written at the beginning and end of DASD and Tape files that provide information about file
• Enterprise COBOL only supports standard labels
LABEL RECORDS ARE STANDARD
LABEL RECORDS ARE OMITTED
![Page 32: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/32.jpg)
Subprograms
![Page 33: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/33.jpg)
Calling a Subprogram
• Syntax for CALL CALL “subprog name”
[ USING [BY REFERENCE | BY CONTENT] ident1 …] END-CALL
• The subprog name usually refers to an 8 byte field that contains the program name to be called
• Static call is made when subprogram name is hard-coded and compiler option = NODYNAM
• Subprogram can be written in any supported language
![Page 34: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/34.jpg)
Calling a Subprogram• CALL variable-name
[ USING [BY REFERENCE | BY CONTENT | BY CONTENT LENGTH OF | BY CONTENT ADDRESS OF ] ident1 …] END-CALL
• The variable-name usually refers to an 8 byte field that contains the program name to be called
• Names can be longer with Enterprise COBOL• The variable-name can be modified as the
program is running to call different programs
![Page 35: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/35.jpg)
Calling a Subprogram
• Linking to the called program is dynamic• At TSYS, all calls are dynamic ( DYNAM
compiler option)• BY REFERENCE is the default• BY REFERENCE provides the subprogram with
access to a main program variable. The receiving variable is an alias for the passed variable
• BY CONTENT provides the subprogram with access to a copy of a main program variable
![Page 36: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/36.jpg)
Calling a Subprogram
• BY CONTENT ADDRESS OF provides a copy of the address of the passed variable (must be a linkage area name)
• BY CONTENT LENGTH provides a copy of the length of a variable
![Page 37: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/37.jpg)
Example Parameters
![Page 38: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/38.jpg)
The Called Program• Specifies the names of the receiving variables with a USING
statement in the PROCEDURE DIVISION statement or in an ENTRY statement
PROCEDURE DIVISION USING A.Or ENTRY “COMPUTE” USING COST RESULT.Or PROCEDURE DIVISION USING A COST RESULT.• The variables in the using statement are 01 group items defined in
the LINKAGE SECTION or 77 items LINKAGE SECTION. 01 A PIC X(8). O1 COST PIC S9(5) PACKED-DECIMAL. 01 RESULT PIC S9(5) BINARY.
![Page 39: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/39.jpg)
The Called Program
• The called program can return values to the calling program by modifying variables that are passed by reference
PROCEDURE DIVISION USING
COST.
…
MOVE ITEM-COST TO COST
![Page 40: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/40.jpg)
Exercise #1
• Create a main program that calls a subprogram
• Print “I am in the main program” in the main program
• Call the subprogram• Print “I am in the subprogram” in the
subprogram• Print “I am back in the main program” in
the main.
![Page 41: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/41.jpg)
Exercise #2
• Create a two variables X and Y in the main program (you pick the type and value).
• Print the values of X and Y in the main program• Pass X BY REFERENCE and Y BY CONTENT to the
subprogram• Print the variables in the subprogram• Change the values of each variable in the subprogram• Print the length of x by passing the length using BY
CONTENT LENGTH (Receiving variable PIC S9(8) BINARY)
• Print the values of the variables again in the main program
![Page 42: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/42.jpg)
Canceling a Subprogram
• CANCEL syntax CANCEL literal CANCEL identifier
• Canceling a program means the program will be in its initial state if the program is called again
• Canceling a program closes all files associated with an internal file connector of the canceled program
• No action is taken when canceling a previously canceled program or one that has not been dynamically called
![Page 43: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/43.jpg)
Exercise #3
• Have the main program call a subprogram four times.
• Create a local numeric variable Z in the subprogram with initial value 1.
• Each time the program is called, print Z and then add 1 to it.
• Repeat the experiment after adding “IS INITIAL” to the PROGRAM-ID
PROGRAM-ID. MYPROG IS INITIAL.
![Page 44: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/44.jpg)
Subprograms
• Subprograms remain in their last used state when they terminate with EXIT PROGRAM or GOBACK
• A program that is coded with INITIAL will always be called with its initial state
![Page 45: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/45.jpg)
Exercise #4
• Repeat Exercise #3, canceling each program after each subprogram call
![Page 46: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/46.jpg)
Return Codes
• Use the RETURN-CODE special register to test and transmit return codes through register 15
• After calling a subprogram, test RETURN-CODE to see if the subprogram completed normally
• At the end of a suprogram, set RETURN-CODE to indicate the results of the call
![Page 47: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/47.jpg)
Exercise #5
Write a main program that passes a numeric parameter, say X, to a subprogram. If the parameter is negative have the subprogram set a return code of 4. If the parameter is non-negative, the subprogram should set the return code to 0. Have the main program test the return code after the subprogram has completed. The main program should print a message indicating the type of number the subprogram received. Try running the main program passing negative and non-negative values for X.
![Page 48: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/48.jpg)
External Files
• Files can be shared by multiple programs in the same run unit.
• Each program declares the file to be “EXTERNAL”
FD MYFILE IS EXTERNAL
RECORD CONTAINS 80 CHARACTERS
RECORDING MODE IS F.
01 MY-RECORD.
…
![Page 49: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/49.jpg)
External Files
• Each program has the same SELECT statement:
SELECT MY-FILE
ASSIGN TO MYFILE
FILE STATUS IS MYSTATUS
ORGANIZATION IS SEQUENTIAL.
![Page 50: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/50.jpg)
External Files
• Make the file status field external so there is only one shared field for all programs. Each program declares:
01 MYSTATUS PIC 99 EXTERNAL.• Be sure to work in locate-mode.
![Page 51: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/51.jpg)
Exercise #6
• Write a main program that opens a sequential file and calls a subprogram each time it needs a record. Write a subprogram that reads a single record and returns to the main program. Have the main program print all the records in the sequential file and then close the file.
• Share the same file between the two programs by making the file external with a shared file status field.
![Page 52: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/52.jpg)
PROCEDURE DIVISION…RETURNING
• An alternate form of passing information back to a calling program is provided:
PROCEDURE DIVISION RETURNING dataname
• To call a “Function” the invocation is: CALL program-name RETURNING dataname• Avoid this alternative in favor of Pass By
Reference.
![Page 53: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/53.jpg)
Nested Programs
• Avoided in production programs at TSYS• Convenient for developing (one file, one
compilation)• Nested programs can be separated easily
into regular programs after debugging • Can be used instead of PERFORM• CALL to a nested program is as efficient
as a PERFORM• Each program ends with END PROGRAM
![Page 54: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/54.jpg)
Nested Program StructureID DIVISION.PROGRAM-ID. X.PROCEDURE DIVISION. CALL “X1” GOBACK .ID DIVISION.PROGRAM-ID. X1.PROCEDURE DIVISION. DISPLAY “I AM IN X1” GOBACK .END PROGRAM X1.END PROGRAM X.
PROGRAM X
PROGRAM
X1
![Page 55: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/55.jpg)
Exercise #7
• Convert one of your main programs and subprograms to a nested program version
• Canceling only makes sense for dynamically called programs
• Cause an abend in your subprogram. Look at the storage dump and error information. Is it any harder to debug than a regular program?
![Page 56: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/56.jpg)
COBOL is Recursive Now
• A COBOL program can call itself
• To make a program recursive, add “IS RECURSIVE” to the PROGRAM-ID statement
PROGRAM-ID. SUBPROG IS RECURSIVE.
• Nested programs cannot be recursive
![Page 57: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/57.jpg)
Passing a Parm with JCL
• A parm can be coded on the EXEC statement in order to pass a parameter to the program that is being executed:
// EXEC PGM=PROGNAME,PARM=‘HI there!' • The COBOL program will receive the parm through the
LINKAGE SECTION• Code a LINKAGE SECTION description similar to this: 01 PARM-BUFF. 05 PARM-LEN PIC S9(4) BINARY. 05 PARM-DATA PIC X(256).
• Code a using statement on the PROCEDURE DIVISION PROCEDURE DIVISION USING PARM-BUFF.
![Page 58: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/58.jpg)
Passing a Parm with JCL
• The parm field is variable in length
• Use the length field and reference modification to move variable length data
MOVE PARM-DATA(1:PARM-LEN)TO PARMO
![Page 59: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/59.jpg)
Exercise #8
• Try coding a main program that receives a parm and prints it out
• Run the program with the following EXEC statements:
• // EXEC PGM=PROGNAME,PARM=‘HI!‘• // EXEC PGM=PROGNAME,PARM=‘HI THERE!‘• // EXEC PGM=PROGNAME,PARM=‘ABCDEFGHIJKLMNOPQRSTUV'
![Page 60: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/60.jpg)
Omitted Parameters
• You can leave out some arguments when coding a CALL statement by coding OMITTED in place of the passed variable
CALL “THATPROG” USING P1,OMITTED,P3• Test for the OMITTED parameter by checking to
see if the address of the received parm is NULL. PROCEDURE DIVISION USING X Y Z. …
IF ADDRESS OF Y = NULL DISPLAY “PARM Y WAS NOT PASSED” END-IF
![Page 61: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/61.jpg)
Tables
![Page 62: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/62.jpg)
Creating A Single Dimension Table
• Build a storage area with list of data values defined with multiple picture clauses
• Redefine the storage area as a single dimension table by defining a typical table entry as an “occuring” item.
![Page 63: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/63.jpg)
Creating A Single Dimension Table
01 DAY-TABLE-VALUES. 05 PIC X(9) VALUE 'SUNDAY '. 05 PIC X(9) VALUE 'MONDAY '. 05 PIC X(9) VALUE 'TUESDAY '. 05 PIC X(9) VALUE 'WEDNESDAY'. 05 PIC X(9) VALUE 'THURSDAY '. 05 PIC X(9) VALUE 'FRIDAY '. 05 PIC X(9) VALUE 'SATURDAY '. 01 DAY-TABLE REDEFINES DAY-TABLE-VALUES. 05 WEEKDAY PIC X(9) OCCURS 7 TIMES.
![Page 64: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/64.jpg)
“Fat” Single-Dimension Tables
01 EMPLOYEE-TABLE. 05 EMPLOYEE-REC OCCURS 100 TIMES. 15 EMP-NO PIC X(5). 15 NAME PIC X(20). 15 LOC-CODE. 25 TERR-NO PIC XX. 25 OFFICE-NO PIC XX.
![Page 65: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/65.jpg)
Employee Table
12345 Joe Brown 10 20
12345 Joe Brown 10 20 12345 Joe Brown 10 20 54321 Betty Smith 30 40
54555 Joy Dokes 31 45
54321 Jim Doyle 32 90
EMP-NO(4)NAME(3)
EMPLOYEE-REC(1)
LOC-CODE(3)
![Page 66: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/66.jpg)
Exercise #9
• Implement a single dimension table of days. Print the table from beginning to end
• Turn the table into a “fat” table by adding a column with the number of letters in each day name.
• Print each day name and the number of letters it contains.
![Page 67: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/67.jpg)
Multi-Dimension Tables
• COBOL supports up to 7 dimensions in tables
• Use OCCURS within OCCURS to add multiple dimensions
• 01 EMP-TABLE
05 EMPLOYEE OCCURS 100 TIMES.
10 NAME PIC X(30).
10 HOURS PIC S99 OCCURS 7 TIMES.
![Page 68: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/68.jpg)
Multi-Dimension Table
• 01 EMP-TABLE.
05 EMPLOYEE OCCURS 3 TIMES.
10 NAME PIC X(30).
10 HRS PIC S99 OCCURS 3 TIMES.
NAME(1)
NAME(2)
NAME(3)
HRS(1,1)
HRS(2,1)
HRS(3,1)
HRS(1,2) HRS(1,3)
HRS(2,2) HRS(2,3)
HRS(3,3)HRS(3,2)
EMPLOYEE(3)
![Page 69: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/69.jpg)
Exercise #10
• Create a table of integers with 4 rows and 5 columns.
• Print the table row by row• Print the table column by column• Compute and print the sum of each row• Compute and print the sum of each
column• Compute and print the sum of all entries in
the table
![Page 70: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/70.jpg)
Creating Tables with Indexes
• 01 EMPLOYEE –TABLE.
05 EMPLOYEE OCCURS 100 TIMES
INDEXED BY I,J.• 01 SALES-TABLE.
05 MONTH-RECORD OCCURS 12 TIMES
INDEXED BY M.
10 NAME PIC X(30).
2O AMOUNT PIC 9(5)V99 PACKED-DECIMAL
OCCURS 31 TIMES
INDEXED BY D.
![Page 71: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/71.jpg)
Subscripts vs Indexes
• Subscripts– Represent an occurrence number– User defined as a numeric field – best to
choose USAGE IS BINARY– Printable (since they are numeric)– Can use relative subscripts J+1 or J-3– Manipulated with PERFORM loops,
assignments, and arithmetic commands
![Page 72: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/72.jpg)
Subscripts vs Indexes
• Indexes– Represent a displacement value from the start
of a table.– More efficient than subscripts– Created automatically when a table is defined
with indexes– Can’t be printed– Manipulated with PERFORM loops, and SET
statements
![Page 73: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/73.jpg)
SET Statements
• Examples– SET J TO K– SET J TO 1– SET K UP BY 1– SET K DOWN BY 1– SET K TO K + 1
![Page 74: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/74.jpg)
Exercise #11
• Convert Exercise #10 so that you are using indexes instead of subscripts
![Page 75: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/75.jpg)
Sequential Search
• COBOL provides a SEARCH command that provides a sequential search for tables that have indexes
• Table entries do not have to be sorted
• AT END clause provides code in the situation that the search is unsuccessful
• Searching starts with the current index value
![Page 76: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/76.jpg)
SEARCH
![Page 77: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/77.jpg)
Sequential Searching• 01 EMPLOYEE-TABLE. 05 EMPLOYEE OCCURS 100 TIMES INDEXED BY I-NDX. 10 EMP-NO PIC 9(5). 10 EMP-RANK PIC X(5).…SET I-NDX TO 1SEARCH EMPLOYEE AT END DISPLAY ‘NOT FOUND’ WHEN EMP-NO(I-NDX) = 12345 DISPLAY EMP-RANK(I-NDX)END-SEARCH
![Page 78: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/78.jpg)
Sequential Searching• 01 EMPLOYEE-TABLE. 05 EMPLOYEE OCCURS 100 TIMES INDEXED BY I-NDX. 10 EMP-NO PIC 9(5). 10 EMP-RANK PIC X(5).…SET I-NDX TO 1SEARCH EMPLOYEE AT END DISPLAY ‘NOT FOUND’ WHEN EMP-NO(I-NDX) < 10000 DISPLAY EMP-RANK(I-NDX) WHEN EMP-NO(I-NDX) > 2000 DISPLAY EMP-RANK(I-NDX)END-SEARCH
![Page 79: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/79.jpg)
Exercise #12
• Create a fat single dimension table with the data in the file DATA1. Read the file and store the second (Item #) and third fields (Item name) in the table.
• Assume a fixed size table of 40 items.
• Sequentially search the table for item # 400 and 450. Print out the results of the search.
![Page 80: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/80.jpg)
Binary Searching
• Entire table is searched. No need to initialize an index
• Table must have an ASCENDING or DESCENDING KEY IS clause. Table must be sorted.
• Only one When clause and WHEN clause is one or more “equal” tests joined by AND operators
• AT END clause is invoked if the WHEN clause is never satisfied
![Page 81: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/81.jpg)
Binary Search
![Page 82: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/82.jpg)
Binary Searching• 01 EMPLOYEE-TABLE. 05 EMPLOYEE OCCURS 100 TIMES ASCENDING KEY IS EMP-NO INDEXED BY I-NDX. 10 EMP-NO PIC 9(5). 10 EMP-RANK PIC X(5).…SEARCH ALL EMPLOYEE AT END DISPLAY ‘NOT FOUND’ WHEN EMP-NO(I-NDX) = 12345 DISPLAY EMP-RANK(I-NDX)END-SEARCH
![Page 83: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/83.jpg)
SEARCH ALL• SEARCH ALL performs a binary search with an index• ENTRIES MUST BE IN ORDER • No SET necessary (whole table searched)01 SALES-TAX. 05 TAB-ENTRIES OCCURS 100 TIMES ASCENDING KEY ZIPCODE INDEXED BY K. 10 ZIPCODE PIC 9(5). 10 RATE PIC V999.
SEARCH ALL TAB-ENTRIES AT END MOVE 0 TO TAX WHEN ZIPCODE(K) = ZIPIN COMPUTE TAX = RATE(K) * AMOUNTEND-SEARCH
![Page 84: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/84.jpg)
SEARCH ALL CONSTRAINTS
• The condition following WHEN must test for equality
• Compound conditions with ANDs not Ors
• Only one WHEN clause
• VARYING not allowed
• OCCURS item and its index must appear on the left of the equal sign– WHEN TEMP(K) = 80
![Page 85: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/85.jpg)
SEARCH ALL Constraints
• Table must indicate ASCENDING or DESCENDING KEY
01 TABLE. 05 CUST-REC OCCURS 40 TIMES ASCENDING KEY CUST INDEXED BY K. 10 CUST PIC 9(4). 10 RATE PIC V999.
![Page 86: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/86.jpg)
Exercise #13
• Convert Exercise #12 to a binary search.
![Page 87: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/87.jpg)
Variable Length Tables
• Storage for variable length tables is statically created
• To create a variable length table, use an alternative version of OCCURS
Example: OCCURS 1 TO 100 TIMES• To create a variable length table add a
DEPENDING ON clause to the table definition Example: DEPENDING ON REC-COUNT
![Page 88: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/88.jpg)
Variable Length Tables
• After loading the table with entries, set the index to point at the last item. Move the index to the DEPENDING ON field
• 01 CUST-TABLE.
05 CUSTOMER OCCURS 1 TO 50 TIMES
DEPENDING ON C-COUNT
ASCENDING KEY IS AGE
INDEXED BY I.
10 NAME PIC X(20).
10 AGE PIS S999.
![Page 89: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/89.jpg)
Exercise #14
• Convert Exercise #12 to a variable length table.
• Assume you don’t know how many items will be in the table, but the range is 30 to 100 items.
![Page 90: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/90.jpg)
Intrinsic Functions
• MEAN ( ARG1, ARG2,…)• MEDIAN (ARG1, ARG2…)• STANDARD-DEVIATION(ARG1,ARG2,…)• VARIANCE (ARG1,ARG2, …)• RANGE (ARG1, ARG2, …)• MAX (ARG1, ARG2, …)• MIN (ARG1, ARG2, …)• ORD-MIN (ARG1,ARG2,…)• ORD-MAX (ARG1,ARG2,…)• SUM (ARG1, ARG2, …)
![Page 91: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/91.jpg)
Intrinsic Functions
• CURRENT-DATE• UPPER-CASE (ARG)• LOWER-CASE(ARG)• ANNUITY(RATE,NO-OF-PAYMENTS)- returns a decimal fraction that when multiplied by loan amount produces the payment. Rate must be consistent with payment period.
• PRESENT-VALUE(RATE,AMT1,AMT2,…) – returns the present value of future payments
![Page 92: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/92.jpg)
Intrinsic Functions
• SQRT(ARG)• REM(ARG1,ARG2) –returns the remainder of arg1 divided by arg2
• MOD(ARG1,ARG2)- similar to REM but with integer arguments
• INTEGER(ARG) – the greatest integer less than or equal to ARG
• INTEGER-PART(ARG) – the integer part of ARG
• NUMVAL(ARG) – the numeric value of an argument that contains leading spaces, sign, or decimal point
![Page 93: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/93.jpg)
Intrinsic Function Syntax
• FUNCTION function-name [(arg1 …]
• Arguments can be literals, variables, expressions, other functions
• Functions can operate on tables by using the word ALL for the subscript
COMPUTE X = FUNCTION SUM(SALARY(ALL))
COMPUTE Y = FUNCTION SUM(PRICE(1 ALL)) • Usually used with COMPUTE or MOVE
![Page 94: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/94.jpg)
Exercise #15
• Using Exercise #10 and intrinsic functions, compute the minimum value of each row and the mean of the entire array.
![Page 95: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/95.jpg)
Reconsidering Tables
• With vast amounts of main storage today, you should consider the types of file operations you are using and whether or not an application could benefit by pulling an entire file (or part of a file) into main storage. Working directly with records in memory is very efficient and can speed up an application greatly
• Most of the time spent in an application is in I/O.
![Page 96: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/96.jpg)
Files with Variable Length Records
![Page 97: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/97.jpg)
Variable Length Records
FD CUSTFILE
RECORD IS VARYING IN SIZE
FROM 1 TO 80 CHARACTERS
DEPENDING ON RECSIZE.
When a record is read from a file, defined with the RECORD IS VARYING IN SIZE.. DEPENDING ON ident phrase, the size of the record read into the buffer is moved into the data-item ident
To write to a file, defined with the RECORD IS VARYING IN SIZE.. DEPENDING ON ident phrase, the size of the record to be written must first be moved to ident data-item, and then the WRITE statement must be executed.
![Page 98: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/98.jpg)
Exercise #16
• Use program WRITEVAR as a model. Run the program to create a variable length record file.
• Write a program READVAR that reads the file and prints out the total sales for each person
![Page 99: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/99.jpg)
Strings
![Page 100: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/100.jpg)
Joining Strings
• Use STRING to join multiple parts of strings into an entirely new string
STRING ident1 DELIMITED ident2 literal BY literal
size
INTO ident3
POINTER ident4
WITH
OVERFLOW imperative stmt
ON
![Page 101: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/101.jpg)
Joining Strings
NOT OVERFLOW imperative stmt END-STRING
![Page 102: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/102.jpg)
Example String Operation
STRING ID-1 DELIMITED BY “*” ID-2 ID-3 DELIMITED BY SIZE
INTO ID-4 WITH POINTER PTR
END-STRING
ID-1
ABC*DE
ID-2
1234*5
ID-3
XYZ
ID-4 (Assume PIC X(20)
ABC1234*5XYZ
PTR
13
Assume PTR is
Initially 1
![Page 103: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/103.jpg)
STRING
![Page 104: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/104.jpg)
STRING Operation
• String does not replace rightmost character with spaces
• The POINTER field is a numeric field that afterwards contains the position of the next byte in the receiving field that would have been processed. (Max = string length + 1)
![Page 105: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/105.jpg)
Exercise #17
• Read the file DATA1.• Create three fields in the input record: 1) cols 1 – 11 2) cols 15-18 3) cols 40-65 Remove the first part of field 1 up to the *. Remove all of field 2. Remove all of field 3 up to the first space String these three fields together. For example the first
record would produce “66660066PEANUT” Print the results of each record.
![Page 106: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/106.jpg)
UNSTRING
![Page 107: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/107.jpg)
UNSTRING
• Extracts a field into multiple strings and stores them into one or more fields
• DELIMITED BY indicates how each subfield ends
• If ALL is specified for a delimiter, successive occurrences of the delimiter are treated as one
UNSTRING ADDRESS DELIMITED BY ALL “ “ INTO STATE ZIP
WITH POINTER PTR
END-UNSTRING
![Page 108: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/108.jpg)
UNSTRING
• UNSTRING copies Characters from the source string to the destination strings according to the rules for alphanumeric moves.
• UNSTRING uses space filling. • The DELIMITED BY clause causes data
movement from the source string to the current destination string to end when
1) a delimiter is encountered in the source string
2) the end of the source string is reached.
![Page 109: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/109.jpg)
UNSTRING
• If DELIMITED BY is not used, data movement terminates when
1) the destination string is full 2) the end of the source string is reached • The UNSTRING terminates when 1) All the characters in the source string have been
processed 2) All the destination strings have been processed 3) An OVERFLOW condition is encountered when the
pointer is pointing outside the source string.
![Page 110: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/110.jpg)
UNSTRING EXAMPLE
UNSTRING ADDRESS DELIMITED BY ALL “ “
INTO STATE COUNT IN STCNT
ZIP COUNT IN ZIPCNT
WITH POINTER PTR
END-UNSTRING
![Page 111: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/111.jpg)
UNSTRING Example
UNSTRING ADDRESS DELIMITED BY "," INTO LINE(1) LINE(2) LINE(3) Line(4) TALLYING IN NOLINES END-UNSTRING.
• Tallying leaves the number of receiving fields that receive data in the named variable
![Page 112: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/112.jpg)
Exercise #18
• Read the file DATA1.
• For each record in the file, UNSTRING field 1-11 into two parts (separate at the *). Print each part.
![Page 113: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/113.jpg)
INSPECT Statement
![Page 114: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/114.jpg)
INSPECT Statement
![Page 115: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/115.jpg)
Formats
INSPECT has four formats: 1) TALLYING: used to count characters in a string.
2) REPLACING: used to replace a group of characters in a string with another group of characters.
3) TALLYING…REPLACING: combines both operations in one statement.
4) INSPECT …CONVERTING: converts each of a set of characters to its corresponding character in another set of characters.
![Page 116: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/116.jpg)
TALLYING
INSPECT LINE TALLYING ACOUNT
FOR ALL “A”
INSPECT LINE TALLYING XCOUNT
FOR ALL “X"
AFTER INITIAL “S"
BEFORE INITIAL “E".
![Page 117: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/117.jpg)
REPLACING
INSPECT MYSTRING REPLACING ALL “X” BY “Y" AFTER INITIAL “A" BEFORE INITIAL “Z“
INSPECT MYSTRING REPLACING ALL “XXXX" BY “ABCD“ AFTER INITIAL “A“ BEFORE INITIAL “P"
![Page 118: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/118.jpg)
TALLYING … REPLACING
INSPECT LINE TALLYING ACOUNT
FOR ALL “A”
REPLACING ALL “X” BY “Y"
AFTER INITIAL “A"
BEFORE INITIAL “Z“
![Page 119: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/119.jpg)
CONVERTING
INSPECT MYTEXT
CONVERTING "abcdefghijklmnopqrstuvwxyz“
TO "ABCDEFGHIJKLMNOPQRSTUVWXYZ“
![Page 120: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/120.jpg)
Pointers
![Page 121: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/121.jpg)
Creating a Pointer
• 05 PTR USAGE IS POINTER. • 05 A-PTR POINTER.• These definitions create 4 byte fullwords
capable of containing addresses of memory locations
![Page 122: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/122.jpg)
Setting a Pointer
• SET PTR TO ADDRESS OF X
• SET PTR1 TO PTR2
![Page 123: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/123.jpg)
“Dropping a Linkage Area”
• To position a linkage section item onto a storage area, use SET ADDRESS
Linkage Section.
01 X PIC X(8).
SET ADDRESS OF X TO PTR
![Page 124: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/124.jpg)
Exercise #19
• Try running programs LINKED and LINKED1 in BCST.SICCC01.PDSLIB
![Page 125: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/125.jpg)
VSAM File Processing
Virtual Storage Access Method
![Page 126: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/126.jpg)
VSAM File Types
• ESDS – Entry Sequenced Data Set– Allows sequential processing
• RRDS – Relative Record Data Set– Allows sequential or random access by
relative record number
• KSDS – Key-Sequenced Data Set– Allows sequential, skip sequential, and
random processing by key
![Page 127: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/127.jpg)
VSAM
• VSAM data sets are known as Clusters
• For ESDS or RRDS the cluster consists of a data component
• For KSDS the cluster consists of a data component and an index component
• VSAM data is stored on DASD in control intervals which are grouped into control areas
![Page 128: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/128.jpg)
VSAM
• The Control Interval (CI) is the unit of data that transfers between the disk and virtual storage
• CI sizes are multiples of 2K with 4k being common
• CI’s can be constructed with free space to accommodate additions to the file
• Control Areas (CA) can be constructed with free space to accommodate additions
![Page 129: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/129.jpg)
VSAM
• VSAM dynamically manages the file by maintaining information in each CI and CA
• When a CI becomes too “full” the data it contains is split into two CI’s
• When a CA becomes too “full” the data it contains is split into two CA’s
• VSAM tries to keep records that are logically close together, physically close as well
![Page 130: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/130.jpg)
VSAM Indexes
![Page 131: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/131.jpg)
VSAM Components
![Page 132: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/132.jpg)
Access Method Services (AMS)
• AMS is a VSAM utility that provides numerous options– DEFINE CLUSTER– PRINT– REPRO– LISTCAT– DELETE– DEFINE ALTERNATEINDEX– DEFINE PATH– BLDINDEX
![Page 133: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/133.jpg)
VSAM JCL
• Unlike QSAM files, VSAM files must be allocated in a separate job step before data can be written to the file
• VSAM cluster can be created by deleting and then defining the cluster
• After the cluster is defined, a job can run which writes data to the file
![Page 134: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/134.jpg)
VSAM JCL
• Parameters:– INDEXED –KSDS– NONINDEXED – ESDS– NUMBERED – RRDS– KEYS ( len off) – primary key info– CISZ (size) – control interval size– FREESPACE (ci ca) – free space %’s
![Page 135: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/135.jpg)
MAKEKSDS• 000100 //TSYSAD2C JOB 'YOUR NAME',USER=TSYSAD2,REGION=2048K,MSGCLASS=V• 000200 //*MAIN CLASS=TSYSC,USER=TSYSAD2• 000300 //DEFINE EXEC PGM=IDCAMS• 000400 //SYSPRINT DD SYSOUT=*• 000500 //SYSIN DD *• 000600 DELETE TSYSAD2.PAYROLL.MASTER• 000700 DEFINE CLUSTER -• 000800 (NAME(TSYSAD2.PAYROLL.MASTER) -• 000900 INDEXED -• 001000 RECORDSIZE(31 31) -• 001100 KEYS(5 0) -• 001200 MGMTCLAS(STANDARD) -• 001210 FREESPACE(0 0) -• 001220 SHAREOPTIONS (3 3)) -• 001230 DATA (NAME(TSYSAD2.PAYROLL.MASTER.DATA) -• 001240 TRK(1 1) -• 001250 CONTROLINTERVALSIZE(4096)) -• 001260 INDEX (NAME(TSYSAD2.PAYROLL.MASTER.INDEX) -• 001270 TRK(1 1))• 001280 /*
![Page 136: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/136.jpg)
IDCAMS PRINT000100 //TSYSAD2P JOB
'A.STUDENT',USER=TSYSAD2,REGION=2048K,MSGCLASS=V 000200 //*MAIN CLASS=TSYSC,USER=TSYSAD2 000210 //* THIS IS AN IDCAMS PRINT 000220 //PRINT EXEC PGM=IDCAMS 000230 //SYSPRINT DD SYSOUT=* 000240 //SYSIN DD * 000250 PRINT INFILE(IFILE) - 000251 DUMP 000252 /* 000253 //IFILE DD DSN=TSYSAD2.PAYROLL.MASTER,DISP=SHR 000254 //
![Page 137: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/137.jpg)
IDCAMS REPRO• 000100 //TSYSAD2R JOB
'A.STUDENT',USER=TSYSAD2,REGION=2048K,MSGCLASS=V• 000200 //*MAIN CLASS=TSYSC,USER=TSYSAD2• 000210 //* THIS AN IDCAMS REPRO• 000220 //REPRO EXEC PGM=IDCAMS• 000230 //FILEIN DD DSN=TSYSAD2.PGM1.RESULTS,DISP=SHR• 000240 //FILEOUT DD
DSN=TSYSAD2.I10.PGM1.RESULTS,DISP=(NEW,CATLG,DELETE),• 000250 // UNIT=SYSDA,DCB=(RECFM=FB,LRECL=80),• 000251 // SPACE=(TRK,(1,1),RLSE)• 000252 //SYSIN DD *• 000253 REPRO -• 000254 INFILE(FILEIN) -• 000255 OUTFILE(FILEOUT)• 000256 /*• 000257 //AMSDUMP DD SYSOUT=*• 000258 //
![Page 138: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/138.jpg)
Creating a VSAM File• 000100 IDENTIFICATION DIVISION.• 000200 PROGRAM-ID. VSAM1.• 000300 ENVIRONMENT DIVISION.• 000400 INPUT-OUTPUT SECTION.• 000500 FILE-CONTROL.• 000600 SELECT PAYROLL-MASTER-OUT ASSIGN TO PAYMASTO• 000610 ORGANIZATION IS INDEXED• 000620 ACCESS IS SEQUENTIAL• 000630 RECORD KEY IS ID-OUT• 000640 FILE STATUS IS PM-STATUS.• 000700 SELECT PAYROLL-MASTER-IN ASSIGN TO PAYMASTI.
![Page 139: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/139.jpg)
Creating a VSAM File• 004410 01 PM-STATUS.• 004430 05 PM-STAT1 PIC X.• 004440 05 PM-STAT2 PIC X.• 004441 PROCEDURE DIVISION.• 004450 OPEN INPUT PAYROLL-MASTER-IN• 004460 OPEN OUTPUT PAYROLL-MASTER-OUT• 004461 IF PM-STATUS NOT = '00'• 004462 PERFORM 300-PRINT-STATUS• 004463 END-IF• 004470 PERFORM UNTIL ARE-THERE-MORE-RECORDS = 'NO '• 004480 READ PAYROLL-MASTER-IN• 004490 AT END• 004500 MOVE 'NO ' TO ARE-THERE-MORE-RECORDS• 004600 NOT AT END• 004700 PERFORM 200-READ-MODULE• 004800 END-READ• 004900 END-PERFORM• 005000 CLOSE PAYROLL-MASTER-IN• 005100 PAYROLL-MASTER-OUT• 005110 GOBACK
![Page 140: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/140.jpg)
Creating a VSAM File• 005130 200-READ-MODULE.• 005410 MOVE ID-IN TO ID-OUT• 005420 MOVE NAME-IN TO NAME-OUT• 005430 MOVE HOURS-IN TO HOURS-OUT• 005440 MOVE RATE-IN TO RATE-OUT• 005450 DISPLAY MASTER-REC-OUT• 005500 WRITE MASTER-REC-OUT• 005510 IF PM-STATUS NOT = '00'• 005520 PERFORM 300-PRINT-STATUS• 005530 END-IF• 005600 .• 005700 300-PRINT-STATUS.• 005800 DISPLAY 'FILE STATUS CODE:' PM-STATUS• 005900 GOBACK• 006000 .
![Page 141: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/141.jpg)
VSAM Error Strategy
• VSAM returns a status code after each operation
• It is imperative that you check each status code after each operation to insure that the program is proceeding normally
• The status code is a two byte field
![Page 142: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/142.jpg)
OPEN
• OPEN INPUT file-name …
• OPEN OUTPUT file-name …
• OPEN I-O file-name …
• OPEN EXTEND file-name …
For EXTEND, access mode must be sequential
![Page 143: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/143.jpg)
Reading for Sequential Access
READ file-name [NEXT] [RECORD] [INTO data-name] [AT END imperative stmt] [NOT AT END imperative stmt][END-READ]Specify NEXT if access is DYNAMIC and you want
sequential processingCan be omitted when access is SEQUENTIALINTO provides move mode I/OOmitting INTO provides locate mode I/O
![Page 144: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/144.jpg)
Reading for Random Access
READ file-name [RECORD]
[INTO data-name]
[INVALID KEY imperative stmt]
[NOT INVALID KEY imperative stmt]
[END-READ]
Be sure to set the key of the record you wish to read beforehand
![Page 145: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/145.jpg)
Writing
WRITE record-name [FROM data-name]
[INVALID KEY imperative stmt]
[NOT INVALID KEY imperative stmt]
[END-WRITE]
![Page 146: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/146.jpg)
REWRITE
REWRITE record-name [FROM data-name]
[INVALID KEY imperative stmt]
[NOT INVALID KEY imperative stmt]
[END-REWRITE]
A typical scenario is to read the record, modify it (can’t change the key field), and then rewrite it.
For random and dynamic access, you can REWRITE a record without first reading it.
![Page 147: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/147.jpg)
DELETE
DELETE file-name [RECORD] [INVALID KEY imperative stmt] [NOT INVALID KEY imperative stmt][END-DELETE]• DELETE can only be used for a file in I-O mode• If file is in sequential mode, the DELETE can
only be used after executing a READ statement for that record. (Omit INVALID KEY)
• If file is in random or dynamic mode, a DELETE can be issued without previously reading the record (specify INVALID KEY)
![Page 148: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/148.jpg)
STARTSTART file-name KEY IS EQUAL TO data-name = GREATER THAN > NOT LESS THAN NOT < >= [INVALID KEY imperative stmt] [NOT INVALID KEY imperative stmt][END-START]
• Used for sequential and skip-sequential processing• Does not return a record – positions you in the file
![Page 149: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/149.jpg)
File Status Codes• 00 Operation completed successfully• 02 Duplicate Key was found• 04 Invalid fixed length record• 05 The file was created when opened - Successful Completion• 07 CLOSE with REEL or NO REWIND executed for non tape
dataset.• 10 End of File encountered• 14 Attempted to READ a relative record outside file boundary• 21 Invalid Key - Sequence error• 22 Invalid Key - Duplicate Key found• 23 Invalid key - No record found• 24 Invalid Key - key outside boundary of file.
![Page 150: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/150.jpg)
File Status Codes• 30 Permanent I/O Error34 Permanent I/O Error - Record outside file
boundary• 35 OPEN, but file not found• 37 OPEN with wrong mode• 38 Tried to OPEN a LOCKed file• 39 OPEN failed, conflicting file attributes• 41 Tried to OPEN a file that is already open• 42 Tried to CLOSE a file that is not OPEN• 43 Tried to REWRITE without READing a record first• 44 Tried to REWRITE a record of a different length• 46 Tried to READ beyond End-of-file• 47 Tried to READ from a file that was not opened I-O or INPUT• 48 Tried to WRITE to a file that was not opened I-O or OUTPUT• 49 Tried to DELETE or REWRITE to a file that was not opened I-O
![Page 151: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/151.jpg)
File Status Codes
• 91 Password or authorization failed• 92 Logic Error• 93 Resource was not available (may be allocated to
CICS or another user)• 94 Sequential record unavailable or concurrent OPEN
error• 95 File Information invalid or incomplete• 96 No DD statement for the file• 97 OPEN successful and file integrity verified• 98 File is Locked - OPEN failed• 99 Record Locked - record access failed.
![Page 152: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/152.jpg)
Exercise #20
• Create a data file of records which is sorted on a key field (choose a 5 byte key). Creating an 80 byte record in a PDS is easiest. Let some of the keys be in the 10000 – 19999 range, some in range 20000 – 29999, some in range 30000 – 39999, and some in range 40000-49999. (VSAMDATA)
• Read the file and output a fixed size record VSAM file.
![Page 153: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/153.jpg)
Exercise #21
• Read the VSAM file you created in Exercise 20 and print out the records (your choice of format).
![Page 154: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/154.jpg)
Exercise #22
• Create a small file of keys. Some of the keys should match records in your VSAM file and some should not. (VSAMKEYS)
• Process the VSAM file randomly. Take each key, print it, and print the record if it is on the file, otherwise print a message indicating the record was not found.
![Page 155: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/155.jpg)
Exercise #23
• Process the VSAM file dynamically with skip-sequential processing.
• Issue a Start statement and print the records with keys in the range 20000-29999. Issue another START and print the records in the range 40000 – 49999.
![Page 156: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/156.jpg)
Exercise #24
• Create a small file of keys. Some of the keys should match records in your VSAM file and some should not.
• Process the VSAM file randomly. Take each key, read the VSAM file, and delete each record that is found. If the record is not found print a message indicating this.
![Page 157: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/157.jpg)
Alternate Indexes
• An alternate index provides a way to navigate through a VSAM cluster using an alternate key
• Creating an alternate index is a 3 step process:– DEFINE ALTERNATE INDEX– DEFINE PATH– BLDINDEX
![Page 158: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/158.jpg)
Define Alternateindex• //KC02107X JOB 'WOOLBRIGHT',REGION=2M,MSGCLASS=Q,MSGLEVEL=(0,0),• // NOTIFY=KC02107• //*----------------------------------------------------------*• //* VSAM• //*----------------------------------------------------------*• //STEPMAKE EXEC PGM=IDCAMS• //SYSPRINT DD SYSOUT=*• //SYSIN DD *• DELETE KC02107.SICCC01.MYVSAM.AIX• DEFINE ALTERNATEINDEX -• (NAME (KC02107.SICCC01.MYVSAM.AIX) -• RELATE (KC02107.SICCC01.MYVSAM) -• KEYS (20 5) -• NONUNIQUEKEY -• UPGRADE -• REUSE ) -• DATA (NAME (KC02107.SICCC01.MYVSAM.AIX.DATA) -• TRACKS(1 1)) -• INDEX (NAME (KC02107.SICCC01.MYVSAM.AIX.INDEX))• DEFINE PATH (NAME(KC02107.SICCC01.MYVSAM.PATH) -• PATHENTRY(KC02107.SICCC01.MYVSAM.AIX) -• UPDATE )• //
![Page 159: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/159.jpg)
BLDINDEX• //KC02107X JOB
'WOOLBRIGHT',REGION=2M,MSGCLASS=Q,MSGLEVEL=(0,0),• // NOTIFY=KC02107• //*----------------------------------------------------------*• //* VSAM BLDNDX CLUSTER *• //*----------------------------------------------------------*• //STEPMAKE EXEC PGM=IDCAMS• //SYSPRINT DD SYSOUT=*• //SYSIN DD *• BLDINDEX INDATASET(KC02107.SICCC01.MYVSAM) -• OUTDATASET(KC02107.SICCC01.MYVSAM.AIX)• /*• //
![Page 160: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/160.jpg)
VSAM REPRO• //KC02107X JOB
'WOOLBRIGHT',REGION=2M,MSGCLASS=Q,MSGLEVEL=(0,0),• // NOTIFY=KC02107• //*----------------------------------------------------------*• //* VSAM REPRO CLUSTER *• //*----------------------------------------------------------*• //STEPMAKE EXEC PGM=IDCAMS• //SYSPRINT DD SYSOUT=*• //SYSIN DD *• REPRO INDATASET(KC02107.ASM.DAT(VSAMDATA)) -• OUTDATASET(KC02107.SICCC01.MYVSAM)• /*• //
![Page 161: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/161.jpg)
Debugging
![Page 162: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/162.jpg)
Learn Hex Basics
Decimal:
• 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Hexadecimal
• 0 1 2 3 4 5 6 7 9 9 A B C D E F
![Page 163: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/163.jpg)
Learn Binary Basics
• Every digit is a power of 2
• 1 1 1 0 1 0 0 1
128 32 8 2 1
64 16 4
128+64+32+0+8+0+ 0+1 = 233
![Page 164: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/164.jpg)
Binary to Hex
• Conversion rule: Remove blocks of 4 binary digits and replace them with a single hex digit
• 1 1 0 1 1 1 0 0 0 0 1 1 1 0 1 1 D C 3 B• Hex dumps are made of hex digits and
represent binary values that are stored in memory – a short-hand notation
• 2 HEX DIGITS = 1 BYTE
![Page 165: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/165.jpg)
EBCDIC CharactersCHAR HEX CHAR HEX CHAR HEX CHAR HEX 0 = F0 A = C1 J = D1 1 = F1 B = C2 K = D2 S = E22 = F2 C = C3 L = D3 T = E33 = F3 D = C4 M = D4 U = E44 = F4 E = C5 N = D5 V = E55 = F5 F = C6 O = D6 W = E66 = F6 G = C7 P = D7 X = E77 = F7 H = C8 Q = D8 Y = E88 = F8 I = C9 R = D9 Z = E99 = F9
SPACE = 40 COMMA = 6B PERIOD = 4B * = 5C MINUS = 60
![Page 166: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/166.jpg)
Zoned Decimal Format
• Byte = 8 bits• Leftmost 4 bits = zone part• Rightmost 4 bits = numeric part• PIC S9999• PIC 99• PIC 99V99• One digit per byte – sign in zone portion of last
byte. Preferred signs – C +, D –• Signs: A C E F + B D -
ZONE NUMERIC
![Page 167: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/167.jpg)
Zoned Decimal Format
• PIC S999 VALUE 123 F1F2C3
• PIC 99V99 VALUE 12.34 F1F2F3C4
• PIC S99 VALUE -12 F1D2
• PIC S999 VALUE 0 F0F0C0
![Page 168: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/168.jpg)
Packed Decimal Format
• Two decimal digits per byte
• Sign stored in numeric portion of the rightmost byte 12|34|5C
• Decimal points are implied (not stored)
• Always an odd number of decimal digits
• Good choice for business arithmetic
![Page 169: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/169.jpg)
Packed Decimal
• PIC S999 PACKED-DECIMAL VALUE 123
123C• PIC S9(3)V99 PACKED-DECIMAL VALUE -123
00123D• PIC S9(4) PACKED-DECIMAL VALUE -98
00098D• PIC 9(7) PACKED-DECIMAL VALUE -32
COMPILE ERROR• PIC 9(7) PACKED-DECIMAL VALUE 32
0000032C
![Page 170: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/170.jpg)
Binary Data
• 1-4 digits = 2 bytes = halfword
• 5-9 digits = 4 bytes = fullword
• 10-18 digits = 8 bytes = doubleword
• PIC S9(4) BINARY = 2 BYTES
• PIC S9(5) BINARY = 4 BYTES
• PIC S9(9) BINARY = 4 BYTES
• PIC 9(8) BINARY = 4 BYTES
![Page 171: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/171.jpg)
Signed Binary
• Signed binary data is stored in 2’s complement format
• High order bit is a sign 1 is negative, 0 is positive
• 0001101 = 13 in decimal• 1110010 = -14• Conversion rule: Change the 1s to 0s and
0s to 1s, then add 1. This computes the 2s complement
![Page 172: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/172.jpg)
Pointers
USAGE IS POINTER – A 4 BYTE FULLWORD STORED IN BINARY
![Page 173: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/173.jpg)
Signed Binary
• Example: 111111Changing: 000000Add 1: 000000 + 1 = 0000011 is the complement so 111111 is -1
• Example: 110011 Changing: 001100 Add 1: 001100 + 1 = 001101 = 13 110011 = -13
![Page 174: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/174.jpg)
Display
• The answer to all debugging problems is to gain more information. DISPLAY can provide it.
![Page 175: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/175.jpg)
Finding the Problem• Display Filter View Print Options Help • -------------------------------------------------------------------------------• SDSF OUTPUT DISPLAY SICCC01A JOB22537 DSID 102 LINE 116 COLUMNS 02- 81 • COMMAND INPUT ===> SCROLL ===> CSR • Data Division Map • Data Definition Attribute codes (rightmost column) have the following meanings: • D = Object of OCCURS DEPENDING G = GLOBAL S =• E = EXTERNAL O = Has OCCURS clause U =• F = Fixed-length file OG= Group has own length definition V =• FB= Fixed-length blocked file R = REDEFINES VB=• Source Hierarchy and Base Hex-Displac• LineID Data Name Locator Blk Struc• 2 PROGRAM-ID BOMB1--------------------------------------------------------• 6 1 MYTABLE-VALUES. . . . . . . . . . . . . . . . BLW=00000 000 • 7 2 FILLER. . . . . . . . . . . . . . . . . . . BLW=00000 000 0 000• 8 2 MYPTR1. . . . . . . . . . . . . . . . . . . BLW=00000 010 0 000• 9 2 FILLER. . . . . . . . . . . . . . . . . . . BLW=00000 014 0 000• 10 2 FILLER. . . . . . . . . . . . . . . . . . . BLW=00000 024 0 000• 11 2 FILLER. . . . . . . . . . . . . . . . . . . BLW=00000 034 0 000• 12 2 FILLER. . . . . . . . . . . . . . . . . . . BLW=00000 044 0 000• 13 2 FILLER. . . . . . . . . . . . . . . . . . . BLW=00000 054 0 000• 14 2 FILLER. . . . . . . . . . . . . . . . . . . BLW=00000 064 0 000• 15 1 X . . . . . . . . . . . . . . . . . . . . . . BLW=00000 078 • 16 1 Y . . . . . . . . . . . . . . . . . . . . . . BLW=00000 080
![Page 176: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/176.jpg)
Data Division Map• 0Source Hierarchy and Base Hex-Displa• LineID Data Name Locator Blk Stru• 2 PROGRAM-ID BOMB1-------------------------------------------------------• 6 1 MYTABLE-VALUES. . . . . . . . . . . . . . . . BLW=00000 000 • 7 2 FILLER. . . . . . . . . . . . . . . . . . . BLW=00000 000 0 00• 8 2 MYPTR1. . . . . . . . . . . . . . . . . . . BLW=00000 010 0 00• 9 2 FILLER. . . . . . . . . . . . . . . . . . . BLW=00000 014 0 00• 10 2 FILLER. . . . . . . . . . . . . . . . . . . BLW=00000 024 0 00• 11 2 FILLER. . . . . . . . . . . . . . . . . . . BLW=00000 034 0 00• 12 2 FILLER. . . . . . . . . . . . . . . . . . . BLW=00000 044 0 00• 13 2 FILLER. . . . . . . . . . . . . . . . . . . BLW=00000 054 0 00• 14 2 FILLER. . . . . . . . . . . . . . . . . . . BLW=00000 064 0 00• 15 1 X . . . . . . . . . . . . . . . . . . . . . . BLW=00000 078 • 16 1 Y . . . . . . . . . . . . . . . . . . . . . . BLW=00000 080 • 17 1 Z . . . . . . . . . . . . . . . . . . . . . . BLW=00000 088 • 18 1 PTR . . . . . . . . . . . . . . . . . . . . . BLW=00000 090 • 20 1 ANIMAL. . . . . . . . . . . . . . . . . . . . BLL=00001 000 • 21 2 NAME. . . . . . . . . . . . . . . . . . . . BLL=00001 000 0 00• 22 2 NEXT-ANIM . . . . . . . . . . . . . . . . . BLL=00001 010 0 00
![Page 177: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/177.jpg)
Dump Information• <H1> I B M F A U L T A N A L Y Z E R S Y N O P S I S • • • A system abend 0C4 reason code X'4' occurred in module IGZCPAC at offset • X'3FEB4'. • • A program-interruption code 0004 (Protection Exception) is associated with this • abend and indicates that: • • An attempt was made to access a protected storage location using an incorrect • storage access key. • • The cause of the failure was program BOMB1 in module BOMB1. The COBOL source • code that immediately preceded the failure was: • • Source • Line # • ------ • 000027 DISPLAY NAME •
![Page 178: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/178.jpg)
Dump Information• ********************************************************************************• *********************** P O I N T O F F A I L U R E **********************• ********************************************************************************• • This is the point where control left program BOMB1 prior to the S0C4 abend. • • COBOL Source Code: • • Source • Line # • ------ • -5 05 NEXT-ANIM PIC X. • -4 PROCEDURE DIVISION. • -3 SET PTR TO ADDRESS OF MYTABLE-VALUES • -2 SET ADDRESS OF ANIMAL TO PTR • -1 PERFORM 7000 TIMES • 000027 DISPLAY NAME • +1 SET ADDRESS OF ANIMAL TO ADDRESS OF NEXT-ANIM • +2 END-PERFORM • +3 GOBACK
![Page 179: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/179.jpg)
Dump Information• Load Module Name. . . . . . : BCST.GP5CS4.DOMESTIC.LOADLIB(BOMB1) • At Address. . . . . . . . : 38B00C38 • Load Module Length. . . . : X'13C8' • Link-Edit Date and Time . : 2005/05/13 12:36:33 • • Program and Entry Point Name: BOMB1 • At Address. . . . . . . . : 38B00C38 (Module BOMB1 offset X'0') • Program Length. . . . . . : X'77A' • Program Language. . . . . : COBOL (Compiled using IBM Enterprise COBOL for • z/OS and OS/390 V3 R3 M1 on 2005/05/13 at • 12:36:32) • • Machine Instruction . . . . : 05EF BALR R14,R15 • At Address. . . . . . . . : 38B0106E (Program BOMB1 offset X'436') • AMODE . . . . . . . . . . : 31 • • General Purpose Registers: • R0: 00001364 (Storage invalid) • R1: 38B00E49 (Module BOMB1 program BOMB1 + X'211')
![Page 180: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/180.jpg)
Dump Information• WORKING-STORAGE SECTION • Off Hex Value EBCDIC Value Source (Starting at • ---- ----------------------------------- ------------------ --------------------• <H5> BLW=0000 at address 38D500B8 • 01 MYTABLE-VALUES.• 0 C1C1D9C4 E5C1D9D2 40404040 40 *AARDVARK * 10 PIC X(1• 10 00000000 *.... * 10 MYPTR1 • 14 C2C5C1E5 C5D94040 40404040 40404040 *BEAVER * 10 PIC X(1• 24 C3D6D5C4 D6D94040 40404040 40404040 *CONDOR * 10 PIC X(1• 34 C4C5C5D9 40404040 40404040 40404040 *DEER * 10 PIC X(1• 44 C5D3C5D7 C8C1D5E3 40404040 40404040 *ELEPHANT * 10 PIC X(1• 54 C6D6E740 40404040 40404040 40404040 *FOX * 10 PIC X(1• 64 C7C9D9C1 C6C6C540 40404040 40404040 *GIRAFFE * 10 PIC X(1• 78 12345D -123.45 01 X PIC S99• 80 F4F5C6 456+ 01 Y PIC S99• 88 FFEC -20 01 Z PIC S9(• 90 38D500B8 *.N.. * 01 PTR POINTER•
![Page 181: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/181.jpg)
Dump Information• LINKAGE SECTION • BLL=0000 has not been assigned an address • Off Hex Value EBCDIC Value Source (Starting at• ---- ----------------------------------- ------------------ -------------------• <H5> BLL=0001 at address 38D57FF8 • 01 ANIMAL. • 0 00000000 00000000 00000000 00000000 *................* 05 NAME • 10 00 *. * 05 NEXT-ANIM • • See "System-Wide Information" - "Storage Areas" - "Hex-Dumped Storage" for • unformatted storage areas related to this event. • •
![Page 182: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/182.jpg)
Dump Information• dress 38D500B8 • 01 MYTABLE-VALUES. • 9D2 40404040 40 *AARDVARK * 10 PIC X(13) VALUE "AARDVARK • *.... * 10 MYPTR1 POINTER SYNC. • 040 40404040 40404040 *BEAVER * 10 PIC X(16) VALUE "BEAVER • 040 40404040 40404040 *CONDOR * 10 PIC X(16) VALUE "CONDOR • 040 40404040 40404040 *DEER * 10 PIC X(16) VALUE "DEER • 5E3 40404040 40404040 *ELEPHANT * 10 PIC X(16) VALUE "ELEPHANT • 040 40404040 40404040 *FOX * 10 PIC X(16) VALUE "FOX • 540 40404040 40404040 *GIRAFFE * 10 PIC X(16) VALUE "GIRAFFE • -123.45 01 X PIC S999V99 PACKED-DECIMAL• 456+ 01 Y PIC S999 VALUE 456. • -20 01 Z PIC S9(4) BINARY VALUE -20• *.N.. * 01 PTR POINTER.
![Page 183: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/183.jpg)
XML and COBOL
![Page 184: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/184.jpg)
XML
• XML = Extensible Markup Language• Used to expose the structure and content of a
document• Becoming a universal means of exchanging data• Tag language <author> <firstname>Charles</firstname> <lastname>Dickens</lastname> </author>
![Page 185: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/185.jpg)
XML
• Tags are user-defined• Every start tag has a matching stop tag <atag> …</atag>• Sometimes the tags are combined into
one start and stop tag <media type = “CD” /> • Tags can’t overlap NO: <a> <b> </a> </b>
![Page 186: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/186.jpg)
XML
• Tags can be nested <a> <b> </b> </a>
• Documents are tree-structured <a> <b></b> <c> <d></d> </c> </a>
a
b c
d
![Page 187: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/187.jpg)
XML
• Text based documents• Case sensitive• Must contain one root element• Start with an XML declaration and comments
<?xml version = “1.0”?>
<!– comment line - ->
<a>
</a>
![Page 188: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/188.jpg)
XML
• XML is “Well Formed” if
1) Single root element
2) Start and end tags matching for all elements
3) Proper nesting
4) Attribute values in quotes
![Page 189: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/189.jpg)
XML Parsers
• An XML parser is a program that can read an XML document and provide programmatic access to the document
• Two types of parsers: 1) DOM based – Document Object Model Constructs a tree that represents the document 2) SAX based – Simple API for XML Generates events when parts of the document are encountered.• Can also be classified as “push” or “pull” parsers
![Page 190: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/190.jpg)
COBOL Features for Processing XML Input
• XML PARSE – begins parsing the document and identifies the processing procedure in your document
• Processing Procedure – receives and processes the events that are generated by the parser
![Page 191: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/191.jpg)
COBOL Features for Processing XML Input
• Special Registers– XML-CODE - to determine the status of XML
parsing– XML-EVENT - to receive the name of the
event– XML-TEXT – to receive XML document
fragments
![Page 192: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/192.jpg)
Enterprise COBOL
• Contains an event-based parser that allows you to read XML documents and process them with COBOL
• XML documents can be retrieved from an MQ message, CICS TD queue, or IMS message processing queue
• XML documents that are read from a file must be brought into storage as a single item. (Records can be combined using STRING)
![Page 193: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/193.jpg)
Parsing
XML PARSE document PROCESSING PROCEDURE event-handler-name ON EXCEPTION … NOT ON EXCEPTION … END-XML• Parsing continues until 1) an END-DOCUMENT event occurs 2) the parser signals EXCEPTION and the procedure
doesn’t reset the XML-CODE register to 0 3) you terminate processing by moving -1 to XML-
CODE
![Page 194: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/194.jpg)
Parsing XML Events
• The XML-EVENT register contains the event name that the parser passing to the handler
• The XML-CONTENT register contains the content for the event
![Page 195: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/195.jpg)
Events
• Some typical events: START-OF-DOCUMENT START-OF-ELEMENT ATTRIBUTE-NAME END-OF-ELEMENT CONTENT-CHARACTERS START-OF-CDATA-SECTION END-OF-DOCUMENT
![Page 198: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/198.jpg)
Exercise #25
• Use the file BCST.SICCC01.PDSLIB(XMLDATA2)• The file structure is similar to the one below:<?xml version=”1.0” encoding=”ibm-1140” standalone=”yes”?><batch> <trans> <name>Joe Smith</name> <amt>12.32</amt> <amt>5.42</amt> </trans> <trans <name>Tina Louise</name> <amt>8.99</amt> </trans> …</batch
![Page 199: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/199.jpg)
Exercise #25
• Write an XML Cobol program that reads the file and copies it to memory.
• Print out a report that lists each customer name and a total for each customer.
• Print a grand total for the entire file
Name Amount
Joe Smith 17.74
Tina Louise 8.99
Grand Total 26.73
![Page 200: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/200.jpg)
Exercise #26
• Read the file BCST.SICCC01.PDSLIB(BOOKLIST)
• Copy the data into memory storing the data as a Cobol data structure
• Write out the entire file as a single XML file
• Pretty print the XML file
![Page 201: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/201.jpg)
Exercise #26
• The XML file should have the following structure
<booklist>
<book>
<author>Melville</author>
<title>Moby Dick</title>
</book>
….
</booklist>
![Page 202: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/202.jpg)
Compiler Options
• Default compiler options are in effect for TSYS
• Options can be overridden with a process statement that precedes the IDENTIFICATION DIVISION
• Example (Start in column 8 or 1)PROCESS LIST, AWO
![Page 203: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/203.jpg)
Apply Write Only
• AWO is faster than NOAWO
• Applies to variable length, blocked files
• With AWO the file buffer is written when there is not enough space for the next record
• Without AWO the file buffer is written when the largest size record won’t fit in the buffer
![Page 204: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/204.jpg)
DATA(24) and DATA(31)
• DATA(31) + RENT relieves some below the line storage problems. QSAM file buffers can be placed above the line
• With DATA(24), working storage and FD record areas are below the line
![Page 205: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/205.jpg)
DYNAM and NODYNAM
• DYNAM causes programs that are called by their literal names to be called dynamically
• NODYNAM allows for static calls for calls made with literal names of programs
![Page 206: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/206.jpg)
NUMPROC
• NUMPROC(PFD) – generates efficient code for numeric comparisons. Doesn’t fix up signs
• NUMPROC(NOPFD) – causes sign fix up for numeric fields
• NUMPROC(MIG) – causes arithmetic similar to OS/vs Cobol
![Page 207: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/207.jpg)
OPTIMIZE
• OPTIMIZE(STD) and OPTIMIZE(FULL) –- eliminate unnecessary brancing- simplifying inefficient branching- simplifying the code for out-of-line PERFORM, moving the code in-line - simplifying calls to nested programs
- eliminating duplicate computations- eliminating constant computations- aggregating MOVES- deleting unreachable code- deleting unreferenced data items (FULL only)
![Page 208: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/208.jpg)
OPTIMIZE
• NOOPTIMIZE – suppresses optimizations
• Helpful during development to speed compilations
• Better for testing because code is not removed
• OPTIMIZE for production
![Page 209: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/209.jpg)
RENT and NORENT
• Causes the compiler to generate code that makes the program reentrant
• Reentrant programs can be placed in the Link Pack Area and Extended Link Pack Area
• LPA is for programs that can be shared and are heavily used during production runs. Programs here remain in memory.
![Page 210: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/210.jpg)
RMODE
• RMODE(AUTO) + RENT = RMODE(ANY)
• RMODE(AUTO) + NORENT = RMODE(24)
• RMODE(24) + NORENT => WS below the line
• RMODE(ANY) + NORENT => WS is above the line
![Page 211: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/211.jpg)
SSRANGE and NOSSRANGE
• SSRANGE – causes subscript and index checking. Reference modifications are also checked
• Use during program development
• NOSSRANGE – turns off subscript checking. Use for production code
![Page 212: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/212.jpg)
TEST and NOTEST
• TEST(ALL,SYM) – produces code that enables the Debug Tool to perform batch and interactive debugging
• NOTEST – produces more efficient object modules. Use this option for production code
![Page 213: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/213.jpg)
TRUNC
• TRUNC(BIN) – Causes base 2 truncation on some intermediate calculations to insure the answer conforms to a halfword, fullword, or doubleword boundary
• TRUNC(STD) – Causes base 10 truncation on some intermediate calculations
• TRUNC(OPT) – Assumes the data conforms to the PICTURE and USAGE clauses and manipulates the result based on the size of the field in storage
![Page 214: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/214.jpg)
ARITH
• ARITH – controls the number of digits in decimal numbers (packed, zoned)
• ARITH(EXTEND) is slower than ARITH(COMPAT)
- COMPAT <= 18 digits
- EXTEND max 31 digits
![Page 215: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/215.jpg)
Performance Issues
• CALLs – Nested faster than static, call literal faster than dynamic call literal, call literal faster than dynamic all identifier, dynamic call literal faster that dynamic call identifier
• Nested calls are the fastest – and there are good program design reasons for using them as well
![Page 216: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/216.jpg)
Performance Issues
• IS INITIAL on PROGRAM-ID can be very penalizing in terms of time
• QSAM files
- BLOCK CONTAINS 0 RECORDS !
- Experiment with more buffers by modifying the RESERVE clause of the SELECT statement or specifying more buffers in JCL (BUFNO)
- Code APPLY WRITE-ONLY or use AWO compiler option for variable length blocked files
![Page 217: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/217.jpg)
VSAM Performance Issues
• Increase the number of data buffers (BUFND) for sequential access or (BUFNI) for random access
• Select an appropriate CI size. Smaller is faster for random processing at the expense of inserts
• Larger CI size is more efficient for sequential processing
• Alternate indexes should be built by AMS
![Page 218: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/218.jpg)
Data Types
• BINARY (COMPUTATIONAL)– PIC S9(N) BINARY– N is from 1 to 4 – Halfwords– N is from 5 to 8 – Fullwords– N is 9 – fullword data converted to
doublewords - SLOWER!– N is 10 to 17 – Double words – SLOW– N is 18 – converted to a higher precision
format – SLOWEST!
![Page 219: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/219.jpg)
Data Types
• PACKED-DECIMAL (COMP-3) – use 15 or few digits in the PIC clause to avoid the use of library routines.
• Always code an odd number of digits!
• Always code a sign unless you have a good reason not to.
![Page 220: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/220.jpg)
Performance Issues
• Specify SYNCH for BINARY items.
• Use signed data items with 8 or fewer digits – S9(8) BINARY SYNC
S9(4) BINARY SYNC
• 9 or more digits is slower
• 18 digits is slowest
• Avoid USAGE IS DISPLAY for numeric fields PIC S99.
![Page 221: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/221.jpg)
Performance Issues
• Use 15 or fewer digits for PACKED-DECIMAL (COMP-3) fields
• Always code a sign (S) unless you have a programmatic reason not to. S9(8) instead of 9(8).
• Indexes are faster than subscripts• If you choose subscripts code S9(8)
BINARY SYNC or better yet, choose indexes instead
![Page 222: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/222.jpg)
Performance Issues
• Use PIC S9(8) BINARY fields for loop control variables
• Packed-decimal fields are slower
• Display fields (PIC 999) are slowest!
• Initialize constants with a value clause and don’t modify them or pass them by reference. (Compile will optimize the constants.)
![Page 223: Advanced Cobol](https://reader033.vdocument.in/reader033/viewer/2022061116/54655c31b4af9f623f8b4f74/html5/thumbnails/223.jpg)
Performance Issues
• Don’t use PERFORM THRU
• Make appropriate use of in-line PERFORMS
• Try to use tables so the rightmost subscript varies the most often. (Compiler can optimize some subscript calculations)
• Use SEARCH ALL for tables with 100 items or more