FLD_CO
(FASTREXX 条件式で使用できます。)
1 つ以上の needle のオカレンスがあるかどうか、start と length により指定された入力レコード内の フィールドを検索します。また、ストリングの検索が正常に実行されると、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')