340 likes | 413 Views
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.
E N D
Chapter 16 Using The COPY, CALL, STRING , UNSTRINGSTATEMENTS
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
COPY Statement • 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 • Like the #include in C++
COPY Statement Format 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 • Can be used to replace with other text also using the REPLACE keyword.
COPY Statement Example • 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.
COPY Statement Example • 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
Source Listing with COPY … ... 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. Line numbers followed by C are copied statements
CALL Statement • 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
Called Program (Subprogram) • Compiled, debugged, stored in library to be called when needed • Typical subprograms include: • Edit routines • Error control checks • Standard calculations • Summary, total printing
CALL Statement Format CALL literal-1 [USING identifier-1 …] • To call subprogram into main program • literal-1 is PROGRAM-ID name in called program • Enclose in quotes
Calling and Called Programs Identification Division. ... Procedure Division. ... Call 'Sub1' ... Call 'Sub2' ... Identification Division. Program-ID. Sub1. … Procedure Division. Exit Program. 1 2 Identification Division. Program-ID. Sub2. … Procedure Division. Exit Program. 3 4
CALL … USING • USING clause required if data passed between calling and called program • 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
CALL … USING Example • 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
CALL … USING Example • 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
Calling Program Requirements • 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 Example
Called Program Requirements • 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
Called Program Requirements • 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
Subprogram Example 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.
Subprogram - Procedure Division Procedure Division Using WS-Ann-Sal, Soc-Sec, Med-Tax. If WS-Ann-Sal <= 84900 Compute Soc-Sec = .062 * WS-Ann-Sal Else Compute Soc-Sec = .062 * 84900 End-If Compute Med-Tax = .0145 * WS-Ann-Sal Exit Program.
Subprogram Example • 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
Parameter Correspondence • 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 • Same as you are used to in other languages
STRING Statement • 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).
STRING Statement • Suppose name fields have values below • Print name with single blank between parts: THOMAS ALVA EDISON
STRING Statement Format STRING identifier-1 ... literal-1 identifier-2 DELIMITED BY literal-2 ... SIZE INTO identifier-3 [END-STRING]
STRING Statement • 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
STRING Example String First-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
STRING Example • To insert a blank between parts of name String First-Name Delimited By ' ' ' ' Delimited By Size Middle-Name Delimited By ' ' ' ' Delimited By Size Last-Name Delimited By ' ' Into Name-Out Places blank after each field
OVERFLOW Option • 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
POINTER Option • 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 • Tells you where you are now pointing within the string
POINTER Option Example Move 1 To WS-Count String First-Name Delimited By ' ' Into Name-Out With 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)
POINTER Option • 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
UNSTRING Statement • 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
UNSTRING Example Unstring Name-In Delimited By ',' Into Last-Name First-Name Middle-Initial • TAFT will be stored in Last-Name, William in First-Name and H in Middle-Initial
UNSTRING Statement • 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