可変長ファイルの取り扱いは?  可変長ファイルの出力を行う方法は?  固定長ファイルから可変長ファイルへ変換する方法は?  プログラムが記憶保護例外でアベンドした場合の対応は?(可変長ファイル使用)

Document created by Masaaki_Iyama Employee on Jun 18, 2015
Version 1Show Document
  • View in full screen mode

文書番号: JTEC000986

製品名: CA-Easytrieve Plus

バージョン: ALL

OS: z/OS, MSP, VOS3

 

Question

可変長ファイルの取り扱いは?

可変長ファイルの出力を行う方法は?

固定長ファイルから可変長ファイルへ変換する方法は?

プログラムが記憶保護例外でアベンドした場合の対応は? (可変長ファイル使用)

 

Answer

可変長ファイルの入力では、各レコードのレコード長に注意する必要があります。可変長ファイルに対してレコードを出力する場合は、ファイル定義のDCBパラメータで可変長ファイルの指定を行い、出力時にレコード長をセットする必要があります。

可変長ファイルの場合、レコード記述ワード(RDW)に対して4バイトのレコード長を指定することができ、ファイルがブロッキングされる場合には、ブロック記述ワード(BDW)に対して4バイトのブロック長を指定することができます。

 

[ファイル定義の記述]

FILE     ファイル名     レコード形式  ( レコード長    ブロック長 )


レコード形式 : 可変長ファイルではV、VB、VBSを指定

 

 

RECORD-LENGTH は現在のデータ・レコードの長さの情報を持ったEASYPLUSのシステム定義フィールドです。入力の場合、このフィールドに各レコードごとのレコード長がセットされています。RECORD-LENGTHにレコード長をセットする場合、レコード長はRDWを除いた長さを指定します。RECORD-LENGTHにレコード長を設定しない場合は、最大レコード長がとられます。

 

[RECORD-LENGTHの記述]

[ファイル名:] RECORD-LENGTH

 

RECORD-LENGTHフィールドは、すべてのファイルに対して同じ名前で用意されます。同一ジョブ内で複数ファイルを参照する場合には、ファイル名で修飾します。可変長ファイルを扱う場合、RECORD-LENGTHで入力レコード長を確認の上データを参照しないと、記憶保護例外でアベンドする可能性がありますので注意が必要です。

 

記述例

(例1) 可変長ファイルへ出力する

  FILE     FILEA       VB( 44   444 )

     CODE       1       3     N

  *

  FILE     FILEB       VB( 44  444 )

  *

  JOB

  IF    CODE   NE   999

         FILEB:RECORD-LENGTH     =     FILEA:RECORD-LENGTH

         PUT  FILEB  FROM  FILEA

  END-IF

                                         

この例では、可変長ファイル「FILEA」を入力し、CODEが999以外のレコードを可変長ファイル「FILEB」へ出力しています。可変長ファイルへレコードを出力するときには、PUTの実行前にかならずRECORD-LENGTHフィールドにレコード長を設定します。このシステム定義フィールドはすべてのファイルに対して同じ名前で用意されますので、この例のように同一プログラム中で複数ファイルを取り扱う場合にはかならずファイル名で修飾します。

 


(例2) 固定長ファイルを可変長ファイルへ変換する

  FILE     FILEA      FB( 80 800 )

     CODE      1       3     A

  *

  FILE     FILEB      VB( 44 444 )

  *

  JOB

   IF      CODE   <=   100

            FILEB:RECORD-LENGTH   =   40

   ELSE

            IF    CODE   101   THRU   200

                   FILEB:RECORD-LENGTH    =   60

            ELSE

                   IF    CODE   >   200

                          FILEB:RECORD-LENGTH   =   80

                   END-IF

             END-IF

   END-IF

    PUT  FILEB  FROM  FILEA

                                           

この例では、固定長ファイル「FILEA」を入力し、CODEの値によってレコード長を変えて可変長ファイル「FILEB」へ出力、固定長から可変長へフォーマットの変換をしています。

 

Attachments

    Outcomes