Parsing
Rexx最强大的功能之一是它能够解析文本值。 您可能不会在任何其他编程语言中看到这一点。
解析语句的一般格式如下 -
语法 (Syntax)
PARSE {UPPER|LOWER|CASELESS} source {template}
Where,
UPPER - 在解析之前将源转换为大写。
LOWER - 在解析之前将源转换为小写。
CASELESS - 传递此参数时,将忽略大小写。
source - 这是需要解析的源。 有很多选择,可以是以下任何一种 -
ARG - 程序或过程的参数可用作源。
LINEIN - 下一行输入可用作源。
SOURCE - 程序的源信息可用作源。
VAR name - 变量名称的值可用作源。
template - 此参数指定如何解析源。 有很多选择。 其中一些在下面提到。
variable name - 这是分配给变量的值。
literal string - 一个文字字符串,可用于分割串行的模式。
# - 源本身内的绝对字符位置。 因此,如果指定值5,将使用第 5 个字符。
+# - 源本身内的相对字符位置。 因此,如果指定值5,则将相对使用第 5 个字符。
让我们看一个如何在Rexx中完成解析的简单示例。
例子 (Example)
/* Main program */
parse value 'This is a Tutorial' with word1 word2 word3 word4
say "'"word1"'"
say "'"word2"'"
say "'"word3"'"
say "'"word4"'"
上述程序解析短语中的单词。 当值由仅由一个空格分隔的单词组成,并且没有前导或尾随空格时,该值很容易解析为已知数量的单词,如下所示。
在Rexx中使用解析函数获取字符串值,然后将其分解为单词。 在上面的例子中,然后将这些单词拆分,然后存储在单词变量中。
上述方案的产出如下 -
'This'
'is'
'a'
'Tutorial'
解析的另一个示例显示在以下程序中。 这次我们使用while子句来进行解析。
例子 (Example)
/* Main program */
phrase = 'This is a Tutorial'
do while phrase <> ''
parse var phrase word phrase
say "'"word"'"
end
以上程序将给出以下输出 -
'This'
'is'
'a'
'Tutorial'
定位解析
Rexx还允许使用位置解析。 让我们看一个如何使用parse语句实现位置解析的示例。
例子 (Example)
/* 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
从上面的例子中,您可以注意到,除了变量名,我们还指定了字符串应该结束的位置。 所以对于name1,我们应该以第11个字符结束,然后开始解析name2。
上述计划的输出如下 -
Doe
John M.
03/03/78
Mumbai
India
在这种情况下,您还可以使用relative positional parsing 。
例子 (Example)
/* 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
上述程序的输出如下所示。
Doe
John M.
03/03/78
Mumbai
India