前ページへバイトストリームファイル処理 ファイル構造次ページへ

第 14 章 呼び出し可能ソート API

COBOL プログラムで、SORT または MERGE 動詞を使用する場合は、コンパイラがこれらの文を呼び出し可能ソートモジュール (Extsm) の呼び出しに自動で変換します。この章では、プログラムで呼び出し可能ソートモジュールを明示的に呼び出してソートを実行する方法を説明します。

14.1 呼び出しインターフェイス

呼び出し可能ソートモジュールを明示的に呼び出してファイルをソートまたはマージするには、次の呼び出し文をプログラムに挿入します。

call "EXTSM" using function-code, sort-fcd

この場合のパラメータは、次のようになります。

function-code 実行する操作の種類を示す 2 バイトのコード。有効なコードの詳細は、『ファンクションコード』の項を参照してください。
sort-fcd ソートファイル制御記述 (FCD)。これは、ファイルを記述するデータ部の領域です。この領域には、レコード領域、ファイル名、文字の大小順序、キー定義ブロックおよびファイル定義ブロックへのポインタを格納します。ソート FCD の詳細については、『ソートファイル制御記述』の項を参照してください。

14.1.1 ファンクションコード

function-code パラメータに指定できる値は、次のとおりです。

x"FA01" ソート操作を初期化します。USING ファイルの数がゼロ以外である場合は、ソートが、指定したファイルを入力として使用してすぐに開始されます。GIVING ファイルの数がゼロ以外である場合は、ソート操作により、GIVING ファイルが処理されてから、プログラムの呼び出しに対する制御が返されます。
x"FA40" マージ操作を初期化します。この操作の場合は、USING ファイルの数をゼロ以外に設定する必要があります。各 USING ファイルのレコードがすでにソートされているとみなされます。
x"FAF3" ソート操作に対してレコードを解放します。このファンクションは、USING ファイルの数がゼロの場合にのみ使用します。
x"FA10" ソート操作の入力ステージを終了します。このファンクションは、USING ファイルの数がゼロの場合にのみ使用します。この値は、これ以上の解放操作を実行しないことを示します。GIVING ファイルの数がゼロ以外の場合は、ソート操作は、ソートされたデータを GIVING ファイルに書き込んで終了します。
x"FAF5" ソートまたはマージ操作からレコードを返します。このファンクションは、GIVING ファイルの数がゼロである場合にのみ使用します。
x"FA88" ソートまたはマージ操作を終了し、操作に割り当てたメモリをすべて解放し、一時ファイルをすべて削除します。このファンクションは、 GIVING ファイルの数がゼロの場合にのみ使用します。この値は、これ以上は値が返されないことを示します。

14.1.2 ソートファイル制御記述

使用するソート FCD には、『ファイルハンドラ API』の章で説明したフィールドの他に (一部重複もあり) 次のフィールドがあります。

フィールド名
サイズ
フィールドの説明
fcd-use-files 1 ソート操作に関連する USING ファイルの数 (この数はゼロになる場合があります)。
fcd-give-files 1 ソート操作に関連する GIVING ファイルの数 (この数はゼロになる場合があります)。
fcd-col-seq-address 4 文字の大小順序へのポインタ (使用しない場合はヌル)。
fcd-fildef-address 4 USING および GIVING ファイルを定義するファイル定義ブロックに対するポインタ。詳細については、『ファイル定義ブロック』の項を参照してください。

14.1.2.1 キー定義ブロック

キー定義ブロックは、ソート操作で使用するキーの構造を記述するために使用します。ソート FCD の fcd-key-def-address には、このブロックへのポインタがあります。

キー定義ブロックの詳細については、『ファイルハンドラ API』の『キー定義ブロック』を参照してください。

ソートキーは複数の構成要素を持つことが可能ですが、ソート操作の場合に、使用できるのは 1 つのキーのみです。これらの構成要素はそれぞれ、降順または昇順にソートすることができ、さまざまな数値形式の 1 つを使用することができます。重複キー値をもつレコードは、常にソート操作に表示される順序で返されます。構成要素定義の最初の 2 バイトは次のように使用します。

オフセット 0 - 1 バイト
    ビット 6 (値 x"40")は DESCENDING キーを示します。
    ビット 0 (値 x"01") はデータが EBCDIC 形式であることを示します。
    ビット 1 (値 x"02") は SIGN が EBCDIC 形式であることを示します。

オフセット 1 - 1 バイト
    ビット 7 (値 x"80") はフィールドが NUMERIC であることを示します。
      ビット 7 を設定すると (数値)、次のようになります。
        ビット 6 (値 x"40") このフィールドが SIGNED NUMERIC であることを示します。
        ビット 5 (値 x"20") このフィールドが非表示フィールドであることを示します。
          ビット 5 を設定すると (DISPLAY 以外のフィールド) と次のようになります。
            ビット 0 と 1 は次のように使用されます。
            0     このフィールドが BINARY であることを示します。
            1     このフィールドが PACKED-DECIMAL であることを示します。
            2     このフィールドが COMP-X 形式であることを示します。
            3     このフィールドが COMP-5 形式であることを示します。
            ビット 2 (値 x"04") は浮動小数点を示します。
          ビット 5 が設定されていないが (DISPLAY フィールド)
          ビット 6 が設定されている (SIGNED フィールド) 場合は次のようになります。
            ビット 0 と 1 は次のように使用されます。
            0    SIGN TRAILING INCLUDED を示します。
            1    SIGN TRAILING SEPARATE を示します。
            2    SIGN LEADING INCLUDED を示します。
            3    SIGN LEADING SEPARATE を示します。
      ビット 7 が設定されていない場合 (数値以外) は次のようになります。
        FCD で指定した文字の大小順序をこのフィールドに適用する場合は、
        ビット 1 を設定します。

14.1.2.2 ファイル定義ブロック

ファイル定義ブロックは、ソート操作に関連する各 USING および GIVING ファイルのファイル制御記述を指すポインタのテーブルです。ソート FCD の fcd-fildef-address フィールドは、この領域へのポインタになります。このフィールドの長さは、2 つのフィールド、 fcd-use-files と fcd-give-files の合計を 4 倍した長さになります。


Copyright © 2002 Micro Focus International Limited. All rights reserved.
本書、ならびに使用されている固有の商標と商品名は国際法で保護されています。

前ページへバイトストリームファイル処理 ファイル構造次ページへ