using the copy, call, string , unstring statements
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 PresentationTRANSCRIPT
16-1
Chapter 16
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
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
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
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
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
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
… ...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
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
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
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
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
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
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
Typically, COPY ENVIROMENT, DATA DIVISION entries into source program
CALL subprograms in PROCEDURE DIVISION rather than COPY them
16-15
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
STRING identifier-1 ...literal-1
identifier-2DELIMITED BY literal-2 ...
SIZEINTO identifier-3
[END-STRING]
16-33
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
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
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
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
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
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
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
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
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
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
UNSTRING identifier-1DELIMITED BY [ALL] identifier-2
literal-1
OR [ALL] identifier-3 literal-2 …
INTO identifier-4 …[END-UNSTRING]
16-44
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
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
COPY statement most often used for Copying standard file and record description
entries Modules used in PROCEDURE DIVISION
16-47
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
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
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