v 'R E'
v 'X'
v 'X'
The variable var1 receives 'R'; var2 receives 'E'. Both var3 and var4 receive 'X'(with a blank before
the X) because each is the only variable in its section of the template. (For details on treatment of blanks,
see page 204.)
Parsing with Variable Patterns
You may want to specify a pattern by using the value of a variable instead of a fixed string or number. You
do this by placing the name of the variable in parentheses. This is a variable reference. Blanks are not
necessary inside or outside the parentheses, but you can add them if you wish.
The template in the next parsing instruction contains the following literal string pattern '. '.
parse var name fn init '. ' ln
Here is how to specify that pattern as a variable string pattern:
strngptrn='. '
parse var name fn init (strngptrn) ln
If no equal, plus, or minus sign precedes the parenthesis that is before the variable name, the value of the
variable is then treated as a string pattern. The variable can be one that has been set earlier in the same
template.
Example:
/* Using a variable as a string pattern */
/* The variable (delim) is set in the same template */
SAY "Enter a date (mm/dd/yy format). =====> " /* assume 11/15/90 */
pull date
parse var date month 3 delim +1 day +2 (delim) year
/* Sets: month='11'; delim='/'; day='15'; year='90' */
If an equal, a plus, or a minus sign precedes the left parenthesis, then the value of the variable is treated
as an absolute or relative positional pattern. The value of the variable must be a positive whole number or
zero.
The variable can be one that has been set earlier in the same template. In the following example, the first
two fields specify the starting character positions of the last two fields.
Example:
/* Using a variable as a positional pattern */
dataline = '12 26 .....Samuel ClemensMark Twain'
parse var dataline pos1 pos2 6 =(pos1) realname =(pos2) pseudonym
/* Assigns: realname='Samuel Clemens'; pseudonym='Mark Twain' */
Why is the positional pattern 6 needed in the template? Remember that word parsing occurs after the
language processor divides the source string into substrings using patterns. Therefore, the positional
pattern =(pos1) cannot be correctly interpreted as =12 until after the language processor has split the
string at column 6 and assigned the blank-delimited words 12 and 26 to pos1 and pos2, respectively.
Using UPPER
Specifying UPPER on any of the PARSE instructions converts characters to uppercase (lowercase a–z to
uppercase A–Z) before parsing. The following table summarizes the effect of the parsing instructions on
case.
Parsing
Chapter 15. Parsing 209