いつものように、メールの応対しているときに、気が付きました。たしか、私も、この2つの命令の違いを知らなかったです。でも、役立つので知っておきましょう。
RPGサイクルのフローチャートを参考にして下さい。
AS/400 RPG/400 解説書より
CLEAR 命令 |
RESET 命令 |
構造(レコード様式、データ構造、配列、またはテーブル)あるいは変数(フィールド、サブフィールド、または標識)内の要素が、フィールド・タイプ(数値、文字、または標識)に応じてゼロ、ブランク、または'0'にセットされます。この命令では、実行中に要素ごとにだけではなく大域的にも構造を消去することができます。 |
構造(レコード様式、データ構造、配列、またはテーブル)内の要素、あるいは変数(フィールド、サブフィールド、または標識)が、それぞれの初期値にセットされます。変数の初期値とは、その変数がプログラムの *INIT ステップの終わりに持っていた値のことです。この値は、データ構造初期設定を使用してセットすることができます。あるいは、初期設定サブルーチンを使用して、構造または変数に初期値を割り当てることができます。構造または変数の
RESETが指定されると、その構造または変数の初期値のスナップショットが、*INZSR(初期設定サブルーチン)実行後の*INIT
ステップの終わりで取られます。
RESET 命令は、データ構造初期設定および初期設定サブルーチン (*INZSR)と結び付けて使用します。ユーザーはデータ構造初期設定と *INZSR の両方を使用してフィールドまたは構造の初期値をセットすることができます。 |
演算項目1は、演算項目2にレコード様式名が入っている場合を除いて、ブランクでなければなりません。演算項目2にレコード様式名が入っている場合は、演算項目1に *NOKEYを入れて、キー・フィールド以外のすべてのフィールドをそれぞれの初期値にリセットするように指定することができます。 |
演算項目2には、ゼロ、ブランク、または'0'にセットされた構造あるいは変数を指定します。
- レコード様式名
- データ構造名
- 配列名
- テーブル名
- フィールド名
- サブフィールド
- 配列要素
- 標識名
のいずれかを入れることができます。 |
CLEAR命令・RESET
命令がレコード様式名に適用される場合、そのレコード様式の出力フィールドだけが影響を受けることに注意してください。つまり、WORKSTNファイル・レコード様式の場合、使用状況が出力または入出力であるフィールドだけが影響を受けることになります。フィールド条件付け標識はすべて、この命令により影響を受けます。DISK、SEQ、または PRINTER ファイル・レコード様式のフィールドは、そのレコード様式がプログラム内で出力される場合にのみ影響を受けます。入力専用フィールドは CLEAR
命令・RESET命令に影響されません。定義により、入力専用フィールドは次の入力操作で新しい値をとります。 |
初期設定の内容
初期設定のタイミングに注意しましょう。 RPGサイクルのフローチャート
*INIT
「AS/400 RPG/400 解説書 2.2.1 詳細な RPG/400 オブジェクト・プログラム・サイクル」より
- 大域データ構造の初期設定
- サブフィールドの初期設定
- 外部標識(U1- U8)
- ユーザー日付フィールド(UDATE、UYEAR、UMONTH、UDAY)のセットアップ
- ファイルのオープン
- すべてのデータ域データ構造、配列、およびテーブルのロード
- *ENTRY PLISTのPARMSステートメントの結果フィールドの演算項目1への転送
- 初期設定サブルーチン *INZSRの実行
- RESET命令のための構造と変数の記憶
実行例
これが一番分かりやすいかもしれません.
H 1 Y/ 1
I******************************************************
I* D E F I N E D A T A - S T R U C T U R E *
I******************************************************
IDS1 DS
I I 'X' 1 1 DS11
I 2 2 DS12
C******************************************************
C* M A I N - R O U T I N E
C******************************************************
C DS1 DSPLY : 1
C W1WRK DSPLY : 2
C* :
C CLEARDS1 :
C CLEARW1WRK :
C* :
C DS1 DSPLY : 3
C W1WRK DSPLY : 4
C* :
C RESETDS1 :
C RESETW1WRK :
C* :
C DS1 DSPLY : 5
C W1WRK DSPLY : 6
C* :
C MOVE *ON *INLR :
C RETRN :
C******************************************************
C* S U B - R O U T I N E
C******************************************************
C*----------------------------------------------------*
C *INZSR BEGSR :
C*----------------------------------------------------*
C Z-ADD111 W1WRK 30 :
C* :
C ENDSR :
|
実行結果です。
1) DSPLY X
2) DSPLY 111
ここで、DSのサブフィールドの初期設定が完了して、*INZSRも完了しています。RESET命令用にデータが保管されています。
3) DSPLY
4) DSPLY 0
CLEAR命令を実行したので、DS1もW1WRKも消去されました。
5) DSPLY X
6) DSPLY 111
ここで、RESET命令です。上記1のタイミングに戻りましたね。
2000-2-3
|