READ (レコードの読み取り)

自由形式構文 READ{(EN) } 名前 {データ構造 }
コード 演算項目 1 演算項目 2 結果フィールド 標識
READ (E N)   名前 (ファイルまたはレコード様式) データ構造 _ ER EOF

READ 命令は、全手順ファイルから、現在ポイントされているレコードを読み取ります。

名前 オペランドは必須で、ファイルまたはレコード様式の名前でなければなりません。レコード様式名を使用できるのは、外部記述ファイルの場合だけです。 「形式名による READ」命令では、名前 オペランドに指定した形式とは別の形式を受け取る場合があります。その場合には、READ 命令はエラーで終了します。

データ構造 オペランドが指定されている場合、レコードはデータ構造に直接読み込まれます。 名前プログラム記述 ファイルを参照する場合、データ構造は、 宣言されたファイルのレコード長と同じ長さの任意のデータ構造にできます。 名前 が外部記述ファイルまたは外部記述ファイルのレコード様式を参照する場合、データ構造は EXTNAME(...:*INPUT or *ALL) または LIKEREC(...:*INPUT or *ALL) で定義されているデータ構造にする必要があります。 データ構造の定義方法、およびファイルとデータ 構造の間でどのようにデータが転送されるかについては、ファイル命令を参照してください。

READ 命令が正常に実行された場合には、ファイルはその読み取りを満たす次のレ コードに位置付けられます。 レコード・ロック・エラー (状況コード 1218) が発生した場合、ロックされたレコードにファイルが置かれたままになり、そのレコードの読み取りが次の読み取り操作において再試行されます。 その他の何らかのエラーが発生するか、ファイルの終わり条件が存在する場合には、(CHAIN 命令、SETLL 命令、または SETGT 命令を使用して) ファイルの位置を変更する必要があります。

読み取るファイルが更新ディスク・ファイルの場合には、命令拡張 N を指 定して、読み取り時にレコードをロックする必要がないことを指示することがで きます。 詳細については、Rational Development Studio for i ILE RPG プログラマーの手引き を参照してください。

READ 例外 (ファイル状況コードが 1000 より大きい) を 処理するために、命令コード拡張 'E' またはエラー標識 ER を指定できますが、 両方を指定することはできません。 エラー処理の詳細については、ファイル例外/エラーを 参照してください。

75-76 桁目に、READ 命令でファイルの終わりになったかどうかを知らせる標識を指定 することができます。 この標識は READ 命令が実行されるたびに オン (EOF 条件) またはオフに設定されます。 この情報は %EOF 組み込み関数からも入手することができます。この関数 は、EOF 条件が発生した場合に '1' を戻します。それ以外の場合には '0' を戻します。 EOF 条件の後でさらにファイルに対する正常な 順次操作 (例えば、READ または READP) を処理 するためには、ファイルの位置を決め直さなければなりません。

図 1 に、READ 命令を示します。

名前 が複数装置ファイルを指定している場合には、READ 命令によって次のいずれかが実行されます。
  • 最後の NEXT 命令で指定された装置からデータが読み取られます (そのよ うな NEXT 命令が処理された場合)。
  • ファイルに対して入手されていて、DDS の INVITE キーワードによって “送信勧誘状態” に指定されている装置から最初の応答を受け入れます。 送信勧誘された装置がない場合には、この命令はファイルの終わりを受け取ります。 入力は対応する形式に従って処理されます。 装置がワークステーションの場合 には、最後に書き込まれた形式が使用されます。 装置が通信装置の場合には、ユーザーが形式を選択できます。

    ICF ファイルの形式選択処理について詳しくは、 「ICF Programming」(SC41-5442) を 参照してください。

    READ 命令は、一定の時間何も入力されない場合、または制御された方式による オプションを指定して次の CL コマンドの 1 つが入力された場合には、待機を 停止します。
    • ENDJOB (ジョブ終了)
    • ENDSBS (サブシステム終了)
    • PWRDWNSYS (システム電源遮断)
    • ENDSYS (システム終了)

    この結果はファイル例外/エラーとなり、ユーザーのプログラムに指定された方法 によって処理されます (ファイル例外/エラーを参照してください)。 ファイルを作成または変更するコマンドの WAITRCD パラメーターについては、「ICF Programming」(SC41-5442) を 参照してください。このパラメーターは、READ 命令が入力を待機する時間の長さを制御します。

名前 に形式名を指定し、その形式名が複数装置ファイルに対応する場合には、データはファイル仕様書の DEVID キーワードに指定されたフィールドによって識別される装置から読み取られます。そのような指定がない場合には、 データは最後の正常な入力操作で使用された装置から読み取られます。

ヌル値可能フィールドを持つレコードの読み取りについて は、データベースのヌル値サポートを参照してください。

詳細については、ファイル命令を参照してください。

図 1. READ 命令
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+....
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
 *
 *  READ retrieves the next record from the file FILEA, which must
 *  be a full procedural file.
 *  %EOF is set to return '1' if an end of file occurs on READ,
 *  or if an end of file has occurred previously and the file
 *  has not been repositioned.  When %EOF returns '1',
 *  the program will leave the loop.
 *
C                   DOW       '1'
C                   READ      FILEA
C                   IF        %EOF
C                   LEAVE
C                   ENDIF
 *
 *  READ retrieves the next record of the type REC1 (factor 2)
 *  from an externally described file.  (REC1 is a record format
 *  name.)  Indicator 64 is set on if an end of file occurs on READ,
 *  or if it has occurred previously and the file has not been
 *  repositioned.  When indicator 64 is set on, the program
 *  will leave the loop.  The N operation code extender
 *  indicates that the record is not locked.
 *
C                   READ(N)   REC1                                   64
C   64              LEAVE
C                   ENDDO