One of the most powerful features of Rexx is its ability to parse text values. You probably will not see this in any other programming languages.
The general format of the parse statement is as follows −
PARSE {UPPER|LOWER|CASELESS} source {template}
Where,
UPPER − The source is converted to upper case before parsing.
LOWER − The source is converted to lower case before parsing.
CASELESS − When this parameter is passed, the casing is ignored.
source − This is the source which needs to be parsed. There are many options available for this and can be any one of the following −
ARG − The arguments for the program or procedure can be used as the source.
LINEIN − The next line input can be used as the source.
SOURCE − The source information of the program can be used as the source.
VAR name − The value of a variable name can be used as the source.
template − This parameter specifies how to parse the source. There are many options available for this. Some of them are mentioned below.
variable name − This is the value assigned to the variable.
literal string − A literal string which can be used a pattern to split the strung.
# − An absolute character position within the source itself. So if you specify a value of 5, the 5th character will be used.
+# − A relative character position within the source itself. So if you specify a value of 5, the 5th character will be used relatively.
Let’s look at a simple example of how parsing can be accomplished in Rexx.
/* Main program */ parse value 'This is a Tutorial' with word1 word2 word3 word4 say "'"word1"'" say "'"word2"'" say "'"word3"'" say "'"word4"'"
The above program parses the words in the phrase. When a value consists of words that are separated by only one space, and there are no leading or trailing spaces, the value is easy to parse into a known number of words as follows.
The parse function is used in Rexx to take a string value and then break them down into words. In the above example, the words are then split and then stored in the word variables.
The output of the above program would be as follows −
'This' 'is' 'a' 'Tutorial'
Another example of parsing is shown in the following program. This time we are using a while clause to do the parsing.
/* Main program */ phrase = 'This is a Tutorial' do while phrase <> '' parse var phrase word phrase say "'"word"'" end
The above program will give the following output −
'This' 'is' 'a' 'Tutorial'
Rexx also allows one to work with positional parsing. Let’s see an example of how we can achieve positional parsing with the parse statement.
/* Main program */ testString = "Doe John M. 03/03/78 Mumbai India"; parse var testString name1 11 name2 21 birthday 31 town 51 country say name1 say name2 say birthday say town say country
From the above example, you can note that along with the variable name, we are also specifying where the string should end. So for name1, we should end by the 11th character and then starting parsing name2.
The output of the above program will be as follows −
Doe John M. 03/03/78 Mumbai India
You can also use relative positional parsing in this case.
/* Main program */ testString = "Doe John M. 03/03/78 Mumbai India"; parse var testString name1 +10 name2 +10 birthday +10 town +20 country say name1 say name2 say birthday say town say country
The output of the above program will be as shown below.
Doe John M. 03/03/78 Mumbai India