Using The COPY, CALL, STRING , UNSTRING STATEMENTS

50
16 -1 Chapter 16

description

Chapter 16. Using The COPY, CALL, STRING , UNSTRING STATEMENTS. Chapter Objectives. To familiarize you with COPY statement for copying parts of a program stored in a library CALL statement for executing called programs as subroutines Text manipulation with STRING and UNSTRING statements. - PowerPoint PPT Presentation

Transcript of Using The COPY, CALL, STRING , UNSTRING STATEMENTS

Page 1: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

16-1

Chapter 16

Page 2: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

To familiarize you with COPY statement for copying parts of a

program stored in a library CALL statement for executing called

programs as subroutines Text manipulation with STRING and

UNSTRING statements

16-2

Page 3: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

To copy prewritten COBOL entries stored in a library into a program

Often used to copy ◦ FD, 01 entries that define and describe files and

records◦ Tables◦ SCREEN SECTIONs◦ Standard modules used in PROCEDURE DIVISION

16-3

Page 4: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

Saves programmer coding, debugging time by using code already written

Promotes program standardization - all entries copied from library are identical

Reduces time needed to modify code - changes made once to library copy

Library entries can be well-documented so meaningful to all users

16-4

Page 5: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

COPY test-name OF

library-name.

IN

Use in ENVIRONMENT, DATA, or PROCEDURE DIVISION

Library-name is external-name, 1 to 8 characters, letters and digits only

We’ll have to check to see how to create library on the alpha

16-5

Format

Page 6: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

Suppose file called Customer, stored in library contains following entries:01 Customer-Rec.

05 Cust-No Pic X(5).05 Cust-Name Pic X(20).05 Cust-Address Pic X(30).05 Cust-Bal-Due Pic 9(4)V99.

16-6

Page 7: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

Code COPY statement at point in program where entries should appear

Data Division.File Section.FD CustFile.Copy Customer.

In source listing, copied lines are marked with a C or other designator

16-7

Page 8: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

… ...11 FD CustFile.12 Copy Customer.13C 01 Customer-Rec.14C 05 Cust-No Pic X(5).15C 05 Cust-Name Pic X(20).16C 05 Cust-Address Pic X(30).17C 05 Cust-Bal-Due Pic 9(4)V99.

16-8

Line numbers followed by C are copied statements

Page 9: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

REPLACING ==pseudo-text-1== ==pseudo-text-2==

identifier-1 BY identifier-2 ...literal-1 literal-2word-1 word-2

Add REPLACING clause to COPY to make changes to copied entries

16-9

Format

Page 10: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

Copy Customer Replacing Cust-No By Cust-Number,==X(5)== By ==X(6)==.

Changes copied line 14C◦ From: 14C 05 Cust-No Pic X(5).◦ To: 14C 05 Cust-Number Pic X(6).

16-10

Example

Page 11: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

Used in PROCEDURE DIVISION to CALL or reference independent subprograms stored in library

Calling program - main program that calls or references subprogram

Called program - subprogram stored in separate file that is linked and executed within main program

16-11

Page 12: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

Compiled, debugged, stored in library to be called when needed

Typical subprograms include:◦ Edit routines◦ Error control checks◦ Standard calculations◦ Summary, total printing

16-12

Page 13: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

Avoids duplication of effort Improves programmer productivity Provides greater flexibility Changes to called program can be made

without modifying calling program Results in greater standardization

16-13

Page 14: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

COPY brings entries into program as is CALL causes an entire program (the called

program) to be executed◦ Data passed from calling to called program◦ Entire called program (subprogram) executed◦ Data passed back from called program◦ Control returns to calling program

COPY is like include in C CALL is like a function

16-14

Page 15: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

Typically, COPY ENVIROMENT, DATA DIVISION entries into source program

CALL subprograms in PROCEDURE DIVISION rather than COPY them

16-15

Page 16: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

CALL literal-1[USING identifier-1 …]

To call subprogram into main program literal-1 is PROGRAM-ID name in called

program Enclose in quotes

16-16

Format

Page 17: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

Calling and Called Programs

Identification Division....Procedure Division....

Call 'Sub1'...

Call 'Sub2'...

Identification Division.Program-ID. Sub1.…Procedure Division. Exit

Program.

16-17

Identification Division.

Program-ID. Sub2.…Procedure Division.

Exit Program.

1

2

3

4

Page 18: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

1.Subprogram Sub1 called and executed in its entirety

2.Control returns to calling program3.Subprogram Sub2 called and executed in

its entirety4.Control returns to calling program

Same as other languages

16-18

Page 19: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

USING clause required if data passed between calling and called program

Fields passed are called parameters Parameter passed in several ways:

◦ Value of parameter may be passed to and used by subprogram but not changed

◦ Value for parameter may be calculated by instructions in subprogram and passed back to main program

16-19

Page 20: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

Suppose a main program ◦ Reads in employee records◦ Produces report showing employee salary, Social

Security tax and Medicaid tax (taxes referred to as FICA taxes)

Subprogram is to calculate amount of each tax based on the salary field◦ Assume PROGRAM-ID is FICAProg

16-20

Page 21: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

Parameters needed ◦ Salary (WS-Ann-Sal)

Passed to subprogram, used to calculate taxes but not changed by subprogram

◦ Tax fields Soc-Sec and Med-Tax Subprogram calculates values for these parameters

and passes them back to main program

16-21

Page 22: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

CALL statement with:◦ Literal same as PROGRAM-ID of called program◦ List of parameters in USING clause

Call 'FICAProg' Using WS-Ann-Sal, Soc-Sec, Med-Tax

16-22

Example

Page 23: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

PROGRAM-ID identifier is literal used in CALL in main program

LINKAGE SECTION must be defined in DATA DIVISION◦ Follows FILE and WORKING-STORAGE SECTIONs◦ Describes all items passed between main and

subprogram◦ Format same as WORKING-STORAGE

16-23

Page 24: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

PROCEDURE DIVISION header must include USING clause◦ Lists all parameters or fields defined in LINKAGE

SECTION EXIT PROGRAM

◦ Last executed statement in called program◦ Returns control back to calling program

16-24

Page 25: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

Identification Division.Program-ID. FICAProg.Data Division.Linkage Section.01 WS-Ann-Sal Pic 9(6).01 Soc-Sec Pic 9(4)V99.01 Med-Tax Pic 9(5)V99.

16-25

Page 26: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

Procedure Division Using WS-Ann-Sal, Soc-Sec, Med-Tax.

If WS-Ann-Sal <= 84900Compute Soc-Sec = .062 * WS-Ann-Sal

ElseCompute Soc-Sec = .062 * 84900

End-IfCompute Med-Tax = .0145 * WS-Ann-SalExit Program.

16-26

Page 27: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

When FICAProg is called◦ Value of WS-Ann-Sal passed to subprogram◦ Value of Soc-Sec and Med-Tax undefined

When FICAProg finished◦ Values calculated for Soc-Sec and Med-Tax

passed back to main program

16-27

Page 28: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

Parameters passed in sequence◦ First parameter in CALL … USING passed to first

parameter in PROCEDURE DIVISION USING clause and so on

Number of parameters in both USING clause should be the same

PIC clauses for corresponding parameters must be same

16-28

Page 29: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

Data-names of corresponding parameters may be same or different

Parameters paired by sequence, not by data-name (same as C)

List parameters in same order in both USING clauses

16-29

Page 30: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

Assume USING clauses are:Call 'FICAProg'

Using Soc-Sec, Med-Tax, WS-Ann-Sal

Procedure Division Using WS-Ann-Sal, Soc-Sec, Med-Tax.

◦ Soc-Sec passed as value for WS-Ann-Sal◦ Calculations in subprogram will be incorrect,

values passed back incorrect

16-30

Page 31: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

To combine or concatenate several fields into one

Consider following entries:05 Name.

10 Last-Name Pic X(10).10 First-Name Pic X(10).10 Middle-Name Pic X(6).

16-31

Page 32: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

Suppose name fields have values below

Print name with single blank between parts: THOMAS ALVA EDISON

16-32

Last-NameE D I S O N

First-NameT H O M A S

Middle-NameA L V A

Page 33: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

STRING identifier-1 ...literal-1

identifier-2DELIMITED BY literal-2 ...

SIZEINTO identifier-3

[END-STRING]

16-33

Page 34: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

identifier-1 or literal-1 is field or value to be combined

identifier-3 is field in which all identifiers or literals are combined

DELIMITED BY clause◦ Transmitting of characters ends when value of

identifier-2 or literal-2 encountered◦ SIZE means entire contents to be copied

16-34

Page 35: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

StringFirst-Name Delimited By ' 'Middle-Name Delimited By ' 'Last-Name Delimited By ' 'Into Name-Out

Copies characters from named fields to Name-Out up to first blank in field

Name-Out is THOMASALVAEDISON

16-35

Page 36: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

To insert a blank between parts of name

StringFirst-Name Delimited By ' '' ' Delimited By SizeMiddle-Name Delimited By ' '' ' Delimited By SizeLast-Name Delimited By ' 'Into Name-Out

16-36

Places blank after each field

Page 37: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

Specifies operation(s) to be performed if receiving field not large enough to accommodate result

NOT ON OVERFLOW option may also be used

END-STRING scope terminator also available

16-37

Page 38: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

To count number of characters moved in STRING statement

Increments specified field by one for every character moved

If you need to know how may characters were concatenated

16-38

Page 39: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

Move 1 To WS-CountString First-Name Delimited By ' '

Into Name-OutWith Pointer WS-Count

If First-Name is 'Paul', WS-Count is five after STRING

Subtract one from WS-Count to get length of actual move (4)

Initialize WS-Count to 1 or 0

16-39

Page 40: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

Also used to move data to receiving field beginning at some point other than first position

If WS-Count initialized to 15 before STRING, First-Name moved to Name-Out beginning with fifteenth position of Name-Out

16-40

Page 41: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

DELIMITED BY clause required Receiving field must be elementary data

item - no editing symbols or JUSTIFIED RIGHT clause

All literals must be nonnumeric Identifier with POINTER clause must be

elementary Moves data left to right but does not pad

with low-order blanks

16-41

Page 42: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

To separate a field into its components Suppose Name-In equals TAFT, WILLIAM, H The last name, first name and middle initial

can be stored in separate fields without commas with the following UNSTRING statement

16-42

Page 43: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

Unstring Name-InDelimited By ','

Into Last-NameFirst-NameMiddle-Initial

TAFT will be stored in Last-Name, William in First-Name and H in Middle-Initial

16-43

Page 44: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

UNSTRING identifier-1DELIMITED BY [ALL] identifier-2

literal-1

OR [ALL] identifier-3 literal-2 …

INTO identifier-4 …[END-UNSTRING]

16-44

Page 45: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

Sending field, as well as literal, must be nonnumeric

Receiving fields may be numeric or nonnumeric

ALL phrase means one or more occurrences of literal or identifier treated as one

POINTER and OVERFLOW clauses may also be used

16-45

Page 46: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

COPY Statement To copy entries stored in a library to a user

program Entries for ENVIRONMENT, DATA, and

PROCEDURE DIVISIONs may be copied

16-46

Page 47: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

COPY statement most often used for Copying standard file and record description

entries Modules used in PROCEDURE DIVISION

16-47

Page 48: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

CALL Statement To call or reference entire programs stored

in a library Calling program is user program Called program (subprogram) is program

accessed from library

16-48

Page 49: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

To pass data between calling program and called program

CALL statement must include USING clause listing name of fields being passed

PROCEDURE DIVISION statement of called program must also have USING clause

Called program must have LINKAGE SECTION defining fields passed

Identifiers in calling and called program may be same or different

16-49

Page 50: Using  The COPY, CALL,  STRING , UNSTRING STATEMENTS

STRING statement joins or concatenates fields or portions of fields into one field

UNSTRING statement breaks a long string into parts and thus enables processing of portion of sending field

16-50