FLD
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'