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.
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.
/* 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.
/* 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.