FLD_CO

1. Syntax

1  FLD_CO (
1! 1
1 start
2  ,
1! length(inrec)-start+1
1 length
3  ,
3? type
3  ,
3 + , needle
3  )

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

1 つ以上の needle のオカレンスがあるかどうか、startlength により指定された入力レコード内の フィールドを検索します。また、ストリングの検索が正常に実行されると、INPOS の値も更新されて、入力レコード内で検出されたフィールドの最初のバイト位置になります。

Returns
needle が 1 回以上検出された場合、戻り値は 1 です。何も検出されない場合の戻り値は 0 です。
start
needle のオカレンスの検索を開始する入力レコード内の位置 (バイト単位)。以下のように指定できます。
絶対位置
正の整数である必要があります。デフォルト値は 1 です。start が入力レコードの現在の長さより大きければ、この関数は無効になります。
現行 INPOS からの相対位置
IPx または INx、あるいは Px または Nx として指定できます。結果の値がゼロ以下になる場合、関数はエラーとなります。結果の値が入力レコードの現在の長さより大きいと、この関数は無効になります。
現行 OUTPOS からの相対位置
OPx または ONx として指定する必要があります。結果の値がゼロ以下になる場合、関数はエラーとなります。結果の値が入力レコードの現在の長さより大きいと、この関数は無効になります。
length
検索するフィールドの長さ (バイト数)。
  • 文字フィールドの場合、長さは、開始位置からレコードの終了まで (両端も含む) の残りのレコード長にデフォルト設定されます。値が 0 の場合、フィールドをレコードの終了まで拡張することも示します。
  • 2 進数フィールドの場合には、長さを指定する必要があります。これは 2、4、または 8 とすることができます。
  • パック 10 進フィールドでは、長さを指定する場合には 1 から 16 の範囲内にする必要があります。長さを省略すると、FLD_CO はレコード・データからパック・フィールドの長さを決定します。
  • ゾーン 10 進フィールドでは、長さを指定する場合には 1 から 31 の範囲内か、またはフィールドに分離符号文字が入っている場合には 1 から 32 の範囲内にする必要があります。長さを省略すると、レコードの残り部分の長さにデフォルト設定されます。
type
フィールドのデータ・タイプ。有効な値は、以下のとおりです。
B
2 進数。FLD_CO は 2 進数フィールドを符号付きと解釈します。
C
文字。これは、デフォルトです。比較では大/小文字が区別されます。
P
パック 10 進数。
U
フィールドを文字として解釈しますが、needle と比較する前に、これを大文字に変換します。
Z
ゾーン 10 進数。すべての COBOL 外部 10 進数変形を数値データとして解釈します。
needle
検索するストリングまたは数値。文字タイプの場合、FLD_CO はそれぞれの needles について haystack を検索します。このコンテキストでは、これは FLD 関数と CONTAINS 関数の組み合わせのように動作します。数値データ・タイプの場合、haystack は単一数値フィールドとして処理され、該当する数値比較がそれぞれの needles に対して実行されます。このコンテキストでは、これは FLD 関数と NCONTAIN 関数の組み合わせのように動作します。ストリングは、一度に 20 個まで検索できます。

大/小文字を区別しない検索を実行するには、type を「U」として指定し、needle に大文字を指定します。

例 1

現行の入力レコードの最初の 10 桁の中に「MIKE」、「Mike」または「mike」を含んでいれば、レコードを印刷します。
If FLD_CO(1,10,'U','MIKE') Then WRITE('MDD')

例 2

現行の入力レコードが、「USA」、「Australia」、または「England」を含んでいれば、そのレコードを処理から除去します。
If FLD_CO(,,,'USA','Australia','England') Then Return 'DROP'

例 3

現行の入力レコードが、現行の INPOS 直後の 10 桁に「MIKE」、「Mike」、または「mike」を 含んでいれば、レコードを印刷します。

If FLD_CO(P0,10,'U','MIKE') Then WRITE('MDD')