HP OpenVMS Systems Documentation |
HP COBOL
|
Previous | Contents | Index |
An INSPECT statement that contains a TALLYING phrase counts the
occurrences of various character strings under certain stated
conditions. It keeps the count in a user-designated item called a tally
counter.
5.3.5.1 The Tally Counter
The identifier following the word TALLYING designates the tally counter. The identifier can be subscripted or indexed. The data item must be a numeric integer without any editing or P characters; it can be COMP or DISPLAY usage, and it can be signed (separate or overpunched).
Each time the tally argument matches the delimited string being inspected, the compiler adds 1 to the tally counter.
You can initialize the tally counter to any numeric value. The INSPECT
statement does not initialize it.
5.3.5.2 The Tally Argument
The tally argument specifies a character-string (or strings) and a condition under which that string should be compared to the delimited string being inspected.
The CHARACTERS form of the tally argument specifies that every character in the delimited string being inspected should be considered to match an imaginary character that serves as the tally argument. This increments the tally counter by a value that equals the size of the delimited string. For example, the following statement causes TLY to be incremented by the number of characters that precede the first comma, regardless of what those characters are:
INSPECT FIELD1 TALLYING TLY FOR CHARACTERS BEFORE ",". |
The ALL and LEADING forms of the tally argument specify a particular character-string (or strings), which can be represented by either a literal or an identifier. The tally argument character-string can be any length; however, each character of the argument must match a character in the delimited string before the compiler considers the argument matched.
The words ALL and LEADING supply conditions that further delimit the inspection operation:
Argument and Delimiter | FIELD1 Value | Contents of TLY After Scan |
---|---|---|
F***0**F | 2 | |
F**0F** | 0 | |
LEADING "*" AFTER "0". | F**F**0 | 0 |
0***F** | 3 | |
F**0**F*** | 1 | |
F**F0***FF | 1 | |
LEADING "**" AFTER "0". | F**F0****F** | 2 |
F**F**0* | 0 |
One INSPECT...TALLYING statement can contain more than one tally argument, and each argument can have a separate BEFORE/AFTER phrase and tally counter associated with it. These tally arguments with their associated tally counters and BEFORE/AFTER phrases form an argument list. The manner in which this list is processed affects the action of any given tally argument.
The following examples show INSPECT statements with argument lists. The text with each example explains how that list is processed.
INSPECT FIELD1 TALLYING T FOR ALL "," ALL "." ALL ";". |
These three tally arguments have the same tally counter, T, and are active over the entire item being inspected. Thus, the preceding statement adds the total number of commas, periods, and semicolons in FIELD1 to the initial value of T. Because the TALLYING phrase supports multiple arguments and only one counter is used, the previous statement could have been written as follows:
INSPECT FIELD1 TALLYING T FOR ALL "," "." ";". |
INSPECT FIELD1 TALLYING T1 FOR ALL "," T2 FOR ALL "." T3 FOR ALL ";". |
Each tally argument in this statement has its own tally counter and is active over the entire item being inspected. Thus, the preceding statement adds the total number of commas in FIELD1 to the initial value of T1, the total number of periods to the initial value of T2, and the number of semicolons to T3.
INSPECT FIELD1 TALLYING T1 FOR ALL "," AFTER "A" T2 FOR ALL "." BEFORE "B" T3 FOR ALL ";". |
Each tally argument in the preceding statement has its own tally counter; the first two arguments have delimiter phrases, and the last one is active over the entire item being inspected. Thus, the first argument is initially inactive and becomes active only after the scanner encounters an A; the second argument begins the scan in the active state but becomes inactive after a B has been encountered; and the third argument is active during the entire scan of FIELD1.
Table 5-13 shows various values of FIELD1 and the contents of the three tally counters after the scan of the previous statements. Assume that the counters are initialized to 0 before the INSPECT statement.
Contents of Tally Counters After Scan | |||
---|---|---|---|
FIELD1 Value |
T1 | T2 | T3 |
A.C;D.E,F | 1 | 2 | 1 |
A.B.C.D | 0 | 1 | 0 |
A,B,C,D | 3 | 0 | 0 |
A;B;C;D | 0 | 0 | 3 |
*,B,C,D | 0 | 0 | 0 |
The BEFORE/AFTER phrase applies only to the argument that precedes it and delimits the item for that argument only. Each BEFORE/AFTER phrase causes a separate scan of the item to determine the limits of the item for its corresponding argument.
Previous | Next | Contents | Index |