ALERT: Some images may not load properly within the Knowledge Base Article. If you see a broken image, please right-click and select 'Open image in a new tab'. We apologize for this inconvenience.

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

book

Article ID: 185856

calendar_today

Updated On:

Products

EASYPROCLIB Easytrieve Report Generator EASYTRIEVE REPORT GENERATOR FOR COMMON SERVICES

Issue/Introduction

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

Environment

z/OS, MSP, VOS3, IBM, FUJITSU, HITACHI

Resolution

Answer
可変長ファイルの入力では、各レコードのレコード長に注意する必要があります。可変長ファイルに対してレコードを出力する場合は、ファイル定義のDCBパラメータで可変長ファイルの指定を行い、出力時にレコード長をセットする必要があります。
可変長ファイルの場合、レコード記述ワード(RDW)に対して4バイトのレコード長を指定することができ、ファイルがブロッキングされる場合には、ブロック記述ワード(BDW)に対して4バイトのブロック長を指定することができます。

[ファイル定義の記述]
FILE    ファイル名    レコード形式   (   レコード長   ブロック長  )

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

RECORD-LENGTH は現在のデータ・レコードの長さの情報を持ったEasytrieve Plusのシステム定義フィールドです。入力の場合、このフィールドに各レコードごとのレコード長がセットされています。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

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

Additional Information

Old Japanese Knowledge document ID: JTEC000986