文字列と数値列の比較
文字列( C 型)と数値の文字列( N 型)を比較するときは、論理式で次の演算子を使用することができます。
< 演算子 > | 意味 |
CO | すべて含まれる |
CN | 以外も含まれる |
CA | 少なくとも1文字 |
NA | 含まれない |
CS | 文字列が含まれる |
NS | 文字列が含まれない |
CP | パターンが含まれる |
NP | パターンが含まれない |
比較に、上記のいずれかの演算子が含まれている場合は、オペランドのデータ型は N または C でなければなりません。なぜならば、タイプ N からタイプ C への変換以外のデータ型変換は行われないからです。
演算子の機能は次のとおりです。
CO (すべて含まれる)
論理式
<f1> CO <f2>
は、 <f1> の文字すべてが <f2> に含まれているときに真となります。比較は大文字と小文字を区別します。右側の空白は無視されません。真であれば、 <f1> の長さが SY-FDPOS から返されます。偽であれば、 <f1> の文字のうち、 <f2> に含まれていない最初の文字のオフセットが SY-FDPOS から返されます。
CN (以外も含まれる)
論理式
<f1> CN <f2>
が真であるのは、 <f2> に属さない文字が <f1> に含まれている場合です。比較は大文字と小文字を区別します。右側の空白は無視されません。比較が真である場合は、システム項目の SY-FDPOS には、 <f2> には含まれない文字で、最初に <f1> 内に現れた文字のオフセットが入ります。偽の場合には、 SY-FDPOS には <f1> の長さが入ります。
CA (少なくとも1文字)
論理式
<f1> CA <f2>
が真であるのは、 <f2> にある文字が少なくとも1個 <f1> に含まれる場合です。比較は大文字と小文字を区別します。比較が真であれば、 <f2> にも含まれる <f1> の最初の文字がシステム項目 SY-FDPOS に格納されます。偽の場合には、 SY-FDPOS には <f1> の長さが入ります。
NA (含まれない)
論理式
<f1> NA <f2>
は、 <f2> に含まれる文字が <f1> に1つも含まれないと真になります。比較は大文字と小文字を区別します。真であれば、 <f1> の長さが SY-FDPOS から返されます。偽であれば、 <f1> の文字のうち <f2> にも含まれている最初の文字のオフセットが返されます。
CS (文字列が含まれる)
論理式
<f1> CS <f2>
が真であるのは、 <f1> が文字列 <f2> を含む場合です。後続のスペースは無視され、比較では大文字 / 小文字は区別 されません。比較の結果が真である場合は、システム項目の SY-FDPOS には <f1> 内の <f2> のオフセットが入ります。偽の場合には、SY-FDPOS には <f1> の長さが入ります。
NS (文字列が含まれない)
論理式
<f1> NS <f2>
は、文字列 <f2> が <f1> に含まれていなければ真になります。後続のスペースは無視され、比較では大文字 / 小文字は区別 されません。真であれば、 <f1> の長さが SY-FDPOS から返されます。偽の場合は、 SY-FDPOS には <f1> 内の <f2> のオフセットが入ります。
CP (パターンが含まれる)
論理式
<f1> CP <f2>
は、パターン <f2> が <f1> に含まれていると真になります。 <f2> が C 型のときは、 <f2> の中で次のワイルドカードを使用することができます。
- * 任意の文字列を表します
- + 任意の1文字を表します
後続のスペースは無視され、比較では大文字 / 小文字は区別 されません。比較の結果が真である場合は、システム項目の SY-FDPOS には <f1> 内の <f2> のオフセットが入ります。偽の場合には、 SY-FDPOS には <f1> の長さが入ります。
<f2> 内の文字を特定して比較を行う場合は、その文字の前にエスケープ文字である # を入れてください。また、エスケープ文字を使うことで次の文字を指定できます。
- 大文字と小文字
- ワイルドカード文字 ” * ” (#*) #* を入力してください)
- ワイルドカード文字 ” + ” (#+) # + を入力してください)
- エスケープ記号 (##) ## と入力)
- 文字列の最後の空白 (#___) #___ を入力してください)
NP (パターンが含まれない)
論理式
<f1> NP <f2> が真であるのは、 <f1> がパターン <f2> を含まない場合です。 <f2> では、演算子 CP の場合と同じワイルドカードおよびエスケープ文字を使用することができます。
後続のスペースは無視され、比較では大文字 / 小文字は区別 されません。真であれば、 <f1> の長さが SY-FDPOS から返されます。偽の場合は、 SY-FDPOS には <f1> 内の <f2> のオフセットが入ります。
DATA: F1(5) TYPE C VALUE <f1>,
F2(5) TYPE C VALUE <f2>.
IF F1 < 演算子 > F2.
WRITE: / 'Comparison true, SY-FDPOS=', SY-FDPOS.
ELSE.
WRITE: / 'Comparison false, SY-FDPOS=', SY-FDPOS.
ENDIF.
以下のテーブルに、使用する演算子と F1/F2 項目別にこのプログラムを実行した結果を示します。
<f1> | < 演算子 > | <f2> | 結果 | SY-FDPOS |
'BD ' | CO | 'ABCD ' | 真 | 5 |
'BD ' | CO | 'ABCDE' | 偽 | 2 |
'ABC12' | CN | 'ABCD ' | 真 | 3 |
'ABABC' | CN | 'ABCD ' | 偽 | 5 |
'ABcde' | CA | 'Bd ' | 真 | 1 |
'ABcde' | CA | 'bD ' | 偽 | 5 |
'ABAB ' | NA | 'AB ' | 偽 | 0 |
'ababa' | NA | 'AB ' | 真 | 5 |
'ABcde' | CS | 'bC ' | 真 | 1 |
'ABcde' | CS | 'ce ' | 偽 | 5 |
'ABcde' | NS | 'bC ' | 偽 | 1 |
'ABcde' | NS | 'ce ' | 真 | 5 |
'ABcde' | CP | '*b*' | 真 | 1 |
'ABcde' | CP | '*#b*' | 偽 | 5 |
'ABcde' | NP | '*b*' | 偽 | 1 |
'ABcde' | NP | '*#b*' | 真 | 5 |