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);