バージョン 8.1.3
 —  ユーティリティ  —

入力データの必要条件

このドキュメントでは、次のトピックについて説明します。


入力データの構造

ADACMP 入力データは、シーケンシャルデータセットまたはシーケンシャルファイル内に含まれている必要があります。 インデックス付きのシーケンシャル入力や VSAM の入力は使用できません。

レコード長は固定、可変、あるいは不定長でもかまいません。 最大入力レコード長は、オペレーティングシステムによって決定されます。 最大圧縮レコード長は、使用しているデータストレージのブロックサイズおよびそのファイルに設定されている最大圧縮レコード長によって制限されます(ADALOD ユーティリティの MAXRECL パラメータを参照)。 入力レコードの形式は、ブロック形式か非ブロック形式のいずれかです。

各レコード内のフィールドは、指定したフィールド定義ステートメント(または既存の Adabas FDT を使用する場合は指定した FDT)に従って構造化されている必要があります。 ユーザー出口ルーチンを使用する場合、ユーザー出口処理後の構造がフィールド定義に一致する必要があります。 入力レコードに対応するフィールド定義ステートメントがない場合、末尾の情報は無視され、ADACMP の出力にも含まれません。

また、レコードが含まれていないデータセットの入力も許可されます。

パラメータ NUMREC=0 を指定することにより、入力データセットの指定を省略することができます。

Top of page

マルチプルバリューフィールドカウント

各レコードのマルチプルバリューフィールド内の値の個数をフィールド定義ステートメントで指定するか、または各入力レコードの値の先頭にバリューカウントを指定する必要があります。 フィールド定義ステートメントで指定する場合、指定可能なマルチプルバリューカウントの最小値は 1 で、最大値は 65,534 または 191(ADACMP COMPRESS の MUPEX パラメータと MUPECOUNT パラメータの設定によって異なる)です。 入力レコードに最小のカウント(個数)を指定するとき、値を含まないマルチプルバリューフィールドを示すゼロ(0)を指定できます。

各レコード内の値の個数が一定である場合、マルチプルバリューフィールドを定義するフィールド定義ステートメントにその個数が指定できます(オカレンスの指定)。 この場合、入力レコード中にはカウントバイトを付けません。 既存の FDT からのレコード定義を使用する場合、または前の DECOMPRESS 処理からの入力データを使用する場合、データにはすでに長さの値が含まれています。フィールド定義ステートメントにはカウントを指定しません。

指定したカウントは、そのフィールドに NU オプションが指定されている場合、ADACMP によって修正されることがあります。 つまり、空値が省略され、カウントフィールドがそれに従って調整されます。 このことは、バリューカウントを一連の各値の前に指定するか、またはフィールド定義ステートメントで指定するかにかかわらず、同様です。 「MU:マルチプルバリューフィールド」セクションを参照してください。

例 1:オカレンス数が異なるマルチプルバリューフィールドカウント

フィールド定義:

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

例 2:オカレンス数が同じマルチプルバリューフィールドカウント

フィールド定義:

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

Top of page

ピリオディックグループカウント

各ピリオディックグループでは、レコード内のフィールドの繰り返し(オカレンス)カウントを指定する必要があります。 カウントは、すべてのレコードについてフィールド定義ステートメント内で指定するか、または 1 バイトまたは 2 バイトのバイナリ値(MUPECOUNT パラメータの値によって異なる)として、すべてのレコードの各オカレンスグループの前に指定します。 フィールド定義ステートメントでカウントを指定する場合、入力レコードにはカウントバイトを付けません。 フィールド定義ステートメントで指定する場合、指定可能なカウントの最小値は 1 で、最大値は 65,534 または 191(ADACMP COMPRESS の MUPEX パラメータと MUPECOUNT パラメータの設定によって異なる)です。 レコードに最小のカウントを指定するときは、オカレンスを含まないピリオディックグループを示す値としてゼロ(0)を指定できます。

指定したオカレンスカウントは、ピリオディックグループ内の全フィールドが NU オプションを指定して定義されている場合は、ADACMP によって修正されることがあります。 つまり、特定オカレンス内の全フィールドが空値であり、空値でないオカレンスが後にない場合、そのオカレンスは削除され、ピリオディックグループオカレンスカウントがそれに従って調整されます。

例 1:オカレンス数が異なるピリオディックグループカウント

フィールド定義:

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

例 2:オカレンス数が同じピリオディックグループカウント

フィールド定義:

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 オカレンスは、空値でないオカレンスが後に続かないため、カウントに含まれません。

例 3:PE グループへのフィールドの追加

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 に存在しているすべてのフィールドを指定する必要があります。

  1. PE の最大オカレンス(2 の結果など)を決定します。

  2. フォーマットパラメータを指定してファイルを圧縮解除します。

  3. INFILE=xx,FORMAT='AA,AX1-2,AT1-2,AZ' で圧縮解除します。

  4. 再度圧縮します。

    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'

Top of page

可変長フィールドのサイズ

可変長フィールド(フィールド定義に長さパラメータの指定なし)の各値の先頭には、値の長さ(長さバイトを含む)を示す 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'

入力レコード:

graphics/cmp3_at_anchorb.png

Top of page