PARSE
>>-PARSE--+-------+--+-ARG-----------------------+--------------> '-UPPER-' +-EXTERNAL------------------+ +-NUMERIC-------------------+ +-PULL----------------------+ +-SOURCE--------------------+ +-VALUE-+------------+-WITH-+ | '-expression-' | +-VAR--name-----------------+ '-VERSION-------------------' >--+---------------+--;---------------------------------------->< '-template_list-'
PARSE assigns data (from various sources) to one or more variables according to the rules of parsing (see Parsing).
The template_list is often a single template but may be several templates separated by commas. If specified, each template is a list of symbols separated by blanks or patterns or both.
Each template is applied to a single source string. Specifying multiple templates is never a syntax error, but only the PARSE ARG variant can supply more than one non-null source string. See Parsing multiple strings for information about parsing multiple source strings.
If you do not specify a template, no variables are set but action is taken to prepare the data for parsing, if necessary. Thus for PARSE PULL, a data string is removed from the queue, and for PARSE VALUE, expression is evaluated. For PARSE VAR, the specified variable is accessed. If it does not have a value, the NOVALUE condition is raised, if it is enabled.
If you specify the UPPER option, the data to be parsed is first translated to uppercase (that is, lowercase a–z to uppercase A–Z). Otherwise, no uppercase translation takes place during the parsing.
The following list describes the data for each variant of the PARSE instruction.
- PARSE ARG
- parses the string or strings
passed to a program or internal routine as input arguments. See ARG for details and examples of the ARG instruction.
Tip: You can also retrieve or check the argument strings to a REXX program or internal routine with the ARG built-in function (see ARG (Argument)).
- PARSE EXTERNAL
- In TSO/E,
PARSE EXTERNAL reads from the:
- Terminal (TSO/E foreground)
- Input stream, which is SYSTSIN (TSO/E background).
In non-TSO/E address spaces, PARSE EXTERNAL reads from the input stream as defined by the file name in the INDD field in the module name table (see Module name table). The system default is SYSTSIN. PARSE EXTERNAL returns a field based on the record that is read from the INDD file. If SYSTSIN has no data, the PARSE EXTERNAL instruction returns a null string.
- PARSE NUMERIC
- The current
numeric controls (as set by the NUMERIC instruction) are available
(see NUMERIC). These controls are in the
order DIGITS FUZZ FORM. Example:
Parse Numeric Var1After this instruction, Var1 would be equal to: 9 0 SCIENTIFIC. See NUMERIC and the built-in functions DIGITS, FORM, and FUZZ.
- PARSE PULL
- parses the
next string from the external data queue. If the external data queue
is empty, PARSE PULL reads a line from the default input stream (the
user's terminal), and the program pauses, if necessary, until a line
is complete. You can add data to the head or tail of the queue by
using the PUSH and QUEUE instructions, respectively. You can find
the number of lines currently in the queue with the QUEUED built-in
function. (See QUEUED.) Other programs
in the system can alter the queue and use it as a means of communication
with programs written in REXX. See also
PULL for the PULL instruction. PULL and PARSE PULL read from the data stack. In TSO/E, if the data stack is empty, PULL and PARSE PULL read from the:
- Terminal (TSO/E foreground)
- Input stream, which is SYSTSIN (TSO/E background).
In non-TSO/E address spaces, if the data stack is empty, PULL and PARSE PULL read from the input stream as defined by the file name in the INDD field in the module name table (see Module name table). The system default is SYSTSIN. If SYSTSIN has no data, the PULL and PARSE PULL instructions return a null string.
- PARSE SOURCE
- parses data
describing the source of the program running. The language processor
returns a string that is fixed (does not change) while the program
is running.
The source string contains the following tokens:
- The characters TSO
- The string COMMAND, FUNCTION, or SUBROUTINE depending on whether the program was called as some kind of host command (for example, as an exec from TSO/E READY mode), or from a function call in an expression, or using the CALL instruction.
- Usually, name of the exec in uppercase. If the name is not known, this token is a question mark (?). If the name is an extended execname, this field is the full name, possibly greater than 8-characters and not converted to uppercase. If the execname contains any blank characters (which is possible in an execname of file system), the blank characters are replaced by null characters (X'00') within this token. See Format of the exec block and Format of the in-storage control block for more information about how the exec load routine can load an extended execname.
- Name of the DD from which the exec was loaded. If the name is not known, this token is a question mark (?).
- Name of the data set from which the exec was loaded. If the name is not known, this token is a question mark (?). If the name contains any blank characters (which is possible in a dsname of file system), the blank characters are replaced by null characters (X'00') within this token.
- Name of the exec as it was called, that is, the name is not folded
to uppercase. If the name is not known, this token is a question
mark (?).
If the name returned in token3 is an extended name, this token is a question mark (?).
- Initial (default) host command environment in uppercase. For example, this token may be TSO or MVS™.
- Name of the address space in uppercase. For example, the value
may be MVS (non-TSO/E) or TSO/E
or ISPF. If the exec was called from ISPF, the address space name
is ISPF.
The value is taken from the parameter block (see Characteristics of a Language Processor Environment). Note that the initialization exit routines may change the name specified in the parameters module. If the name of the address space is not known, this token is a question mark (?).
- Eight character user token. This is the token that is specified in the PARSETOK field in the parameters module (see Characteristics of a Language Processor Environment).
For example, the string parsed might look like one of the following:TSO COMMAND PROGA SYSXR07 EGGERS.ECE.EXEC ? TSO TSO/E ? TSO SUBROUTINE PROGSUB SYSEXEC ? ? TSO ISPF ? TSO SUBROUTINE /u/cmddir/pgm.cmd PATH /u/cmddir/pgm.cmd ? SH OMVS OpenMVS - PARSE VALUE
- parses the data that is the result of evaluating expression.
If you specify no expression, then the null
string is used. Note that WITH is a subkeyword in this context and
cannot be used as a symbol within expression.
Thus, for example:
gets the current time and splits it into its constituent parts.PARSE VALUE time() WITH hours ':' mins ':' secs - PARSE VAR name
- parses the value of the variable name.
The name must be a symbol that is valid
as a variable name (that is, it cannot start with a period or a digit).
Note that the variable name is not changed
unless it appears in the template, so that for example:
removes the first word from string, puts it in the variable word1, and assigns the remainder back to string. SimilarlyPARSE VAR string word1 string
in addition translates the data from string to uppercase before it is parsed.PARSE UPPER VAR string word1 string - PARSE VERSION
- parses information describing the language
level and the date of the language processor. This information consists
of five blank-delimited words:
- A word describing the language, which is the string “REXX370”
- The language level description, for example, “3.46”
- Three tokens describing the language processor release date, for example, “31 May 2001”.
