Rexx - 解析


Rexx 最强大的功能之一是它解析文本值的能力。您可能不会在任何其他编程语言中看到这一点。

解析语句的一般格式如下 -

句法

PARSE {UPPER|LOWER|CASELESS} source {template} 

在哪里,

  • UPPER - 在解析之前将源转换为大写。

  • LOWER - 在解析之前将源转换为小写。

  • CASELESS - 当传递此参数时,大小写将被忽略。

  • source - 这是需要解析的源。有许多选项可用于此,可以是以下任意一种 -

    • ARG - 程序或过程的参数可以用作源。

    • LINEIN - 下一行输入可以用作源。

    • SOURCE - 程序的源信息可以用作源。

    • VAR name - 变量名称的值可以用作源。

  • template - 此参数指定如何解析源。为此有很多选项可用。下面提到了其中一些。

    • 变量名称- 这是分配给变量的值。

    • 文字字符串- 可以使用模式来分割字符串的文字字符串。

    • # - 源本身内的绝对字符位置。因此,如果您指定值 5,则将使用第 5个字符。

    • +# - 源本身内的相对字符位置。因此,如果指定值为 5,则将相对使用第 5个字符。

让我们看一个简单的示例,了解如何在 Rexx 中完成解析。

例子

/* 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 子句来进行解析。

例子

/* Main program */ 
phrase = 'This is a Tutorial' 

do while phrase <> '' 
   parse var phrase word phrase 
   say "'"word"'" 
   end 

上面的程序将给出以下输出 -

'This' 
'is' 
'a' 
'Tutorial' 

位置解析

Rexx 还允许进行位置解析。让我们看一个如何使用 parse 语句实现位置解析的示例。

例子

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

在这种情况下,您还可以使用相对位置解析

例子

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