COBOL Concepts

1 / 204
About This Presentation
Title:

COBOL Concepts

Description:

01 TRAN-CODE PIC X. 88 GOOD VALUE G'. 88 BAD VALUE B'. 88 ... 01 REPORT-AREA PIC X(132). Data Formats. COMPUTATIONAL or COMP BINARY. PACKED-DECIMAL ... – PowerPoint PPT presentation

Number of Views:856
Avg rating:3.0/5.0
Slides: 205
Provided by: davidwoo4

less

Transcript and Presenter's Notes

Title: COBOL Concepts


1
COBOL Concepts
  • David Woolbright
  • 2008

2
Enterprise Cobol for z\OS
  • IBM Documentation
  • http//www-3.ibm.com/software/awdtools/cobol/zos/l
    ibrary
  • Java interoperability supported by new
    object-oriented syntax.  
  • Compatibility with WebSphere tools.  
  • XML support.  Unicode support.  
  • Enhancements to z/OS and OS/390 UNIX System
    Services support for tolerating threads and
    asynchronous signals.  
  • CICS translator integration.

3
Program Organization
  • Program
  • Section
  • Paragraph
  • Sentence
  • Clause
  • Word

4
Grammatical Hierarchy
  • The grammatical hierarchy follows this form
  • Identification division
  • Paragraphs
  • Entries
  • Clauses
  • Environment division
  • Sections
  • Paragraphs
  • Entries
  • Clauses
  • Phrases
  • Data division
  • Sections
  • Entries
  • Clauses
  • Phrases
  • Procedure division
  • Sections
  • Paragraphs

5
Coding Rules
  • Cols 1-6 left blank. Compiler fills in with
    sequence numbers
  • Col 7 - means comment line
  • Cols 8-11 A margin
  • Cols 12-72 B margin
  • Cols 73-80 unused

6
Things That Go in Area A
  • Area A items
  • Division headers
  • Section headers
  • Paragraph headers or paragraph names
  • Level indicators or level-numbers (01 and 77)
  • DECLARATIVES and END DECLARATIVES
  • End program, end class, and end method markers

7
Things That Go in Area B
  • Area B items
  • Entries, sentences, statements, and clauses
  • Continuation lines

8
Things That Go in A or B
  • Area A or B
  • Level-numbers
  • Comment lines
  • Compiler-directing statements
  • Debugging lines
  • Pseudo-text

9
Structure of a Program
  • IDENTIFICATION DIVISION
  • ENVIRONMENT DIVISION
  • DATA DIVISION
  • PROCEDURE DIVISION

10
IDENTIFICATION DIVISION
  • IDENTIFICATION DIVISION.
  • PROGRAM-ID. HELLO.
  • AUTHOR. JOE SMITH.
  • INSTALLATION. TSYS.
  • DATE-WRITTEN. 12/03/2004.
  • DATE-COMPILED. 12/03/2004.
  • (Only PROGRAM-ID is required.)

11
ENVIRONMENT DIVISION
  • ENVIRONMENT DIVISION.
  • INPUT-OUTPUT SECTION.
  • FILE-CONTROL.
  • SELECT MSTRFILE ASSIGN TO MSTRFILE
  • SELECT CUSTOMER-FILE ASSIGN TO CUSTMAST
    ORGANIZATION IS INDEXED ACCESS MODE IS
    RANDOM RECORD KEY IS COSTOMER-KEY FILE
    STATUS IS CUSTOMER-FILE-STATUS.

12
DATA DIVISION
  • Used to create variables and constant fields
  • Only three data types
  • numeric PIC 99999.
  • alphanumeric (text/string) PIC XXX.
  • alphabetic PIC AAA.
  • Level numbers indicate subordination of fields.
    Use levels 01-49

13
Level Numbers
  • Group item a subdivided field
  • Elementary item a non-subdivided field
  • 01 Group or independent item
  • Higher numbers indicate subordinate fields
  • 66, 77, 88 have special significance
  • 66 used to rename (no longer used)
  • 77 an independent item
  • 88 condition name

14
Level Numbers
  • 01 XXX.
  • 05 YYY.
  • 10 AAA PIC X.
  • 10 BBB PIC X.
  • 05 ZZZ PIC X(20).
  • 77 AAA PIC 999V99.

15
Level Numbers
  • 01 TRAN-CODE PIC X.
  • 88 GOOD VALUE G.
  • 88 BAD VALUE B.
  • 88 INDIFFERENT VALUE I.
  • SET GOOD TO TRUE
  • IF (GOOD)

16
Picture Clauses
  • Picture clause values usually use 9, X, V, S, A
  • 9 a decimal digit
  • X any alphanumeric character
  • V an implied decimal point
  • S a sign
  • A A-Z, and blank

17
Picture Clauses
  • PIC 9(6)
  • PIC 9(6)V99
  • PIC 999999V99
  • PICTURE X(10)
  • PIC XXXXXXXXXX
  • PIC S9(4)V9(4)
  • PIC S9999V9999
  • PIC 9(18)

18
Numeric Edited Fields
  • XXXBXXBXXXX
  • 99/99/99
  • ZZ,ZZZ.99DB
  • ,.99
  • ----.99
  • 9.99
  • 99999.99

19
DATA DIVISION
  • Define data used in input-output operations (FILE
    SECTION).
  • FILE SECTION.
  • FD CUSTOMER-FILE.
  • 01 CUSTOMER-MASTER.
  • 05 CUST-NUM PIC 9(2).
  • 05 CUST-FNAME PIC X(20).
  • 05 CUST-LNAME PIC X(20).
  • FD SALES-REPORT.
  • 01 REPORT-AREA PIC X(132).

20
Data Formats
  • COMPUTATIONAL or COMP BINARY
  • PACKED-DECIMAL
  • BINARY
  • 05 XDATA PIC S9(5) PACKED-DECIMAL.
  • 05 YDATA PIC S9(4) BINARY.

21
EBCDIC
  • EBCDIC is an IBM format for storing alphanumeric
    characters
  • A - XC1 J - XD1
  • B - XC2 K - XD2 S XE2
  • C - XC3 L - XD3 T XE3
  • D - XC4 M - XD4 U XE4
  • E - XC5 N - XD5 V XE5
  • F - XC6 O - XD6 W XE6
  • G - XC7 P - XD7 X XE7
  • H - XC8 Q - XD8 Y XE8
  • I - XC9 R - XD9 Z XE9

22
EBCDIC
  • EBCDIC is an IBM format for storing alphanumeric
    characters
  • 0 - XF0 SPACE X40
  • 1 XF1 . - X4B
  • 2 - XF2 , - X6B
  • 3 XF3 - X5C
  • 4 - XF4 - - X60
  • 5 XF5
  • 6 - XF6
  • 7 XF7
  • 8 XF8
  • 9 XF9

23
BINARY DATA
  • Stored in 2s Complement format
  • Leftmost bit is a sign ( 0 ? , 1 ? - )
  • If the number is positive, interpret it as plain
    binary 01011 8 2 1 11
  • If the number is negative, compute the complement
    Invert. (Change all 1s to 0s and 0s to 1s.)
    Add 1. The result is the additive complement
  • 10011 is a negative number.
  • Inverting we have 01100.
  • Adding 1 we have 01100 1 01101. This is
    a positive number. 01101 ? 8 4 1 13, so
    the original number is -13.

24
BINARY DATA
  • Declaring a data field as BINARY causes the data
    to be stored in 2s complement format.
  • 01 X-FIELD PIC S9(4) BINARY VALUE -1 .
  • X-FIELD will contain 1111111111111111 XFFFF.
  • Binary data is processed in a register

25
PACKED-DECIMAL DATA
  • Defining a field to be PACKED-DECIMAL or
    Computational-3 causes the data to be stored
    internally in a packed decimal format.
  • In packed decimal, there are 2 decimal digits
    stored in each byte. A sign is stored in the
    rightmost nibble. (C ? , D ? -)
  • Y-FIELD PIC S999 VALUE -23 PACKED-DECIMAL.
  • produces a 2 byte field containing X023D
  • Most business arithmetic occurs in packed decimal.

26
ZONED-DECIMAL DATA
  • A numeric field which is described as DISPLAY, or
    in which the usage clause is omitted, is stored
    in a zoned decimal format.
  • In zoned decimal, each digit takes up one byte,
    and a sign is stored in the zone portion of the
    rightmost byte of the field.
  • Z-FIELD PIC S999 VALUE -32 produces a 3 byte
    field containing XF0F3D2.

27
DATA DIVISION
  • Define data developed for internal processing
  • To have storage be statically allocated and exist
    for the life of the run unit (WORKING-STORAGE
    SECTION).
  • WORKING-STORAGE SECTION.
  • 01 TOTAL-FIELDS.
  • 05 CUST-TOTAL PIC S9(7)V99 VALUE 0.
  • 05 COST-TOTAL PIC S9(7)V99 VALUE 0.
  • 01 DATE-AND-TIME.
  • 05 CD-YEAR PIC 9999.
  • 05 CD-MONTH PIC 99.

28
DATA RELATIONSHIPS
BINARY
PACKED-DECIMAL
CHARACTER or ALPHANUMERIC
ZONED-DECIMAL
29
DATA DIVISION
  • Describe data from another program or storage you
    want to associate with a symbolic name (LINKAGE
    SECTION).
  • LINKAGE SECTION.
  • 01 LK-DATA-AREA
  • 05 NAME PIC X(40).
  • 05 AGE PIC 999.

30
DATA DIVISION
  • To have storage be allocated each time
  • a program is entered, and deallocated on
  • return from the program (LOCAL-STORAGE SECTION).
  • LOCAL-STORAGE SECTION.
  • 01 CUST-NO PIC X(3).
  • 01 COST PIC 9(5)V99.

31
Initialization of Storage
  • WORKING-STORAGE for programs is allocated at the
    start of the run unit.
  • Any data items with VALUE clauses are initialized
    to the appropriate value at that time.
  • For the duration of the run unit, WORKING-STORAGE
    items persist in their last-used state.
    Exceptions are
  • A program with INITIAL specified in the
    PROGRAM-ID paragraph In this case,
    WORKING-STORAGE data items are reinitialized each
    time that the program is entered.
  • A subprogram that is dynamically called and then
    canceled In this case, WORKING-STORAGE data items
    are reinitialized on the first reentry into the
    program following the CANCEL.

32
Group and Data Items
  • 01 Customer-Record.
  • 05 Customer-Name.
  • 10 Last-Name Pic x(17).
  • 10 Filler Pic x.
  • 10 Initials Pic xx.
  • 05 Part-Order.
  • 10 Part-Name Pic x(15).
  • 10 Part-Color Pic x(10).

33
REDEFINES
  • 01 MONTH-NAMES.
  • 05 STRING-1 PIC X(15)
  • VALUE JANFEBMARAPRMAY.
  • 05 MONTH REDEFINES STRING-1
  • OCCURS 5 TIMES PIC XXX.

34
REDEFINES
  • 05 AMOUNT PIC ZZ9.9-.
  • 05 AMOUNTX REDEFINES AMOUNT
  • PIC X(6).
  • 10 X PIC 9(5).
  • 10 Y REDEFINES X.
  • 20 A PIC X(3).
  • 20 B PIC X (2).

35
Literals
  • String Literals enclosed in quotes
  • MOVE INVALID" To CUST-NAME
  • Numeric literals without quotes
  • MOVE 19 TO CUST-AGE
  • Hexadecimal literals with X
  • MOVE XAF3B TO CUST-CODE

36
Constants
  • A constant is a data item that has only one
    value.
  • COBOL does not define a construct specifically
    for constants.
  • Data Division.
  • 01 Report-Header pic x(50) value "Company
    Report".
  • 01 Interest pic 9v9999 value 1.0265.

37
Figurative Constants
  • ZERO
  • SPACE
  • HIGH-VALUE
  • LOW-VALUE
  • QUOTE
  • NULL
  • ALL

38
Tables (Arrays)
  • A table is a set of logically consecutive data
    items that you define in the DATA DIVISION by
    using the OCCURS clause.
  • 01 TABLE.
  • 05 TABLE-ENTRY OCCURS 10 TIMES.
  • 10 NUM PIC 99.
  • 10 NAME PIC X(30).
  • 10 ITEM PIC X(5) OCCURS 3 TIMES.
  • Valid References with subscripts
  • TABLE-ENTRY(SUB)
  • TABLE
  • NUM(SUB)
  • NAME(SUB)
  • ITEM(SUB1,SUB2)

39
Subscripts vs Indexes
  • Subscripts are defined separately from the table
    definitions.
  • Subscripts are numeric fields choose BINARY
    fields for efficiency
  • Subscripts can be easily printed
  • Subscripts represent an occurrence number
  • Indexes are created when a table is defined
  • Indexes manipulated with SET statements
  • Indexes are generally more efficient than
    subscripts
  • Indexes represent offsets from the beginning of
    the table

40
Tables with Indexes
  • 01 TABLE.
  • 05 TABLE-ENTRY OCCURS 10 TIMES
  • INDEXED BY
    SUB1.
  • 10 NUM PIC 99.
  • 10 NAME PIC X(30).
  • 10 ITEM PIC X(5) OCCURS 3 TIMES
  • INDEXED
    BY SUB2.
  • Valid References with subscripts
  • TABLE-ENTRY(SUB1)
  • TABLE
  • NUM(SUB1)
  • NAME(SUB1)
  • ITEM(SUB1,SUB2)

41
Subscripts and Indexes
  • In a two-dimensional table, the two subscripts
    correspond to the row and column numbers.
  • In a three-dimensional table, the three
    subscripts correspond to the depth, row, and
    column numbers.
  • Indexes use address computation to efficiently
    reference items in a table.

42
PROCEDURE DIVISION
  • The PROCEDURE DIVISION is where you code the
    executable statements in your COBOL program
  • Divided into Paragraphs (terminated with
    periods)
  • 100-MAIN.
  • DISPLAY HELLO
  • PERFORM 200-SUB
  • GOBACK
  • .
  • 200-SUB.
  • DISPLAY WORLD!
  • GOBACK
  • .

43
PROCEDURE DIVISION
  • The period is a statement terminator
  • We will code in a period-less style
  • Use periods to end a paragraph name, only
  • To resolve ambiguity caused by not using periods,
    we will use statement delimiters
  • END-IF, END-PERFORM, END-COMPUTE,
  • ETC.

44
DISPLAY
45
DISPLAY
  • Handy for debugging and simple report creation
  • DISPLAY X Y Z
  • DISPLAY A A

46
MOVE
47
MOVE STATEMENT
  • Used to copy data from one field to another
  • Example -
  • MOVE X-FIELD TO Y-FIELD Z-FIELD
  • Data is copied from the sending field to the
    receiving field

48
MOVE STATEMENT
  • The two fields should be compatible but dont
    have to be identical.
  • Compatible moves
  • -alphanumeric to alphanumeric
  • -numeric to numeric
  • -numeric to numeric edited
  • -alphanumeric to numeric if the sending field
    is an unsigned integer
  • -alphanumeric to numeric edited if the sending
    field is an unsigned integer
  • -numeric to alphanumeric if the sending field
    is an unsigned integer
  • -numeric edited fields can be sent to numeric
    and numeric edited fields this causes a de-edit
    process to occur
  • -numeric edited fields can be sent to
    alphanumeric and alphanumeric edited fields
    this causes a de-edit process to occur

49
MOVE STATEMENT
  • Moving data can cause data conversions to occur.
  • 01 X PIC S9(4) BINARY.
  • 01 Y PIC S9(5) PACKED-DECIMAL.
  • MOVE X TO Y

50
MOVE STATEMENT
  • If the receiving field is larger than the sending
    field, the receiving field is filled with leading
    0s in a numeric move.
  • If the receiving field is larger than the sending
    field, the receiving field is filled with
    trailing spaces in a alphanumeric move.
  • If the receiving field is smaller than the
    sending field, data will be truncated on the left
    for numeric moves and on the right for
    alphanumeric moves

51
Use Move for Assignment
  • X01 WORK.
  • 05 A-FIELD PIC X(3).
  • 05 B-FIELD PIC S999V99.
  • MOVE ABC TO A-FIELD
  • MOVE 123.45 TO B-FIELD
  • MOVE LOW-VALUE TO WORK

52
Assignment is Sophisticated
  • Consider the following move
  • 01 A PIC S999V99.
  • 01 B PIC ZZ9.99-.
  • 01 C PIC S9(5)V9999
  • PACKED-DECIMAL.
  • MOVE A TO B
  • MOVE A TO C

53
MOVE CORRESPONDING
  • MOVE CORRESPONDING identifier-1 TO
    identifier-2
  • CORR
  • Both identifiers must name group items.
  • Elementary items with the same name are moved.
  • 01 A-GROUP. 01 B-GROUP.
  • 05 W PIC X(3). 05 W
    PIC X(3).
  • 05 X PIC X(2). 05 X
    PIC X(2).
  • 05 Y PIC 999. 05 Y
    PIC 999.
  • MOVE CORRESPONDING A-GROUP TO B-GROUP

54
MOVE CORRESPONDING
  • Subordinate items must not be identified by the
    keyword FILLER
  • No reference modification for either identifier
  • Subordinate items must not include a REDEFINES,
    RENAMES, OCCURS, INDEX or POINTER description
  • 01 A-GROUP. 01 B-GROUP.
  • 05 W PIC X(3). 05 P
    PIC X(3).
  • 05 X PIC X(2). 05 X
    PIC X(2).
  • 05 Y PIC 999. 05 W
    PIC 999.
  • MOVE CORRESPONDING A-GROUP TO B-GROUP

55
INITIALIZE
56
INITIALIZE
  • SPACE is the implied sending item for receiving
    items of category alphabetic, alphanumeric,
    alphanumeric-edited, DBCS, national, or
    national-edited.
  • ZERO is the implied sending item for receiving
    items of category numeric or numeric-edited.

57
INITIALIZE
  • 01 PRICE-FIELDS.
  • 05 UNIT-PRICE PIC 9(5)V9(2).
  • 05 DISCOUNT PIC V9(2).
  • 05 UNIT-CODE PIC XX.
  • 05 SALES-PRICE PIC 9(5)V9(2).
  • . . .
  • INITIALIZE PRICE-FIELDS

58
ADD
59
ADD EXAMPLES
  • ADD X TO Y
  • ADD X Y Z TO P
  • ADD X Y TO P Q
  • ADD 1 TO Z
  • ADD X TO Y ROUNDED
  • ADD X TO Y
  • ON SIZE ERROR
  • DISPLAY ADD ERROR
  • END-ADD

60
ADD GIVING
61
ADDGIVING
  • All identifiers or literals that precede the
    keyword TO are added together, and this sum is
    added to and stored in identifier-2. This process
    is repeated for each successive occurrence of
    identifier-2 in the left-to-right order in which
    identifier-2 is specified.
  • The values of the operands that precede the word
    GIVING are added together, and the sum is stored
    as the new value of each data item referenced by
    identifier-3.
  • ADD X Y Z TO V GIVING P
  • Before X1,Y2,Z3,V4,W5,P6
  • After X1,Y2,Z3,V10,W11,P21

62
SUBTRACT
63
SUBTRACT
  • All identifiers or literals preceding the keyword
    FROM are added together and their sum is
    subtracted from and stored immediately in
    identifier-2. This process is repeated for each
    successive occurrence of identifier-2, in the
    left-to-right order in which identifier-2 is
    specified.
  • SUBTRACT X Y FROM P Q
  • Before X1,Y2, P3,Q4
  • After X1,Y2, P0,Q1

64
SUBTRACT
65
SUBTRACT
  • All identifiers or literals preceding the keyword
    FROM are added together and their sum is
    subtracted from identifier-2 or literal-2. The
    result of the subtraction is stored as the new
    value of each data item referenced by
    identifier-3.
  • SUBTRACT X Y FROM P GIVING Q
  • Before X1,Y2,P5,Q6
  • After X1,Y2,P2,Q2

66
MULTIPLY
67
MULTIPLY
  • In format 1, the value of identifier-1 or
    literal-1 is multiplied by the value of
    identifier-2 the product is then placed in
    identifier-2. For each successive occurrence of
    identifier-2, the multiplication takes place in
    the left-to-right order in which identifier-2 is
    specified.
  • MULTIPLY X BY P Q
  • Before X2,P4,Q5
  • After X2,P8,Q10

68
MULTIPLY
69
MULTIPLY
  • In format 2, the value of identifier-1 or
    literal-1 is multiplied by the value of
    identifier-2 or literal-2. The product is then
    stored in the data items referenced by
    identifier-3.
  • MULTIPLY X BY Y GIVING Z
  • Before X2, Y3, Z4
  • After X2, Y3, Z6

70
DIVIDE
71
DIVIDE
  • In format 1, the value of identifier-1 or
    literal-1 is divided into the value of
    identifier-2, and the quotient is then stored in
    identifier-2. For each successive occurrence of
    identifier-2, the division takes place in the
    left-to-right order in which identifier-2 is
    specified.
  • DIVIDE X INTO Y Z
  • Before X3, Y7, Z12
  • After X3, Y2, Z4

72
DIVIDE
73
DIVIDE
  • In format 2, the value of identifier-1 or
    literal-1 is divided into the value of
    identifier-2 or literal-2. The value of the
    quotient is stored in each data item referenced
    by identifier-3.
  • DIVIDE X INTO Y GIVING Z
  • Before X 2, Y 13, Z 1
  • After X 2, Y 13, Z 6

74
DIVIDE
75
DIVIDE
  • In format 3, the value of identifier-1 or
    literal-1 is divided by the value of identifier-2
    or literal-2. The value of the quotient is stored
    in each data item referenced by identifier-3.
  • DIVIDE X BY Y GIVING Z
  • Before X 10, Y 3, Z 1
  • After X 10, Y 3, Z 3

76
DIVIDE
77
DIVIDE
  • In format 4, the value of identifier-1 or
    literal-1 is divided into identifier-2 or
    literal-2. The value of the quotient is stored in
    identifier-3, and the value of the remainder is
    stored in identifier-4.
  • DIVIDE X INTO Y
    GIVING Z REMAINDER R
  • Before X 2, Y 9, Z 8, R 7
  • After X 2, Y 9, Z 4, R 1

78
COMPUTE
79
COMPUTE
  • COMPUTE can be used to initialize a numeric field
  • Usually reserved for nontrivial computations.
    For simple computations choose ADD, SUBTRACT,
    MULTIPLY or DIVIDE
  • 05 X PIC S9(4)V9 PACKED DECIMAL.
  • COMPUTE X ROUNDED (A B) / 2.3
  • ON SIZE ERROR
  • DISPLAY X WAS TRUNCATED
  • END-COMPUTE

80
Arithmetic Operators
  • is Addition
  • - is Subtraction
  • is Multiplication
  • / is Division
  • is Exponentiation
  • ( ) provide precedence. Always parenthesize!
  • ((X Y) ( Z 3))

81
Locate Mode I/O
Your Program
Input Buffers
Output Buffers
Region
82
Move Mode I/O
READ MYFILE INTO MYREC WRITE RECOUT FROM MYREC
01 MYREC PIC X(80).
Input Buffers
Output Buffers
Region
83
QSAM FILE OPERATIONS
  • ENVIRONMENT DIVISION.
  • INPUT-OUTPUT-SECTION.
  • FILE-CONTROL.
  • SELECT MY-INPUT-FILE
  • ASSIGN TO MASTER
  • FILE STATUS IS MAST-STAT .
  • DATA DIVISION.
  • FILE SECTION.
  • FD MY-INPUT-FILE
  • 01 RECORD-AREA PIC X(80).
  • MY-INPUT-FILE Internal file name
  • MASTER External DD name
  • MAST-STAT A two byte PIC XX field in which the
    operating system returns a status code. Consult
    IBM Language Reference page 315 for status code
    details.

84
QSAM
  • Queued Sequential Access Method
  • For input files, records are buffered when the
    file is OPENed
  • For output, records are buffered before being
    written
  • Records are processed from the beginning record
    sequentially to the end of the file
  • Very efficient access method for sequential files
  • Sometimes referred to as flat files

85
QSAM FILE OPERATIONS
  • Every file must be OPENed before it can be
    processed.
  • Opening a QSAM Input file queues records for
    subsequent read operations
  • OPEN INPUT MY-INPUT-FILE
  • OPEN OUTPUT MY-OUTPUT-FILE
  • Files should be closed when you have finished
    processing the records
  • CLOSE MY-FILE

86
OPEN
87
CLOSE
88
READ
89
QSAM File Operations
  • Remember READ a file, WRITE a record.
  • READ MY-INPUT-FILE
  • AT END MOVE NO TO MORE-RECS
  • END-READ
  • This is a locate-mode read and the most efficient
    way to read records

90
File Reading
  • READ MY-INPUT-FILE INTO MY-REC
  • AT END MOVE NO TO MORE-RECS
  • END-READ WRITE
  • This is a move-mode read and the least efficient
    way to deliver records

91
QSAM File Operations
  • WRITE A RECORD!
  • WRITE MY-RECORD
  • This is a locate-mode write.
  • WRITE MY-RECORD FROM REC-BUFF
  • END-WRITE
  • This is a move-mode write.
  • CLOSE MY-OUTPUT-FILE
  • CLOSE MY-INPUT-FILE

92
SEQUENTIAL FILE READ PATTERN
PRIMING READ
PRIMING READ
  • READ MYFILE
  • AT END MOVE N TO MORE-RECS
  • END-READ
  • PERFORM UNTIL MORE-RECS N
  • (process a record code)
  • READ MYFILE
  • AT END MOVE N TO MORE-RECS
  • END-READ
  • END-PERFORM

CONTINUATION READ
93
File Status Codes
  • 00 normal
  • 10 end of file
  • 2x invalid key
  • 3x permanent i/o error
  • 4x logic error
  • 9x unsuccessful operation

94
Exercise 1
  • Create a file of 80 byte records
  • Each record has 3 fields
  • AFIELD ZONED DECIMAL 4 DIGITS
  • 2 DECIMALS
  • BFIELD PACKED DECIMAL 7 DIGITS
  • 3 DECIMALS
  • CFIELD - PACKED DECIMAL 7 DIGITS
  • 1 DECIMAL
  • Print a report with a column for each field and a
    column for the computed value
  • (AFIELD BFIELD)/ CFIELD
  • Print the result with 2 decimals rounded.
  • Total each column.

95
FLOW OF CONTROL
  • There is a theoretical result in Computer Science
    by Boehm and Jacopini that states only 3 control
    structures are required to write any program
  • Sequence - do this, now do this
  • Selection - If x something is true do this, else
    do that
  • Repetition do this until something happens
  • Practice has shown that being able to create
    procedures is helpful in overcoming complexity,
    but they arent strictly necessary
  • One implication is that GO TOs arent needed

96
FLOW OF CONTROL
F
?
T
T
F
97
IF
98
IF
  • The condition is tested and either the true or
    false blocks are selected for execution
  • Dont use NEXT SENTENCE if you are using END-IF
    as the delimiter. (Use of NEXT SENTENCE causes
    execution to continue with the next closest
    period.)

99
IF Examples
  • IF X
  • ADD 1 TO X
  • DISPLAY AAA
  • ELSE
  • DISPLAY BBB
  • END-IF
  • IF X Y
  • DISPLAY X WAS BIGGER
  • END-IF

100
NESTED IFs
  • Each ELSE is matched with the nearest preceding
    IF
  • IF X
  • DISPLAY XXX
  • IF Y
  • DISPLAY ZZZ
  • ELSE
  • DISPLAY AAA
  • END-IF
  • MORAL INDENT PROPERLY, TERMINATE ALL IF
    STATEMENTS WITH END-IF

101
EVALUATE

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

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

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

105
EVALUATE
  • EVALUATE Qty ALSO TRUE ALSO Member
  • WHEN 1 THRU 5 ALSO VOP
  • MOVE 2 TO Discount
  • WHEN 6 THRU 16 ALSO VOP
  • MOVE 3 TO Discount
  • WHEN 17 THRU 99 ALSO VOP
  • MOVE 5 TO Discount
  • WHEN 1 THRU 5 ALSO VOP
  • MOVE 7 TO Discount
  • WHEN 6 THRU 16 ALSO VOP
  • MOVE 12 TO Discount
  • WHEN 17 THRU 99 ALSO VOP
  • MOVE 18 TO Discount
  • WHEN 1 THRU 5 ALSO VOP 2000 ALSO "Y"
  • MOVE 10 TO Discount
  • WHEN 6 THRU 16 ALSO VOP 2000 ALSO "Y"
  • MOVE 23 TO Discount
  • END-EVALUATE

106
EVALUATE
  • EVALUATE TRUE ALSO Position
  • WHEN L-Arrow ALSO 2 THRU 10
  • SUBTRACT 1 FROM Position
  • WHEN R-Arrow ALSO 1 THRU 9
  • ADD 1 TO Position
  • WHEN L-Arrow ALSO 1
  • MOVE 10 TO Position
  • WHEN R-Arrow ALSO 10
  • MOVE 1 TO Position
  • WHEN DelKey ALSO ANY
  • PERFORM DeleteChar
  • WHEN Char ALSO 1 THRU 9
  • PERFORM InsertChar
  • ADD 1 TO Position
  • WHEN Char ALSO 10
  • PERFORM InsertChar
  • WHEN OTHER PERFORM
  • DisplayErrorMessage
  • END-EVALUATE

107
PERFORM
108
PERFORM Paragraph
  • PERFORM paragraph name
  • Execute all instructions in the paragraph
  • Return control to the next instruction after the
    PERFORM
  • PERFORM 100-ROUTINE
  • PERFORM 200-ROUTINE
  • PERFORM 100-ROUTINE
  • 100-ROUTINE.
  • 200-ROUTINE.
  • 300-ROUTINE.

109
PERFORM THRU
  • I view use of PERFORMTHRU as an older,
    unnecessary style. This is an opinion.
  • PERFORM paragraph name THRU paragraph name
  • PERFORM 100-RTN THRU 300-RTN.
  • 100-RTN.
  • 200-RTN.
  • 300-RTN.
  • 400-RTN.
  • PERFORM 100-XXX THUR 100-XXX-EXIT
  • 100-XXX.
  • DISPLAY IN 100-XXX.
  • 100-XXX-EXIT.
  • EXIT.
  • There is an implicit EXIT in every paragraph.

110
PERFORM WITH TIMES
111
PERFORM x TIMES
  • MOVE 5 TO COUNT
  • PERFORM COUNT TIMES
  • DISPLAY XXX
  • END-PERFORM

112
PERFORM UNTIL
113
PERFORM UNTIL
  • MOVE 0 TO X
  • PERFORM UNTIL X 10
  • MOVE X TO X-EDITED
  • DISPLAY X-EDITED
  • ADD 1 TO X
  • END-PERFORM
  • PERFORM X-PARA UNTIL X 10

114
PERFORM VARYING
115
Inline Perform
  • PERFORM VARYING X FROM 1 BY 1
  • UNTIL X 100
  • DISPLAY X
  • END-PERFORM
  • PRINTS
  • 1
  • 2
  • 3
  • 100

116
Inline PERFORM
  • PERFORM VARYING X FROM 5 BY -1
  • UNTIL X 0
  • DISPLAY X
  • END-PERFORM
  • PRINTS
  • 5
  • 4
  • 3
  • 2
  • 1
  • 0

117
Inline PERFORM
  • MOVE 10 TO X
  • PERFORM WITH TEST AFTER
  • UNTIL X 0
  • DISPLAY X
  • SUBTRACT 1 FROM X
  • END-PERFORM

118
PERFORM PARAGRAPH
  • PERFORM 100-RTN
  • WITH TEST AFTER
  • VARYING X FROM 1 BY 1
  • UNTIL X 100
  • 100-RTN.
  • .

119
Inline PERFORM
  • MOVE ZERO TO Y
  • PERFORM UNTIL X 0
  • READ AT END MOVE 0 TO X
  • ADD X TO Y
  • DISPLAY Y
  • END-PERFORM

120
Alternate PERFORM
  • PERFORM 100-PARA VARYING I FROM 1 BY 1 UNTIL
    I 5
  • AFTER J FROM 1 BY 1 UNTIL J 3
  • END-PERFORM
  • 100-PARA.
  • DISPLAY I J
  • .
  • 1 1
  • 1 2
  • 1 3
  • 2 1
  • 2 2
  • 2 3
  • 3 1
  • 3 2
  • 3 3
  • 4 1

121
Table Processing with Subscripts
  • 01 TOT PIC S9(8) PACKED DECIMAL.
  • 01 SUB1 PIC 99.
  • 01 TEMP-REC.
  • 05 TEMP OCCURS 12 TIMES
  • PIC S9(4).
  • MOVE 0 TO TOT
  • PERFORM VARYING SUB1 FROM 1 BY 1
  • UNTIL SUB1 12
  • ADD TEMP(SUB1) TO TOT
  • ENDPERFORM

122
Table Processing with Indexes
  • 01 TOT PIC S9(8) PACKED DECIMAL.
  • 01 TEMP-REC.
  • 05 TEMP OCCURS 12 TIMES INDEXED BY K
  • PIC S9(4).
  • MOVE 0 TO TOT
  • PERFORM VARYING K FROM 1 BY 1
  • UNTIL K 12
  • ADD TEMP(K) TO TOT
  • END-PERFORM

123
Manipulating Indexes
  • Indexes cant be manipulated with ordinary
    arithmetic commands. Instead use SET.
  • SET K TO 3
  • SET K UP BY 1
  • SET K UP BY 2
  • SET K DOWN BY 3

124
CONTINUE
Used to indicate that no operation is present.
125
EXIT
  • Sometimes used to provide a common endpoint to a
    series of paragraphs. (Unnecessary in my opinion
    since each paragraph contains an implicit exit.)
  • 100-PARA.
  • DISPLAY X
  • .
  • 100-PARA-EXIT.
  • EXIT
  • .

126
STOP
  • Usually used to permanently halt execution of a
    program
  • Can be used to temporarily halt execution and
    require operator intervention

127
GOBACK
  • Functions like an EXIT PROGRAM when coded at the
    end of a called program
  • Functions like STOP RUN when coded in a main
    program
  • I prefer coding this in place of STOP RUN

128
GO TO
  • Causes an unconditional jump in program execution
    to the procedure that is named.
  • This statement should be used only in very
    special situations, for instance, to branch to an
    error routine that terminates the program from a
    deeply nested area of your program.
  • Overuse of this statement is unnecessary and
    leads to spaghetti code
  • Dont even think of using the alternate forms of
    GO TO Computed and Altered!

129
Exercise 2
  • Create a file of 80 byte records
  • Each record has 3 fields
  • CUSTlNAME CHARACTER 15
  • CUSTFNAME - CHARACTER 15
  • BALANCE - PACKED DECIMAL 5 BYTES 2 DECIMALS
  • Table the file data using subscripts.
  • Sort the table with a bubble sort on customer
    name.
  • Print the sorted table Last Name First Name
    Balance

130
Exercise 3
  • Repeat Exercise 2 using indexes

131
SEQUENTIAL SEARCH
132
SEARCH
  • Search performs a sequential search with an index
  • Rule of thumb Use for tables with 20 items or
    less
  • 01 SALES-TAX.
  • 05 TAB-ENTRIES OCCURS 20 TIMES
  • INDEXED BY K.
  • 10 ZIPCODE PIC 9(5).
  • 10 RATE PIC V999.
  • SET K TO 1
  • SEARCH TAB-ENTRIES
  • AT END MOVE 0 TO TAX
  • WHEN ZIPIN ZIPCODE(K)
  • COMPUTE TAX RATE(K) AMOUNT
  • END-SEARCH

133
Exercise 4
  • Read the file from exercise 3
  • Store the data in a table
  • Read the file BCST.SICCC01.PDSLIB(DAT4EXER).
    Each record has a LAST NAME, FIRST NAME field
  • Last name columns 1 15
  • First name columns 16 30
  • Code a Sequential Search statement to find each
    name in the file. Print each name, Found or
    Not Found, and the customer balance if found.

134
SEARCH ALL
135
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) AMOUNT
  • END-SEARCH

136
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

137
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.

138
Exercise 5
  • Read the file from exercise 3
  • Store the data in a table
  • Read the file BCST.SICCC01.PDSLIB(DAT4EXER).
    Each record has a LAST NAME FIRST NAME field
  • Last name columns 1 15
  • First name columns 16 30
  • Code a Binary Search statement to find each name
    in the file. Print each name, Found or Not
    Found, and the customer balance if found.

139
STRING
140
STRING
  • Used to build string expressions by concatenation
    (blanks not stored)
  • STRING FNAME DELIMITED BY
  • MNAME DELIMITED BY
  • LNAME DELIMITED BY
  • INTO NAME-OUT

141
STRING
  • Blanks stored
  • DELIMITED BY SIZE means include the entire
    literal or variable contents
  • STRING FNAME DELIMITED BY
  • DELIMITED BY SIZE
  • MNAME DELIMITED BY
  • DELIMITED BY SIZE
  • LNAME DELIMITED BY
  • DELIMITED BY SIZE
  • INTO NAME-OUT

142
STRING
143
UNSTRING
144
UNSTRING
  • Separates a string into several component
    strings
  • Sending field must be numeric
  • UNSTRING NAME
  • DELIMITED BY ,
  • INTO LNAME
  • FNAME
  • MI
  • END-UNSTRING

145
UNSTRING
  • UNSTRING JCL-DATA
  • DELIMITED BY ALL SPACES OR ALL ','
  • INTO WS-DATE-REQUESTED
  • WS-DATE1
  • WS-DATE2
  • END-UNSTRING

146
Exercise 6
  • Read the file BCST.SICCC01.PDSLIB(STRINGS)
  • Print the first name, middle initial, and last
    names in columns

147
Exercise 7
  • Read the file BCST.SICCC01.PDSLIB(STRINGS1)
  • Print the digits followed by the letters. Use
    / as the delimiter of the two fields.

148
CALL
149
Static and Dynamic Call
  • Programs A and B that are linked together prior
    to being loaded are statically linked. If A
    calls B, the call is static
  • If programs A and B are separately compiled and
    linked, A can call B dynamically
  • 01 PGMNAME PIC X(8) VALUE B.
  • CALL PGMNAME

150
Calling Other Programs Statically
  • CALL literal program name
  • USING identifier-1,
  • Examples
  • CALL CUST1030 USING X,Y
  • CALL PROG1000

151
CALLING ANOTHER PROGRAM
  • CALL PROGXXXX USING A,B
  • IDENTIFICATION DIVISION.
  • PROGRAM-ID. PROGXXXX.
  • LINKAGE SECTION.
  • 01 X PIC X(5).
  • 01 Y PIC 999V99.
  • PROCEDURE DIVISION USING X,Y.
  • GOBACK
  • .

152
Static and Dynamic CALLS
  • Two methods for generating dynamic calls
  • Call MYPROG USING X,Y,Z
  • (Using an identifier insures a dynamic
    call.)
  • DYNAM/NODYNAM compiler option determines whether
    a static or dynamic call occurs
  • At TSYS all calls are dynamic.

153
Exercise 8
  • Write a main program that,
  • 1) Prints I am in the main program,
  • 2) Calls your subprogram,
  • 3) Prints I am back in the main program
  • Write a subprogram that prints I am in the
    subprogram.
  • Compile and link the programs, execute the main
    program

154
Exercise 9
  • Write a main program that passes 3 packed decimal
    numbers to a subprogram and a fourth variable in
    which to receive a result.
  • Write a subprogram that accepts the 3 integers,
    computes their sum and returns the answer to the
    main
  • Have the main print the result

155
Exercise 10
  • Write a main program that passes a variable X by
    reference and Y by content
  • Have the subprogram add one to both numbers
  • Have the main program print X and Y after
    returning from the subprogram

156
NUMERIC Class Test
  • Before using a suspect field that has a PIC of
    9s, use the NUMERIC class test to verify the
    field before doing arithmetic
  • IF AMOUNT-IN IS NUMERIC
  • ADD 1 TO AMOUNT-IN
  • ELSE
  • DISPLAY AMOUNT IS NOT NUMERIC
  • END-IF

157
Sign Test
  • Numeric data can be tested for positive,
    negative, and zero values
  • IF AMOUNT-IN IS POSITIVE
  • ADD 1 TO AMOUNT-IN
  • END-IF
  • IF AMOUNT-IN IS NEGATIVE
  • DISPLAY AMOUNT-IN
  • END-IF
  • IF AMOUNT-IN IS ZERO
  • DISPLAY THE FIELD IS ZERO
  • END-IF

158
INSPECT (TALLYING)
159
INSPECT (TALLYING)
  • INSPECT MYLINE
  • TALLYING ECOUNT FOR ALL E
  • AFTER INITIAL START"
  • BEFORE INITIAL END
  • END-INSPECT
  • INSPECT WORK TALLYING
  • COUNT1 FOR LEADING
  • COUNT2 FOR CHARACTERS
  • END-INSPECT
  • INSPECT WORK TALLYING
  • COUNT1 FOR ALL BEFORE .
  • COUNT2 FOR ALL CHARACTERS AFTER .
  • END-INSPECT

160
INSPECT (REPLACING)
161
INSPECT (REPLACING)
  • INSPECT MYDATA REPLACING ALL X" BY Y
  • AFTER INITIAL A"
  • BEFORE INITIAL Z
  • INSPECT MYDATA REPLACING LEADING " BY
  • INSPECT MYDATA REPLACING ALL A" BY
  • AFTER INITIAL X"
  • INSPECT MYDATA REPLACING FIRST A" BY "
  • AFTER INITIAL A"
  • BEFORE INITIAL Z
  • INSPECT MYDATA REPLACING ALL AAAA" BY ZZZZ"

162
INSPECT (CONVERTING)
163
INSPECT (CONVERTING)
  • INSPECT TEXTLINE CONVERTING "abcdefghijklmnopqrstu
    vwxyz" TO "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  • INSPECT FIELDA CONVERTING
  • 1234567890 TO ABCDEFGHIJ

164
REFERENCE MODIFICATION
  • Allows you to process PIC 9 and PIC X fields as
    if they were an array of characters.
  • FIELDNAME(start pos length)
  • 05 FIELDA PIC X(7) VALUE ABCDEFG.
  • FIELDA(13) ? ABC
  • FIELDA(22) ? BC
  • FIELDA(4 ) ? DEFG

165
Qualification of Names
  • COBOL allows the same variable name to be used to
    define fields in different records or group
    items.
  • Duplicate names must be qualified when they are
    referenced
  • 01 XFIELD.
  • 05 YFIELD.
  • 10 ZFIELD PIC X(3).
  • If ZFIELD is a duplicate name it can be qualified
    in two ways ZFIELD OF YFIELD
  • ZFIELD OF XFIELD

166
Intrinsic Functions
  • COBOL does not permit user-defined functions or
    procedures
  • Intrinsic (built-in) Functions can be used in
    your programs
  • Three broad categories of intrinsic functions
    date functions, numeric functions and string
    functions.

167
Intrinsic Functions
  • Intrinsic Function values are replaced in the
    position where they occur by the function result.
  • In COBOL, an Intrinsic Function is a temporary
    data item whose value is determined at the time
    the function is executed.
  • Functions that return a number value (numeric
    integer) are always considered to be signed.
  • A function that returns a number value can be
    used only in an arithmetic expression or as the
    source of a MOVE statement.

168
Intrinsic Functions
  • Intrinsic function pattern
  • FUNCTION FunctionName(Parameters)
  • FunctionName is the name of the function and
    Parameters is one or more parameters supplied to
    the function.
  • MOVE FUNCTION RANDOM(99) TO NUM
  • MOVE FUNCTION REVERSE(ABCD) TO
  • NAME

169
Sample Intrinsic Functions
  • CHAR(PosInt) AlphanumericReturns the character at
    ordinal position PosInt of the collating
    sequence.
  • ORD(Alph) IntegerReturns the ordinal position of
    character Alph.
  • ORD-MAX(Any...)IntegerReturns the ordinal
    position of whichever of the parameters has the
    highest value. All parameters must be of the same
    type. The parameter list may be replaced by an
    array.
  • ORD-MIN(Any...) IntegerReturns the ordinal
    position of whichever of the parameters has the
    lowest value. All parameters must be of the same
    type.

170
Intrinsic Functions
  • REVERSE(Alph) Alphanumeric Returns a character
    string with the characters in Alph reversed.
  • LOWER-CASE(Alph) Alphanumeric Returns a character
    string with the characters in Alph changed to
    their lower case equivalents. UPPER-CASE(Alph)
    Alphanumeric Returns a character string with the
    characters in Alph changed to their upper case
    equivalents

171
Date Intrinsic Functions
  • CURRENT-DATE - Returns a 21 character string
    representing the current date and time
  • DATE-OF-INTEGER(PosInt) - Returns the yyyymmdd
    (standard date) equivalent of the integer date -
    PosInt. The integer date is the number of days
    that have passed since Dec 31st 1600 in the
    Gregorian Calendar.

172
Math Intrinsic Functions
  • MAX(Any...)Return type on type of Any.
  • Takes a parameter list and returns the content of
    whichever parameter contains the maximum value.
  • The returned type depends upon the parameter
    types as follows Alphanumeric if parameters are
    Alphabetic or Alphnumeric.Integer if all are
    integer.Numeric if all are Numeric. An array
    may be used instead of the parameter list.

173
Math Intrinsic Functions
  • SQRT(Num) Returns an approximation of the square
    root of Num.
  • STANDARD-DEVIATION(Num...)
  • Returns an approximation of the standard
    deviation of its parameters.
  • And many others

174
Condition Names
  • 01 NO-OF-NEIGHBORS PIC 9.
  • 88 JUST-RIGHT VALUE 2 THRU 3.
  • 88 TOO-FEW VALUE 0 THRU 1.
  • 88 TOO-MANY VALUE 4 THRU 8.
  • 01 MARITAL-STATUS PIC X.
  • 88 VALID-STATUS
  • VALUE S M D W.

175
Variable Length Tables
  • 01 TCOUNT PIC S9(3) PACKED-DECIMAL.
  • 01 STATE-TABLE.
  • 05 ST-GROUP OCCURS 1 TO 100 TIMES
  • DEPENDING ON TCOUNT
  • ASCENDING KEY IS ZIP
  • INDEXED BY NDX.
  • 10 ZIP PIC X(5).
  • 10 RATE PIC V9999.

176
Loading a Variable Length Table
  • PERFORM WITH TEST AFTER
  • VARYING NDX FROM 1 BY 1
  • UNTIL PTABLE-EOF OR
  • NDX 100
  • PERFORM FILE-READ
  • IF NOT PTABLE-EOF
  • MOVE ZIP-IN TO ZIP(NDX)
  • MOVE RATE-IN TO RATE(NDX)
  • ELSE
  • SET NDX DOWN BY 1
  • SET TCOUNT TO NDX
  • END-IF
  • END-PERFORM

177
Exercise 11
  • Read the file BCST.SICCC01.PDSLIB(STATES)
  • Store the data in a variable length table
  • Read the file BCST.SICCC01.PDSLIB(COBDATA4).
    Each record has a 2 digit state code and a 5 byte
    zip code. For each record in this file print a
    record on a report. The report will have the
    following format
  • GA 31907 GEORGIA - VALID ZIP AND
    STATE
  • CA 90003 CALIFORNIA - INVALID ZIP
  • ZD 30002 INVALID STATE
  • Capitalize the state name found in the table.
    Print message next to each
  • state name separated by a dash.
  • Use the SEARCH command perform a sequential
    search
  • of the table for each look up. After the program
    is
  • working, modify it to perform a binary search
    with SEARCH
  • ALL

178
Files with Multiple Record Types
  • FD TransFile.
  • 01 InsertRec.
  • 02 RECI PIC X.
  • 02 STUDENTIDI PIC 9(7).
  • 02 STUDENTNAME.
  • 03 SURNAME PIC X(8).
  • 03 INITIALS PIC XX.
  • 02 DOB.
  • 03 YOBIRTH PIC 9(4).
  • 03 MOBIRTH PIC 99.
  • 03 DOBIRTH PIC 99.
  • 02 COURSECODE PIC X(4).
  • 02 GENDER PIC X.
  • 01 DELETEREC.
  • 02 RECD PIC X.
  • 02 STUDENTIDD PIC 9(7).
  • 01 UpdateRec.
  • 02 STUDENTIDU PIC 9(7).
  • 02 NEWCOURSECODE PIC X(4).

179
Multiple O1 File Descriptions
  • Any number of 01 record descriptions can be coded
    with the FD
  • Only one buffer is used no matter how many record
    descriptions have been coded
  • Record fields cant be referenced before the file
    is opened or after it is closed
  • With multiple record formats, there needs to be a
    fixed field to indicate the record type
  • Value clauses are only used for 88 level items

180
Writing With Carriage Control
181
Variable Length Records
  • The RECORD IS VARYING IN SIZE clause specifies a
    file containing variable length records.

182
Variable Length Records
  • The RecordSize number in the DEPENDING ON phase
    must be an elementary unsigned integer data-item
    declared in the WORKING-STORAGE SECTION.
  • FD TRANFILE
  • RECORD IS VARYING IN SIZE
  • FROM 1 TO 80 CHARACTERS
  • DEPENDING ON RECSIZE.

183
Variable Length Record Processing
  • When writing a variable length record, the size
    of the record must be placed in the RecordSize
    variable before the WRITE is issued.
  • When reading a variable length record, the length
    of the record is delivered into the RecordSize
    variable.
  • The 01 Record description must be long enough to
    accommodate the largest record

184
Variable length Record Processing
  • FD TRANFILE
  • RECORD IS VARYING IN SIZE
  • FROM 1 TO 80 CHARACTERS
  • DEPENDING ON RECSIZE.
  • 01 TRANREC PIC X(80).
  • 88 END-OF-RECS VALUE HIGH-VALUES.
  • WORKING-STORAGE SECTION.
  • 01 RECSIZE PIC 99.
  • READ TRANFILE AT END
  • DISPLAY TRANREC(1RECSIZE)

185
Writing Variable Length Records
  • Many variable length records have a fixed front
    end, and varying numbers of segments
  • FD CUST
  • RECORD IS VARYING IN SIZE
  • FROM 28 TO 408 CHARACTERS
  • DEPENDING ON RECORD-LEN.
  • 01 CUST-REC.
  • 05 ROOT-SEG.
  • 10 CUST-NO PIC X(6).
  • 10 INVOICE-COUNT PIC S99.
  • 05 INVOICE-SEGMENT OCCURS 20 TIMES INDEXED
    BY NDX
  • 10 INVOICE-DATE PIC X(8).
  • 10 INVOICE-NO PIC X(5).
  • 10 INVOICE-AMT PIC S9(5)V99.
  • YOU MUST SET THE RECORD-LEN BEFORE WRITING
    RECORD!

186
Alternative
  • FD CUSTFILE
  • RECORD CONTAINS 20 TO 80 CHARACTERS
  • 01 REC.
  • 05 FIXED-PART PIC X(20).
  • 10
  • 05 VARY-PART OCCURS 1 TO 6 TIMES
  • DEPENDING ON COUNT
  • INDEXED BY NDX
  • Count has to be initialized at the time of
    writing the record

187
Reading Variable Length Records
  • FD CUST
  • RECORD IS VARYING IN SIZE
  • FROM 28 TO 408 CHARACTERS.
  • 01 CUST-REC.
  • 05 ROOT-SEG.
  • 10 CUST-NO PIC X(6).
  • 10 INVOICE-COUNT PIC S99.
  • 05 INVOICE-SEGMENT OCCURS 20 TIMES INDEXED
    BY NDX
  • 10 INVOICE-DATE PIC X(8).
  • 10 INVOICE-NO PIC X(5).
  • 10 INVOICE-AMT PIC S9(5)V99.
  • PERFORM VARYING NDX FROM 1 BY 1

  • UNTIL NDX INVOICE-COUNT
  • ADD INVOICE-AMT(NDX) TO AMT-OWED
  • END-PERFORM

188
EXERCISE 12
  • Each A record for a given customer is followed by
    one to five B records for that customer.
  • For each A record, write out one variable length
    record that contains the A record as the fixed
    part and the associated B records as the variable
    parts

189
EXERCISE 13
  • BCST.SICCC01.PDSLIB(COBDATA5) CONTAINS TWO TYPES
    OF 80 BYTE RECORDS
  • RECORD TYPE A
  • 1 BYTE TYPE CODE PIC X CONTAINING A
  • 5 BYTE CUSTOMER ID PIC X(5)
  • RECORD TYPE B
  • 1 BYTE TYPE CODE PIC X CONTAINING B
  • 5 BYTE PART NUMBER PIC X(5)
  • 6 BYTE COST PIC 9(4)V99

190
EXERCISE 14
  • Read the variable length records you created in
    exercise 5. Produce a report similar to the one
    below
  • CUSTOMER ID PART COST
  • 10030 22322 1,333.34
  • 23444 3.44
  • 50043 98.77
  • TOTAL 1435.55
  • 20030 22322 1,333.34
  • 23444 3.44
  • 50043 98.77
  • TOTAL 1435.55

191
KSDS FILE CREATION
  • SELECT INVMAST
  • ASSIGN TO INVMAST
  • ORGANIZATION IS INDEXED
  • ACCESS IS RANDOM
  • RECORD KEY IS ITEM-NO
  • FILE STATUS IS FILE-STAT.
  • FD INVMAST
  • 01 RECORD-AREA.
  • 05 ITEM-NO PIC X(5)
  • 05 PIC X(75).
  • WORKING-STORAGE SECTION
  • 01 FILE-STAT PIC X(2).

192
KSDS File Commands
  • OPEN INPUT file-name
  • OPEN OUTPUT file-name
  • READ file-name NEXT RECORD
  • INTO data-area
  • AT END imperative
  • NOT AT END imperative
  • END-READ

193
KSDS File Commands
  • WRITE record FROM data-name
  • INVALID KEY imperative
  • NOT INVALID KEY imperative
  • END-WRITE
  • REWRITE record FROM data-name
  • INVALID KEY imperative
  • NOT INVALID KEY imperative
  • END-REWRITE
  • CLOSE file-name

194
KSDS File Statements
  • START file-name
  • KEY IS data-name
  • INVALID KEY imperative
  • NOT INVALID KEY imperative
  • END-START

195
KSDS File Statements
  • DELETE file-name RECORD
  • INVALID KEY imperative
  • NOT INVALID KEY imperative
  • END-DELETE

196
Exercise 15
  • Read BCST.SICCC01.PDSLIB(COBDATA6)
  • COL 1-5 KEY
  • COL 6-25 NAME
  • Allocate a KSDS with record size 25 and a key
    field in cols 1-5
  • Write out a KSDS record for each record in the
    file. Write out the records sequentially.

197
Exercise 16
  • Read BCST.SICCC01.PDSLIB(COBDATA7)
  • COL 1-5 KEY
  • Read a KSDS record (randomly) for each record in
    the file. Write out the names you find
    sequentially. If the record doesnt exist, print
    a message Not Found

198
Nested Programs
  • COBOL programs can be nested. There are many
    advantages for doing this
  • The monolithic working storage of most COBOL
    programs leads to difficulty in debugging because
    all data is global
  • Nested programs break the working storage into
    smaller areas that can only be accessed by
    programs that need access.
  • Nested programs provide for parameter passing by
    techniques found in all modern languages (by
    value, by reference)
  • There is no execution degradation because of
    nested programs. In fact, calling a nested
    program i
Write a Comment
User Comments (0)