FLD

1. Syntax

1 FLD(start_column?,length?,type)

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

現行の入力レコード (INREC) からフィールドの値を、start_column から開始して、 指定された下記の type に応じて解釈される length バイト数だけ、取り出します。

Returns
現在の入力レコードのフィールド値。
start_column
フィールド値の読み取りを開始する入力レコード内の位置 (バイト単位)。以下のように指定できます。
絶対位置
正の整数である必要があります。デフォルト値は 1 です。start が入力レコードの現在の長さより大きければ、この関数は無効になります。
現行 INPOS からの相対位置
IPx または INx、あるいは Px または Nx として指定できます。結果の値がゼロ以下になる場合、関数はエラーとなります。結果の値が入力レコードの現在の長さより大きいと、この関数は無効になります。
現行 OUTPOS からの相対位置
OPx または ONx として指定する必要があります。結果の値がゼロ以下になる場合、関数はエラーとなります。結果の値が入力レコードの現在の長さより大きいと、この関数は無効になります。
length
フィールドの長さ (バイト数)。

2 進数フィールドの場合には、長さを指定する必要があります。これは 2、4、または 8 とすることができます。

文字フィールドの場合には、長さを省略すると、FLD はレコードの残りを戻します。

パック 10 進フィールドでは、長さを指定する場合には 1 から 16 の範囲内でなければなりません。長さを省略すると、FLD はレコード・データからパック・フィールドの長さを決定して、そのフィールドだけを戻します。

ゾーン 10 進フィールドでは、長さを指定する場合には 1 から 31 の範囲内か、またはフィールドに分離符号文字が入っている場合には 1 から 32 の範囲内でなければなりません。長さを省略すると、FLD はレコードの残りを戻します。

type
フィールドのデータ・タイプ。有効な値は、以下のとおりです。
B
2 進数。FLD は 2 進数フィールドを符号付きと解釈します。
C
文字。これは、デフォルトです。
P
パック 10 進数。
U
フィールドを文字として解釈しますが、ストリングを戻す前に、これを大文字に変換します。
Z
ゾーン 10 進数。すべての COBOL 外部 10 進数変形を数値データとして解釈します。

レコード長を超える length の値を指定すると:

  • 文字フィールド (type C、U) の場合には、FLD はレコードの残りを戻します。
  • 数値フィールド (types B、P、Z) の場合には、FLD はヌル・ストリングを戻します。

数値タイプ (types B、P、Z) を指定して、指定したフィールドにそのタイプには無効なデータが 入っていると、FLD はヌル・ストリングを戻します。数値データは常に整数形式で戻されます。すなわち、FLD は数値データのスケールを実行しません。

FLD 関数は組み込み REXX SUBSTR 関数に似ていますが、FLD は指定されたデータ・タイプに従って「サブストリング」を解釈して、それに応じて形式設定された値を戻すところが違います。(数値フィールドの場合、FLD は、符号付き、先行ゼロなしの値を戻します。)

例 1

8 桁目から始まるパック 10 進数フィールドの値が 100 より大きい場合、現行レコードを処理しません。
 If FLD(8,P) > 100 Then Return 'DROP'

例 2

42 桁目から始まる 2 桁の年フィールドの値が 60 より大きい場合には、年フィールドの前にリテラル「19」を挿入し、そうでない場合には「20」を挿入します。
If FLD(42,2,Z) > 60 Then outrec = FLD(1,41)||'19'||FLD(42) Else outrec = FLD(1,41)||'20'||FLD(42)

例 3

11 桁目から始まる 4 バイトのフィールドに有効なパック 10 進数データが入っていない場合には、現行レコードは処理されません。
If FLD(11,4,p) = '' Then Return 'DROP'

例 4

INPOS + 8 から始まるパック 10 進数フィールドの値が 100 より大きい場合、現行レコードを処理しません。
 If FLD(P8,P) > 100 Then Return 'DROP'