You are on page 1of 54

11-1

Structured COBOL Programming


Nancy Stern
Hofstra University
Robert A. Stern
Nassau Community College
James P. Ley
University of Wisconsin-Stout
John Wiley & Sons, Inc.
PowerPoint Winifred J. Rex
Presentation Bowling Green State University
10th edition
11-2
Data Validation
Chapter 11
11-3
Chapter Objectives
To familiarize you with
Types of input errors that may occur
Techniques used to validate input data
Actions that can be taken when input
errors are detected
11-4
Chapter Contents
Avoiding Logic Errors by Validating
Input
What to Do If Input Errors Occur
Global Considerations in COBOL
When Data Should Be Validated
Understanding Program Interrupts
Other Methods for Improving Program
Performance
11-5
Program Errors - Syntax
Due to violations of language rules
Detected by compiler
11-6
Program Errors - Logic
Result from using incorrect instructions
or incorrect sequence of instructions
Also include run-time errors
Not detected during compilation
Found by running program with test
data and comparing outcome to
expected results
11-7
Avoiding Logic Errors
Develop comprehensive test data
Include all condition and types of data
tested for in program
Have someone other than programmer
prepare test data to avoid bias
Manually check computer-produced
results for accuracy
11-8
Debugging Tips
For every IF statement, include test
data that satisfies and does not satisfy
condition
For multi-page report include enough
test data to print several pages
Include test data that produces size
errors if ON SIZE ERROR routines are
used
11-9
Debugging Tips
Used DISPLAY statements during test
runs to isolate logic errors
If program produces disk file, always
examine it for accuracy
Check loops to see that instructions
performed exact number of times
required
11-10
Why Input Must Be Validated
Risk of data entry errors is high
Large volume of data entered
Human error keying in data
Invalid input leads to inaccurate output
For example, salary reported incorrectly if
entered as 23000 instead of 32000
Input error can cause program interrupt
For example, spaces entered for numeric
field used in arithmetic operation
11-11
Data Validation Techniques
Routines to identify various types of
input errors
Error modules to handle each error that
occurs
11-12
Test Fields for Correct Format
Use NUMERIC class test to ensure field
used in arithmetic operation has
numeric value

If Amt-In Is Not Numeric
Perform 500-Err-Rtn
Else
Add Amt-In To WS-Total
End-If
Example
11-13
Test Fields for Correct Format
Use ALPHABETIC class test if field
must be alphabetic
Use sign test if numeric field is to have
Values greater than zero (POSITIVE)
Values less than zero (NEGATIVE)
Value equal to zero (ZERO)
S must be included in PIC to store a negative
number
NOT POSITIVE is not same as NEGATIVE
11-14
Checking for missing data
Check key fields if they must contain
data


If Soc-Sec-No = Spaces
Perform 900-Err-Rtn
End-If
Example
11-15
INSPECT Statement
Useful for validity checking as well as
other purposes
Two main functions
To count number of occurrences of given
character in field
To replace specific occurrences of given
character with another character
11-16
INSPECT TALLYING
To count number of times a given
character occurs

INSPECT identifier-1 TALLYING
identifier-2 FOR ALL identifier-3
LEADING literal-1 ...
CHARACTERS

Format
11-17
INSPECT TALLYING
identifier-1
Field to be "inspected"
identifier-2
Field where count stored
Not automatically set to zero by INSPECT
identifier-3 or literal-1
Character to be counted
ZERO, SPACE, 8, 'S' are valid entries for
literal-1
11-18
Options with FOR Clause
ALL - every occurrence of specified
character in field counted
LEADING - all occurrences of specified
character preceding any other character
tallied
CHARACTERS - all characters within
field tallied
Used to determine size of field
11-19
INSPECT TALLYING

Move Zeros To Ct1, Ct2, Ct3
Inspect X1 Tallying Ct1 For All Spaces
Inspect X2 Tallying Ct2 For Characters
Inspect X3 Tallying Ct3 For Leading Zeros

Fields Results
X1 = bb82b Ct1 = 3
X2 = AB32C Ct2 = 5
X3 = 00060 Ct3 = 3
Examples
11-20
BEFORE/AFTER Clause
Optional clause after FOR options to
count only characters before or after
some initial value


BEFORE INITIAL identifier-4
AFTER literal-2
Format
11-21
BEFORE/AFTER Clause

Move Zeros To Ct4, Ct5
Inspect X4 Tallying Ct4 For All Zeros Before
Initial 9
Inspect X5 Tallying Ct5 For Characters After
Initial 6
Items Results
X4 = 05090 Ct4 = 2
X5 = 06762 Ct5 = 3
Examples
11-22
INSPECT REPLACING
To replace specified occurrences of a
given character with another

INSPECT identifier-1 REPLACING
CHARACTERS
ALL identifier-2 BY identifier-3
LEADING literal-1 literal-2 ...
FIRST
Format
11-23
INSPECT REPLACING
Literals must be single characters or
figurative constants consistent with type
of field being inspected
ALL, LEADING, CHARACTERS have
same meaning as previously noted
FIRST means first occurrence of literal-
1 will be replaced by literal-2
BEFORE/AFTER clause can be used
11-24
INSPECT REPLACING

Inspect Date-In Replacing All '-' By '/'
Inspect SSNo Replacing All Spaces By '-'

Field Before After
Date-In 10-17-02 10/17/02
SSNo 123 45 6789 123-45-6789
Examples
11-25
INSPECT REPLACING

Inspect X1 Replacing Leading 'A' By 'Z'
Inspect X2 Replacing First 'R' By 'Q'

Field Before After
X1 AAABBA ZZZBBA
X2 RRSST QRSST
Examples
11-26
Testing for Reasonableness
Use after verifying that numeric fields
contain numeric data
Range test - check that field is within
established lower and upper bounds
Limit test - check that field does not
exceed defined upper limit
11-27
Checking Coded Fields
Code often stored in field to shorten
record and minimize typing
For example, 'H' or 'S' may represent
pay type of 'Hourly' or 'Salaried'
Use condition names to check validity of
coded fields
11-28
Checking Coded Fields

05 Pay-Code Pic X.
88 Hourly Value 'H'.
88 Salaried Value 'S'.

If Hourly Or Salaried Then
Perform Pay-Calc-Rtn
Else
Perform Pay-Code-Err-Rtn
End-If
Example
Data Division
entries
Procedure
Division
statements
11-29
Typical Validity Checks
Class test - determine if field contains
appropriate type of data (NUMERIC,
ALPHABETIC)
Determine if data is missing by
comparing field to SPACES
Replace spaces in numeric fields with
ZEROS using INSPECT statement
11-30
Typical Validity Checks
Range test - determine if field in
established range
Limit test - determine if field exceeds
established limit
Determine if field contains valid codes
or values using condition-names to
document and test fields
11-31
EVALUATE Statement
Perform class tests first to ensure field
is proper type
Use EVALUATE for further validation
tests
Three common forms
11-32
1) EVALUATE identifier
EVALUATE identifier
WHEN value(s) PERFORM


Evaluate Pay-Code
When 'H' Perform 300-Hourly-Rtn
When 'S' Perform 400-Salaried-Rtn
End-Evaluate
Example
11-33
1) EVALUATE identifier
May also use THRU clause to check
range of values

Evaluate Age
When 0 Thru 19
Perform 400-Minor-Rtn
When 20 Thru 99
Perform 500-Adult-Rtn
End-Evaluate
Example
11-34
2) EVALUATE TRUE
EVALUATE TRUE
WHEN condition PERFORM


Evaluate True
When Age >= 0 And <= 19
Perform 400-Minor-Rtn
When Age >= 20 And <= 99
Perform 500-Adult-Rtn
End-Evaluate
Example
11-35
2) EVALUATE TRUE
Can also use with condition-names

Assume these condition names defined
for Age field

05 Age Pic 99.
88 Minor Values 0 Thru 19.
88 Adult Values 20 Thru 99.
Example
11-36
2) EVALUATE TRUE
Evaluate True
When Minor
Perform 400-Minor-Rtn
When Adult
Perform 500-Adult-Rtn
End-Evaluate
11-37
2) EVALUATE TRUE
Note that using Age in place of True in
this statement causes syntax error
Must compare numeric field Age to
another numeric field or numeric literal
Compare TRUE to a condition or
condition-name with value of TRUE or
FALSE
11-38
3) EVALUATE condition
EVALUATE condition
WHEN TRUE PERFORM
WHEN FALSE PERFORM

Evaluate Age <= 19
When True Perform 400-Minor-Rtn
When False Perform 500-Adult-Rtn
End-Evaluate
Example
11-39
Actions If Input Errors Occur
1. Print error record displaying key field,
field in error and error message
2. Stop the run to preserve data integrity
3. Partially process or bypass erroneous
records
4. Stop the run if number of errors
exceeds predetermined limit
11-40
Actions If Input Errors Occur
5. Use switch or field to indicate when
record contains error
Initialize field to 'N' for no errors
Set field to 'Y' anytime an error occurs
Process record as valid only if switch field
still 'N' after all validation checks
11-41
Actions If Input Errors Occur
6. Print count totals and compare to
manual counts
Print count of all records processed
Print count of all errors encountered
Print batch totals or count of all records
within specific groups or batches
11-42
Global Considerations
Meaning of comma and decimal point in
numbers in United States is reversed in
some other nations
4,123.45 in United States represented
as 4.123,45 in other nations
To change representation of numbers in
COBOL use SPECIAL-NAMES
paragraph
11-43
SPECIAL-NAMES paragraph
Environment Division.
Configuration Section.
Special-Names.
Decimal-Point is Comma.

Number 4123,45 stored in field with PIC
9999V99
When moved to report-item with PIC
9.999,99 is displayed as 4.123,45
11-44
COBOL 2002+ Changes
Restrictions on INSPECT statement
limiting AFTER/BEFORE items to one-
character literals or fields in
REPLACING clause will be eleiminated
VALIDATE statement introduced to
check format of data field
11-45
Program Interrupts
Termination of program caused by logic
error
List of common program interrupts and
their causes follows
11-46
Common Program Interrupts
Data Exception
Performing one of these operations on field
containing blanks or other nonnumeric
characters
Arithmetic operation
Comparison
Failing to initialize subscript or index
11-47
Common Program Interrupts
Divide Exception
Attempting to divide by zero
Addressing Error
Referring to array or table entry with value
in subscript or index that exceeds number
of entries in table
Improperly coding nested PERFORMs or
exiting from paragraph being performed
11-48
Common Program Interrupts
Operation Error
Attempting to access file with READ or
WRITE before opening it or after closing it
Specification Error
Attempting to access input area after AT
END condition
11-49
Common Program Interrupts
Illegal Character in Numeric Field
May be caused by type mismatch between
actual data and PIC clause
Field size specified in PIC clause may not
match actual size of field in record, leading
to invalid (nonnumeric) characters from
another field being treated as part of
numeric field
11-50
Chapter Summary
Two types of program errors
Syntax errors
Logic errors
Error control procedures can minimize
errors but not eliminate them entirely

11-51
Chapter Summary
Types of error control procedures
Range tests
Limit tests
Format tests
Tests for missing data
Sequence checks
11-52
Chapter Summary
Other methods to validate data
INSPECT statement
Condition-names
EVALUATE verb
Verifying input data
11-53
Chapter Summary
Handling input errors
Stop the run
Fill erroneous fields with spaces or zeros
Stop the run if number of errors excessive
Print control listings or audit trails to be
checked
11-54
Copyright 2003 John Wiley & Sons, Inc. All rights reserved.
Reproduction or translation of this work beyond that permitted in Section
117 of the 1976 United States Copyright Act without the express written
permission of the copyright owner is unlawful. Request for further
information should be addressed to the Permissions Department, John
Wiley & Sons, Inc. The purchaser may make back-up copies for his/her
own use only and not for distribution or resale. The Publisher assumes no
responsibility for errors, omissions, or damages, caused by the use of these
programs or from the use of the information contained herein.

You might also like