このドキュメントでは、次のトピックについて説明します。
ADACMP 入力データは、シーケンシャルデータセットまたはシーケンシャルファイル内に含まれている必要があります。 インデックス付きのシーケンシャル入力や VSAM の入力は使用できません。
レコード長は固定、可変、あるいは不定長でもかまいません。 最大入力レコード長は、オペレーティングシステムによって決定されます。 最大圧縮レコード長は、使用しているデータストレージのブロックサイズおよびそのファイルに設定されている最大圧縮レコード長によって制限されます(ADALOD ユーティリティの MAXRECL パラメータを参照)。 入力レコードの形式は、ブロック形式か非ブロック形式のいずれかです。
各レコード内のフィールドは、指定したフィールド定義ステートメント(または既存の Adabas FDT を使用する場合は指定した FDT)に従って構造化されている必要があります。 ユーザー出口ルーチンを使用する場合、ユーザー出口処理後の構造がフィールド定義に一致する必要があります。 入力レコードに対応するフィールド定義ステートメントがない場合、末尾の情報は無視され、ADACMP の出力にも含まれません。
また、レコードが含まれていないデータセットの入力も許可されます。
パラメータ NUMREC=0 を指定することにより、入力データセットの指定を省略することができます。
各レコードのマルチプルバリューフィールド内の値の個数をフィールド定義ステートメントで指定するか、または各入力レコードの値の先頭にバリューカウントを指定する必要があります。 フィールド定義ステートメントで指定する場合、指定可能なマルチプルバリューカウントの最小値は 1 で、最大値は 65,534 または 191(ADACMP COMPRESS の MUPEX パラメータと MUPECOUNT パラメータの設定によって異なる)です。 入力レコードに最小のカウント(個数)を指定するとき、値を含まないマルチプルバリューフィールドを示すゼロ(0)を指定できます。
各レコード内の値の個数が一定である場合、マルチプルバリューフィールドを定義するフィールド定義ステートメントにその個数が指定できます(オカレンスの指定)。 この場合、入力レコード中にはカウントバイトを付けません。 既存の FDT からのレコード定義を使用する場合、または前の DECOMPRESS 処理からの入力データを使用する場合、データにはすでに長さの値が含まれています。フィールド定義ステートメントにはカウントを指定しません。
指定したカウントは、そのフィールドに NU オプションが指定されている場合、ADACMP によって修正されることがあります。 つまり、空値が省略され、カウントフィールドがそれに従って調整されます。 このことは、バリューカウントを一連の各値の前に指定するか、またはフィールド定義ステートメントで指定するかにかかわらず、同様です。 「MU:マルチプルバリューフィールド」セクションを参照してください。
フィールド定義:
ADACMP FNDEF='01,MF,5,A,MU,NU'
各レコードには異なる数の MF 値が含まれ、一連の各オカレンスの前にカウントが指定されています。
ADACMP 実行前 | ADACMP 実行後 | |
---|---|---|
入力レコード 1 (3 つの値) |
MF カウント =3 AAAA BBBB CCCC |
MF カウント =3 AAAA BBBB CCCC |
入力レコード 2 (2 つの値) |
MF カウント =2 AAAA BBBB |
MF カウント =2 AAAA BBBB |
入力レコード 3 (3 つの値) |
MF カウント =3 AAAA bbbb CCCC |
MF カウント =2 AAAA CCCC |
入力レコード 4 (値なし) |
MF カウント =0 | MF カウント =0 |
入力レコード 5 (1 つの値) |
MF カウント =1 bbbb |
MF カウント =0 |
フィールド定義:
ADACMP FNDEF='01,MF,4,A,MU(3),NU'
各レコードには 3 つの MF 値が含まれ、これらの値はフィールド定義ステートメントで指定されています。
ADACMP 実行前 | ADACMP 実行後 | |
---|---|---|
入力レコード 1 | MF カウント =3 AAAA BBBB CCCC |
|
入力レコード 2 | MF カウント =2 AAAA BBBB |
|
入力レコード 3 | MF カウント =2 AAAA CCCC |
|
入力レコード 4 | MF カウント =0 |
各ピリオディックグループでは、レコード内のフィールドの繰り返し(オカレンス)カウントを指定する必要があります。 カウントは、すべてのレコードについてフィールド定義ステートメント内で指定するか、または 1 バイトまたは 2 バイトのバイナリ値(MUPECOUNT パラメータの値によって異なる)として、すべてのレコードの各オカレンスグループの前に指定します。 フィールド定義ステートメントでカウントを指定する場合、入力レコードにはカウントバイトを付けません。 フィールド定義ステートメントで指定する場合、指定可能なカウントの最小値は 1 で、最大値は 65,534 または 191(ADACMP COMPRESS の MUPEX パラメータと MUPECOUNT パラメータの設定によって異なる)です。 レコードに最小のカウントを指定するときは、オカレンスを含まないピリオディックグループを示す値としてゼロ(0)を指定できます。
指定したオカレンスカウントは、ピリオディックグループ内の全フィールドが NU オプションを指定して定義されている場合は、ADACMP によって修正されることがあります。 つまり、特定オカレンス内の全フィールドが空値であり、空値でないオカレンスが後にない場合、そのオカレンスは削除され、ピリオディックグループオカレンスカウントがそれに従って調整されます。
フィールド定義:
ADACMP COMPRESS ADACMP FNDEF='01,GA,PE' ADACMP FNDEF='02,A1,4,A,NU' ADACMP FNDEF='02,A2,4,A,NU'
入力レコードには、GA の可変個のオカレンスが含まれます(MUPEX パラメータは指定されておらず、その結果 MUPECOUNT パラメータがデフォルトの "1" に設定されているため、最大 191 オカレンスまで許可されます)。 オカレンスカウントは、入力レコード内の各オカレンスグループの前に指定されています。
ADACMP 実行前 | ADACMP 実行後 | |
---|---|---|
入力レコード 1 | GA カウント =2 | GA カウント =2 |
GA(第 1 オカレンス) A1=AAAA A2=BBBB |
||
GA(第 2 オカレンス) A1=CCCC A2=DDDD |
||
入力レコード 2 | GA カウント =1 | GA カウント =0 |
GA(第 1 オカレンス) A1=bbbb A2=bbbb |
||
入力レコード 3 | GA カウント =3 | GA カウント =3 |
GA(第 1 オカレンス) A1=AAAA A2=bbbb |
||
GA(第 2 オカレンス) A1=BBBB A2=bbbb |
||
GA(第 3 オカレンス) A1=CCCC A2=bbbb |
||
入力レコード 4 | GA カウント =0 | GA カウント =0 |
フィールド定義:
ADACMP FNDEF='01,GA,PE(3)' ADACMP FNDEF='02,A1,4,A,NU' ADACMP FNDEF='02,A2,4,A,NU'
全入力レコードには GA の 3 つのオカレンスが含まれ、これらのオカレンスはフィールド定義ステートメントで指定されています。
ADACMP 実行前 | ADACMP 実行後 | |
---|---|---|
入力レコード 1 | GA カウント =3 | |
GA(第 1 オカレンス) A1=AAAA A2=bbbb |
||
GA(第 2 オカレンス) A1=BBBB A2=bbbb |
||
GA(第 3 オカレンス) A1=CCCC A2=bbbb |
||
入力レコード 2 | GA カウント =2 (注参照) | |
GA(第 1 オカレンス) A1=bbbb A2=bbbb |
||
GA(第 2 オカレンス) A1=BBBB A2=bbbb |
||
GA(第 3 オカレンス) A1=bbbb A2=bbbb |
||
入力レコード 3 | 全オカレンスが 空値 |
GA カウント =0 全オカレンスが削除される |
注意:
第 1 オカレンスは、空値でないオカレンスが後に続くため、カウントに含まれます。 第 3
オカレンスは、空値でないオカレンスが後に続かないため、カウントに含まれません。
AW という PE にフィールド AY を追加します。
古い FDT | 新しい FDT |
---|---|
01 AA,8,A,DE,UQ | 01 AA,8,A,DE,UQ |
01 AW,PE | 01 AW,PE |
02 AX,8,U,NU | 02 AX,8,U,NU |
02 AT,8,U,NU | 02 AT,8,U,NU |
01,AZ,3,A,DE,MU,NU | 02 AY,8,U,NU |
01,AZ,3,A,DE,MU,NU |
注意:
現在 PE に存在しているすべてのフィールドを指定する必要があります。
PE の最大オカレンス(2 の結果など)を決定します。
フォーマットパラメータを指定してファイルを圧縮解除します。
INFILE=xx,FORMAT='AA,AX1-2,AT1-2,AZ' で圧縮解除します。
再度圧縮します。
ADACMP COMPRESS FILE=32
ADACMP FORMAT='AA,AX1-2,AT1-2,AZ'
ADACMP FNDEF='01,AA,8,A,DE,UQ'
ADACMP FNDEF='01,AW,PE(2)'
ADACMP FNDEF='02,AX,8,U,NU'
ADACMP FNDEF='02,AT,8,U,NU'
ADACMP FNDEF='02,AY,8,U,NU'
ADACMP FNDEF='01,AZ,3,A,DE,MU,NU'
可変長フィールド(フィールド定義に長さパラメータの指定なし)の各値の先頭には、値の長さ(長さバイトを含む)を示す 1 バイトのバイナリカウントを付ける必要があります。 可変長(つまり、長さ 0)で指定された LA フィールドの先頭には、2 バイトの長さ(長さバイトを含む)を付ける必要があります。 可変長で指定された LB フィールドの先頭には、4 バイトの長さ(長さバイトを含む)を付ける必要があります。
フィールド定義:
ADACMP FNDEF='01,AA,5,A,DE' ADACMP FNDEF='01,VF,0,A' ADACMP FNDEF='01,VR,0,A'
入力レコード: