Title: Chapter 9 More about the Procedure Division
1Chapter 9 More about the Procedure Division
2PERFORM - with test
- PRE-TEST PERFORM ... Until .... Or
PERFORM ... Until WITH TEST BEFORE
Condition is test before the loop is entered
loop may never be executed - POST-TEST PERFORM ... Until WITH TEST AFTER
Condition is tested after the loop is
executed at least once
3Figure 9.1 The Iteration Structure
POST-TEST
PRE-TEST
A
CONDITION?
A
TRUE
CONDITION?
FALSE
FALSE
TRUE
(a) DO WHILE Construct
(b) DO UNTIL Construct
4 Priming Read
Procedure Division statements to process the
current record
5In Line Perform
PERFORM UNTIL DATA-REMAINS-SWITCH NO
READ INPUT-FILE AT END MOVE
NO TO DATA-REMAINS-SWITCH NOT
AT END . . .END-PERFORM
(b) False Condition Branch with In-Line Perform
Procedure Division statements to process the
current record
Advantage - Read is done only in one place within
the program
6READ .... INTO
- Reads the file and moves the record to the object
of the INTO clause - Object of the into clause must be a defined
usually in Working-Storage - Provides two copies of the record READ
7Figure 9.3 The READ INTO statement
FD EMPLOYEE-FILE DATA RECORD IS
EMPLOYEE-RECORD.01 EMPLOYEE-RECORD PIC
X(60). . . .WORKING-STORAGE
SECTION.01 FILLER PIC X(14) VALUE WS BEGINS
HERE.01 WS-EMPLOYEE-RECORD. 05
EMP-NAME PIC X(25). . .
. PROCEDURE DIVISION. . . .
READ EMPLOYEE-FILE INTO WS-EMPLOYEE-RECORD
AT END MOVE NO TO DATA-REMAINS-SWITCH NO
T AT END PERFORM PROCESS-THIS-RECORD
END-READ.
COPY number 1
COPY number 2
8WRITE ... FROM
- Moves the object of the FROM to the subject of
the WRITE - Convenient way to move a record to the Output
processing buffer - Ex WRITE Print-Line FROM Detail-Line AFTER
ADVANCING 1 LINEMoves the Detail-Line to the
Print-Line and then does the WRITE
9The WRITE FROM statement
10INITIALIZE
- Sets multiple data names to some initial value
with one statement - INITIALIZE - with no object will set all numeric
data items to zero and all alphanumeric items to
spaces --- DANGEROUS to use because it affects
the entire Data Division - FUJITSU prohibits
11INITIALIZE object
- Object can be a Group or Elementary item
- INITIALIZE Group-Name sets numeric pictures to
zero and alphanumeric to spacesGood
to use when resetting accumulators in processes
that requirement different levels of totals
12INITIALIZE object REPLACING
- Allows you to specify initial values other than
Spaces and Zeros - INITIALIZE Program-Switches ALPHANUMERIC DATA BY
YESSets all X fields in the Group-Item to
YES
13The INITIALIZE statement
- Sets elementary or group data names to
initial value - DOES NOT RESET VALUE TO THAT OF THE VALUE
STATEMENT!!! - EX 01 GROUP-ITEM. 05
NUMERIC-FIELD-1 PIC 9(4). 05
NUMERIC-FIELD-2 PIC 9(4). 05
ALPHANUMERIC-FIELD-1 PIC X(15) VALUE TOM.
05 ALPHANUMERIC-FIELD-2 PIC X(20). - The statement INITIALIZE GROUP-ITEM
- is equivalent to the combined statements
MOVE ZEROS TO NUMERIC-FIELD-1. MOVE ZEROS TO
NUMERIC-FIELD-2. MOVE SPACES TO
ALPHANUMERIC-FIELD-1. MOVE SPACES TO
ALPHANUMERIC-FIELD-2.
14INSPECT
- Convenient way to replace one character with
another - INSPECT PayHours REPLACING LEADING SPACES BY
ZERO - INSPECT Det-SSNumber REPLACING ALL Spaces BY -
15Figure 9.4 The INSPECT statement
01 RECORD-IN. 05 SOC-SEC-NUM PIC
9(9). . . .01 PRINT-LINE.
05 SOC-SEC-NUM-OUT PIC 999B99B9999. .PROCEDURE
DIVISION. . MOVE
SOC-SEC-NUM TO SOC-NUM-OUT. INSPECT
SOC-SEC-NUM-OUT REPLACING ALL Spaces BY -.
Initial SOC-SEC-NUM 123 45 6789 Result
SOC-SEC-NUM-OUT 123-45-6789
16STRING and UNSTRING
- STRING join two or more alphanumeric fields
together - Concatenation. - DELIMITED BY some value - indicates when to stop
moving - DELIMITED BY SIZE move the entire field
- UNSTRING - Breaks a field apart
- DELIMITED BY some value delineates the component
parts
17Figure 9.5 The STRING Statement
05 NAME-IN-PIECES. 10 LAST-NAME PIC
X(16). 10 FIRST-NAME PIC X(10). 10
MIDDLE-INITIAL PIC X. 05 ENTIRE-NAME PIC
X(29). (a) Working-Storage Holding Areas
18Figure 9.5 The STRING Statement (cont.)
MOVE SPACES TO ENTIRE-NAME.STRING FIRST-NAME
DELIMITED BY SPACE DELIMITED BY SIZE
MIDDLE-INITIAL DELIMITED BY SPACE
DELIMITED BY SIZE LAST-NAME DELIMITED
BY SPACE INTO ENTIRE-NAME (b) STRING
Statement
Execution Steps
(c) Sequence of transfer
19Figure 9.6 The UNSTRING Statement
05 NAME-IN-PIECES. 10 LAST-NAME PIC
X(16). 10 FIRST-NAME PIC X(10). 10
MIDDLE-INITIAL PIC X. 05 ENTIRE-NAME PIC
X(31). (a) Working-Storage Holding Areas
MOVE SPACES TO NAME-IN-PIECES.UNSTRING
ENTIRE-NAME DELIMITED BY INTO FIRST-NAME
MIDDLE-INITIAL LAST-NAME. (b) UNSTRING Statement
20Figure 9.6 The UNSTRING Statement
J
O
H
N
H
S
M
I
T
H
(1) ENTIRE-NAME
H
FIRST-NAME
LAST-NAME
MIDDLE-INITIAL
(c) Execution of UNSTRING
21Reference Modification
- Lets you address a character string within an
existing data-item - data-name (beginlength)Telephone-Number (13)
area-codeTelephone-Number (43)
exchangeTelephone-Number (64) number
22Figure 9.7 Reference Modification
01 INCOMING-RECORD. . . .
05 TELEPHONE-NUMBER PIC X(10). . .
. 01 EDITED-PHONE-NUMBER. 05
FILLER PIC X VALUE (. 05
AREA-CODE PIC X(3). 05 FILLER PIC X
VALUE ). 05 EXCHANGE PIC X(3). 05
FILLER PIC X VALUE -. 05
DIGITS PIC X(4). . . .
MOVE TELEPHONE-NUMBER (13) TO AREA-CODE.
MOVE TELEPHONE-NUMBER (43) TO EXCHANGE.
MOVE TELEPHONE-NUMBER (74) TO DIGITS.
23Figure 9.8 The ACCEPT Statement
01 DAY-CODE-VALUE PIC 9. 01 TODAYS-DATE.
05 TODAYS-YEAR PIC 99. 05 TODAYS-MONTH
PIC 99. 05 TODAYS-DAY PIC 99. 01
HDG-LINE. 05 HDG-DAY-OF-WEEK PIC X(9).
05 FILLER PIC XX VALUE , . 05
HDG-DATE PIC X(8). (a) Working-Storage Entries
ACCEPT DAY-CODE-VALUE FROM DAY-OF-WEEK.EVALUATE
DAY-CODE-VALUE WHEN 1 MOVE Monday
TO HDG-DAY-OF-WEEK WHEN 2 MOVE
Tuesday TO HDG-DAY-OF-WEEK WHEN 3 MOVE
Wednesday TO HDG-DAY-OF-WEEK WHEN 4 MOVE
Thursday TO HDG-DAY-OF-WEEK WHEN 5
MOVE Friday TO HDG-DAY-OF-WEEK
WHEN 6 MOVE Saturday TO HDG-DAY-OF-WEEK
WHEN 7 MOVE Sunday TO
HDG-DAY-OF-WEEKEND-EVALUATE. (b) DAY-OF-WEEK
Clause
ACCEPT TODAYS-DATE FROM DATE.STRING
TODAYS-MONTH / TODAYS-DATE / TODAYS-YEAR
DELIMITED BY SIZE INTO HDG-DATEEND-STRING.
(c) DATE Clause
24Qualification
- Allows programmer to use the same data name more
than once in the data division - Must specify which data item you are referring to
by using OF group-name - May be required by organization
- More professional approach
- Allows use of MOVE CORESSPONDING
25Figure 9.9 Duplicate Data Names
01 STUDENT-RECORD. 05 STUDENT-NAME PIC
X(20). 05 SOCIAL-SECURITY-NUM PIC 9(9).
05 STUDENT-ADDRESS. 10 STREET PIC
X(15). 10 CITY-STATE PIC X(15).
05 ZIP-CODE PIC X(5). 05 CREDITS PIC
9(3). 05 MAJOR PIC X(10). 05
FILLER PIC X(3). . . . 01
PRINT-LINE. 05 STUDENT-NAME PIC X(20).
05 FILLER PIC XX. 05 CREDITS PIC
9(3). 05 FILLER PIC XX. 05
TUITION PIC ,9.99. 05 FILLER PIC XX.
05 STUDENT-ADDRESS. 10
STREET PIC X(15). 10 CITY-STATE PIC
X(15). 10 ZIP-CODE PIC X(5). 05
FILLER PIC XX. 05 SOCIAL-SECURITY-NUM PIC
999B99B9999. 05 FILLER PIC X(47). (a)
Duplicate Data Names
26Figure 9.9 Duplicate Data Names
MOVE CORRESPONDING STUDENT-RECORD TO
PRINT-LINE (b) MOVE CORRESPONDING Statement
MOVE STUDENT-NAME OF STUDENT-RECORD
TO STUDENT-NAME
OF PRINT-LINE. MOVE SOCIAL-SECURITY-NUM OF
STUDENT-RECORD
TO SOCIAL-SECURITY-NUM OF PRINT-LINE. MOVE
STREET OF STUDENT-RECORD
TO STREET OF
PRINT-LINE. MOVE CITY-STATE OF STUDENT-RECORD
TO
CITY-STATE OF PRINT-LINE. MOVE CREDITS OF
STUDENT-RECORD
TO CREDITS OF PRINT-LINE. (c)
Equivalent MOVE Statements
27Page Overflow
- A printed page 8.5 x 11 will only hold 66 lines
at 6 linesper inch - Most often we leave 1/2 inch border top and
bottom --- leaving room for 60 lines on a page - When page is full programmer must start a new
page with headings etc. - Program must count lines printed including blank
lines - Must test the number of lines printed before
printing - Remember to RESET the line counter after printing
headers
28EXAMPLE
Working-Storage. 01 Line-Ctr Pic 99 Value
75. Procedure Division. 100-Start-Program. 350-Pri
nt-Detail-Lines. IF Line-Ctr 55 then
PERFORM 400-Heading-Routine END-IF WR
ITE Print-Line FROM Detail-Line AFTER ADVANCING 2
LINES ADD 2 to Line-Ctr 400-Heading-Routine. WRI
TE Print-Line FROM Heading-One AFTER ADVANCING
PAGE WRITE Print-Line FROM Heading-One AFTER
ADVANCING 2 LINES MOVE SPACES TO
Print-Line WRITE Print-Line AFTER ADVANCING 1
LINE MOVE 4 TO Line-Ctr.