EXFMT (形式の書き出し、その後読み取り)

自由形式構文 EXFMT{(E) } 形式名 {データ構造 }
コード 演算項目 1 演算項目 2 結果フィールド 標識
EXFMT (E)   形式名 データ構造 _ ER _

EXFMT 命令は、WRITE とそれに続く同じレコード様式の READ の組み合わせです。 EXFMT が有効なのは、外部記述の全手順入出力共用ファイル として定義された WORKSTN ファイルの場合のみです。

形式名 オペランドは、書き出されてから読み取られるレコード様式の名前である必要があります。

データ構造オペランドが指定されている場合、レコードの書き込みおよび読み込みの対象はデータ構造になります。 このデータ構造は、EXTNAME(...:*ALL) または LIKEREC(...:*ALL) で定義されるデータ構造にする必要があります。 データ構造の定義方法、およびファイルとデータ 構造の間でどのようにデータが転送されるかについては、ファイル命令を参照してください。

EXFMT 例外 (ファイル状況コードが 1000 より大きい) を 処理するために、命令コード拡張 'E' またはエラー標識 ER を指定できますが、 両方を指定することはできません。 エラーが発生した場合には、この命令の読み取り 部分は処理されません (レコード識別標識およびフィールドは変更されません)。 エラー処理の詳細については、ファイル例外/エラーを 参照してください。

71 桁目、72 桁目、75 桁目、および 76 桁目はブランクでなければなりません。

複数装置ファイルでの EXFMT の使用法について は、READ (形式名による) および WRITE 命令の説明を参照してください。

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

図 1. EXFMT 命令
 *..1....+....2....+....3....+....4....+....5....+....6....+....7...+....
F*Flename++IPEASFRLen+LKlen+AIDevice+.Keywords+++++++++++++++++++++++++
 *
 * PROMTD is a WORKSTN file which prompts the user for an option.
 * Based on what user enters, this program executes different
 * subroutines to add, delete, or change a record.
 *
FPROMTD    CF   E             WORKSTN

 /free
    // If user enters F3 function key, indicator *IN03 is set
    // on and the do while loop is exited.
    dow not *in03;
 
       // EXFMT writes out the prompt to the screen and expects user to
       // enter an option. SCR1 is a record format name defined in the
       // WORKSTN file and OPT is a field defined in the record.
       exfmt SCR1;
       select;
       when opt = 'A';
          exsr AddRec;
       when opt = 'D';
          exsr DelRec;
       when opt = 'C';
          exsr ChgRec;
       endsl;
    enddo;
    do_something ();
    do_more_stuff ();
 /end-free
図 2. EXFMT が指定されているデータ構造の使用
  * DDS for display file MYDSPF
A          R REC
A            QUESTION      40A  O  5  2
A            NAME          20A  I  7  5
A            CITY          20A  B  8  5
 * RPG program using MYDSPF
Fmydspf    cf   e             workstn        
 * Define a data structure for use with EXFMT REC
D recDs           ds                  likerec(rec : *all)
 /free     
        // Set the output-capable fields
        recDs.question = 'What is your name?';
        recDs.city = 'Toronto';        // Show the screen to the user
        exfmt rec recDs;            
        // Use the input-capable fields
        // Since the "city" field is both input and output
        // capable, its value may have changed during EXFMT
        dsply ('Hello ' + recDs.name + ' in ' + recDs.city);