Rexx-parsing
提供:Dev Guides
Rexx-解析
Rexxの最も強力な機能の1つは、テキスト値を解析する機能です。 他のプログラミング言語ではおそらくこれを見ないでしょう。
解析文の一般的な形式は次のとおりです-
構文
PARSE {UPPER|LOWER|CASELESS} source {template}
どこ、
- UPPER -ソースは解析前に大文字に変換されます。
- LOWER -ソースは解析前に小文字に変換されます。
- CASELESS -このパラメーターが渡されると、大文字と小文字は無視されます。
- source -これは解析する必要があるソースです。 これのために利用可能な多くのオプションがあり、次のいずれかになることができます-
- ARG -プログラムまたはプロシージャの引数をソースとして使用できます。
- LINEIN -次の行入力をソースとして使用できます。
- SOURCE -プログラムのソース情報をソースとして使用できます。
- VAR name -変数名の値をソースとして使用できます。
- template -このパラメータは、ソースの解析方法を指定します。 これには多くのオプションがあります。 それらのいくつかを以下に示します。
- 変数名-これは変数に割り当てられた値です。
- リテラル文字列-ひもを分割するパターンを使用できるリテラル文字列。
- #-ソース自体内の絶対文字位置。 したがって、値5を指定すると、5 ^ th ^文字が使用されます。
- +#-ソース自体の中の相対的な文字位置。 したがって、5の値を指定すると、5 ^ th ^文字が比較的使用されます。
Rexxで構文解析を行う方法の簡単な例を見てみましょう。
例
/*Main program*/
parse value 'This is a Tutorial' with word1 word2 word3 word4
say "'"word1"'"
say "'"word2"'"
say "'"word3"'"
say "'"word4"'"
上記のプログラムは、フレーズ内の単語を解析します。 値が1つのスペースのみで区切られた単語で構成され、先頭または末尾のスペースがない場合、値は次のように既知の数の単語に簡単に解析されます。
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