TFLD

1. Syntax

1  TFLD (
1 #nn(subscript)
1 fieldname(subscript)
1 ,
1! 'EQ')
1 'operator'
1 ,
5?  + , value
1 ,
6?   VER
6  )

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

テンプレートに定義されている任意のフィールドに対する条件テストを実行します。次元フィールドの場合は、配列の任意のエレメントまたは全エレメントに対して条件を適用できます。この機能は、関連する機能がコピーブックまたはテンプレートを使用して実行されている場合にのみ使用できます。

注: フィールド名 (fieldname)、フィールド参照 (#nn)、演算子 (operator)、および非数値の値はすべて引用符で囲み、構文エラーにならないようにする必要があります。
#nn または fieldname
#nn
テンプレートの編集時に、フリー・フォーマットの基準を指定してある場合に、この形式を使用します。nn は、テンプレートの編集時に表示されたフィールド参照番号です。テンプレートの編集時に基準を指定してある場合は、フィールド参照として fieldname を 使用することは無効です。
fieldname
ユーザー・プロシージャーをコーディングする場合に、この形式を使用してフィールドを識別します。名前が固有でない場合は、groupname.dataname という形式を使用して名前を指定できます。名前の突き合わせでは、大/小文字が区別されません。名前を修飾しなかった場合は、最初に出現する名前が使用されます。ユーザー・プロシージャーでは値 #nn をコーディングしないでください。 ユーザー・プロシージャーから実行された場合は、表示されるフィールド参照値が、正しいフィールドを識別しないためです。
下付き
次元フィールドのみに適用されます。以下のいずれかの形式を指定できます。
(ANY)
これが、次元フィールドに添字を指定しなかった場合のデフォルトです。関連する配列の 1 つ以上のエレメントが条件を満たす場合に、結果が真になることを示します。
(ALL)
関連する配列の全エレメントが条件を満たす場合に、結果が真になることを示します。
(nn)
この形式では、単一の配列エレメントを指します。その次元フィールドに対応する有効な添字を指定する必要があります。
オペレーター (operator)
デフォルトは EQ または = です。この機能では、動的テンプレートと基準編集で示した、すべての演算子をサポートしています。サポートする演算子の詳細と説明については、以下の節を参照してください。
入力する値は、参照されている演算子とフィールドでのコンテキストで有効な値である必要があります。例えば、複数の値を使用できる演算子は、CO (包含) など一部の演算子のみです。また、数値を入力するのは、数値フィールドを検査する場合です。
16 進数ストリングの指定
16 進数ストリングは 'hhhhhh'x の形式でなければなりません。引用符で囲まれた値の文字数は偶数であり、使用される文字が有効な 16 進文字 (0–9、A–F) である必要があります。
バイナリー・ストリングの指定
バイナリー・ストリングは 'nnnnnn'b の形式でなければなりません。引用符で囲まれた値は「0」と「1」の組み合わせである必要があります。
文字ストリングの指定
非数値タイプの場合は、値を引用符で囲む必要があります。
VER
フィールドが、「値」列で指定されている文字だけで構成されていることを検証します。

例 1

次元フィールド CONTACTS の各エレメントを検査し、連絡先の値が「Smith」または「Jones」であるレコードのみを処理します。
注: この場合は、包含処理で大/小文字の区別を行わないため演算子 CU を使用します。
if TFLD('CONTACTS(ANY)','CU','Smith','Jones') then
   return
 else
   return 'DROP'

例 2

契約レコード・タイプの 1 つについて月給 (monthly pay) を検査し、各月のオカレンスのうち、値が 8000 を超えるオカレンスを処理します。
注: MPAY が固有でないため、検査する MPAY を限定しています。
Copybook
 01 REC-CONTRACT.
    05 MPAY      PIC S9(8) Binary OCCURS 12 Times.
 01 REC-Employee.
    05 MPAY      PIC S9(8) Binary OCCURS 12 Times.

 if TFLD('REC-CONTRACT.MPAY(ALL)','>',8000) then
   return
 else
   return 'DROP'

パフォーマンス上の注意事項

TFLD は FLD_CO より高速ですが、フィールド値を参照するテンプレートが必要です。
TFLD('#3',,'CO','A')  & TFLD('#3',,'CO','B')
は、次のようにコーディングしたほうが一般に高速です。
TFLD('#3',,'ACO','A','B')