FLDI
FASTREXX 条件式で使用できます。
start、length、および type パラメーターで定義されている入力レコード・フィールドに対して条件付きテストを実行します。
注:
- 演算子 (operator) および非数値の値はすべて引用符で囲み、構文エラーにならないようにする必要があります。
- レコード長を超える length の値を指定すると、「偽」の結果が返されます。
- 数値タイプ (タイプ B、P、Z) を指定した場合に、指定したフィールドに、そのタイプに無効なデータが含まれていると、関数は「偽」の結果を返します。数値データは常に整数形式で戻されます。すなわち、関数は数値データのスケールを実行しません。
- start
- フィールド値の読み取りを開始する入力レコード内の位置 (バイト単位)。以下のように指定できます。
- 絶対位置
- 正の整数である必要があります。start が入力レコードの現在の長さより大きければ、この関数は無効になります。
- 現行 INPOS からの相対位置
- IPx または INx、または Px または Nx として指定できます。結果の値がゼロ以下になる場合、関数はエラーとなります。結果の値が入力レコードの現在の長さより大きいと、関数は「偽」の結果を作成します。
- 現行 OUTPOS からの相対位置
- OPx または ONx として指定する必要があります。結果の値がゼロ以下になる場合、関数はエラーとなります。結果の値が入力レコードの現在の長さより大きいと、関数は「偽」の結果を作成します。
- 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
入力レコードを検査し、レコードに値「Smith」または「Jones」が含まれているレコードのみを処理します。
注: この場合は、包含処理で大/小文字の区別を行わないため演算子 CU を使用します。
if FLDI(1,,C,'CU','Smith','Jones') then
return
else
return 'DROP'
例 2
salary が 75000 より大きいすべてのレコードを処理します。ここで、salary は、開始位置 28 で検出されるパック 10 進数値です。
注: この事例では、File Manager がパック 10 進数フィールドの長さを計算します。
if FLDI(28,,P,'>',75000) then
return
else
return 'DROP'
例 3
開始位置 10 に値「ABCABCABCABCABC」があるすべての入力レコードを処理します。
注: length は、リテラル値の長さである 15 にデフォルト設定されます。
If FLDI(10,'=','ABC',5) then
return
else
return 'DROP'
例 4
例 2 と同じですが、数値変数を使用します。
SETN(salary_high,75000)
if FLDI(28,,P,'>','&salary_high') then
return
else