Using The COPY, CALL, STRING , UNSTRING STATEMENTS
-
Upload
sydney-greer -
Category
Documents
-
view
18 -
download
1
description
Transcript of Using The COPY, CALL, STRING , UNSTRING STATEMENTS
![Page 1: Using The COPY, CALL, STRING , UNSTRING STATEMENTS](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/1.jpg)
16-1
Chapter 16
![Page 2: Using The COPY, CALL, STRING , UNSTRING STATEMENTS](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/2.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/3.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/4.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/5.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/6.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/7.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/8.jpg)
… ...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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/9.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/10.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/11.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/12.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/13.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/14.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/15.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/16.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/17.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/18.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/19.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/20.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/21.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/22.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/23.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/24.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/25.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/26.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/27.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/28.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/29.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/30.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/31.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/32.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/33.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/34.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/35.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/36.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/37.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/38.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/39.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/40.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/41.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/42.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/43.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/44.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/45.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/46.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/47.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/48.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/49.jpg)
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](https://reader036.fdocuments.us/reader036/viewer/2022062308/56812b94550346895d8fb48c/html5/thumbnails/50.jpg)
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