TESTC

1. Syntax

1  TESTC ( name ,?  start , length , type ,
1! 'EQ"
1 operator
2?  + , value
2  , duplication
2?   VER
2  )

FASTREXX 条件式で使用できます。

注:
  1. 演算子 (operator) および非数値の値はすべて引用符で囲み、構文エラーにならないようにする必要があります。
  2. start、length、および type パラメーターはオプションで、変数の一部を検査する機能を提供します。第 2 オペランドは、演算子にできます。例を参照してください。
  3. レコード長を超える length の値を指定すると、「偽」の結果が返されます。
  4. 数値タイプ (タイプ B、P、Z) を指定した場合に、指定したフィールドに、そのタイプに無効なデータが含まれていると、関数は「偽」の結果を返します。数値データは常に整数形式で戻されます。すなわち、関数は数値データのスケールを実行しません。
name
1 文字から 256 文字の変数 ID。変数名の突き合わせでは、大/小文字が区別されません。名前が検出されない場合、長さが 1 で値が X'00' の変数が作成されます。
start
フィールド値の読み取りを開始する変数内の位置 (バイト単位)。以下のように指定できます。
絶対位置
正の整数である必要があります。start が入力レコードの現在の長さより大きければ、この関数は無効になります。
相対開始位置
IPx または INx、または Px または Nx、または OPx または ONx として指定できます。変数を検査するときは、現行変数位置が計算の基準になります。現行変数位置は、contains 型演算子を指定した TESTC 関数によって変更されます。結果の値がゼロ以下になる場合、関数は「偽」の結果を生成します。結果の値が変数の現在の長さより大きい場合、関数は「偽」の結果を生成します。
length
フィールドの長さ (バイト数)。
  • 2 進数フィールドの場合には、長さを指定する必要があります。これは 2、4、または 8 とすることができます。
  • 文字フィールドの場合には、長さを省略すると、次の長さにデフォルト設定されます。
    • contains 型演算子の場合、変数の残りの長さ。
    • すべての値が変数置換の場合は、変数の残りの長さ。
    • その他の場合は、最大リテラル値の長さを使用。
  • パック 10 進フィールドでは、長さを指定する場合には 1 から 16 の範囲内でなければなりません。長さを省略すると、関数は変数値からパック・フィールドの長さを決定して、そのフィールドだけを戻します。
  • ゾーン 10 進フィールドでは、長さを指定する場合には 1 から 31 の範囲内か、またはフィールドに分離符号文字が入っている場合には 1 から 32 の範囲内でなければなりません。長さを省略すると、関数は変数の残りを戻します。32 を超えた場合、関数は「偽」の結果を返します。
type
フィールドのデータ・タイプ。有効な値は、以下のとおりです。
B
2 進数。関数は 2 進数フィールドを符号付きと解釈します。
C
文字。これは、デフォルトです。
P
パック 10 進数。
U
フィールドを文字として解釈しますが、ストリングを戻す前に、これを大文字に変換します。
Z
ゾーン 10 進数。すべての COBOL 外部 10 進数変形を数値データとして解釈します。
オペレーター (operator)
デフォルトは EQ または = です。この機能では、動的テンプレートと基準編集で示した、すべての演算子をサポートしています。サポートする演算子の詳細と説明については、以下の節を参照してください。
入力する値は、参照されている演算子とフィールドでのコンテキストで有効な値である必要があります。例えば、複数の値を使用できる演算子は、CO (包含) など一部の演算子のみです。また、数値を入力するのは、数値フィールドを検査する場合です。
  • 16 進数ストリングの指定。16 進数ストリングは 'hhhhhh'x の形式でなければなりません。引用符で囲まれた値の文字数は偶数であり、使用される文字が有効な 16 進文字 (0–9、A–F) である必要があります。
  • バイナリー・ストリングの指定。バイナリー・ストリングは 'nnnnnn'b の形式でなければなりません。引用符で囲まれた値は「0」と「1」の組み合わせである必要があります。
  • 文字ストリングの指定。非数値タイプの場合は、値を引用符で囲む必要があります。
  • &variable_name の指定による変数の指定。一致する文字変数、数値変数、または TALLY 変数を見つけられる場合は、変数で値が代用されます。一致する変数を検出できなければ、ストリングはリテラル値として扱われます。数値比較が実行される場合、文字変数は数値に変換されます。変換に失敗すると、関数は「偽」の結果を返します。数値または TALLY 変数が文字比較で参照された場合、値は、表示画面形式に変換され、先行ゼロが除去された数値になります。
duplication
整数 n を指定することで、リテラル値を n 回複写します。
注: これは、単一値をサポートする演算子 (例えば、Not contains) に、その値がリテラル定数であり、置換変数でない場合にのみ使用できます。
VER
フィールドが、「値」列で指定されている文字だけで構成されていることを検証します。

例 1

TESTREC という変数に現在の入力レコードを設定します。変数を検査し、レコードに「Smith」または「Jones」が含まれているレコードのみを処理します。

注: この場合は、包含処理で大/小文字の区別を行わないため演算子 CU を使用します。start、length、および type パラメーターは省略されています。
SETC('TESTREC','&ZINREC')

  if TESTC(TESTREC,'CU','Smith','Jones') then
     return
   else
     return 'DROP'

例 2

salary が 75000 より大きいすべてのレコードを処理します。ここで、salary は、開始位置 28 で検出されるパック 10 進数値です。

注: この事例では、File Manager がパック 10 進数フィールドの長さを計算します。
SETC('TESTREC','&ZINREC')
  if TESTC(TESREC,28,,P,'>',75000) then
     return
   else
     return 'DROP'