CLEAR の例

図 271. CLEAR 命令
  *..1....+....2....+....3....+....4....+....5....+....6....+....7...+....
D*Name++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++
D DS1             DS
D  Num                    2      5  0
D  Char                  20     30A
D
D MODS            DS                  OCCURS(2)
D  Fld1                   1      5
D  Fld2                   6     10  0

 *  In the following example, CLEAR sets all subfields in the data
 *  structure DS1 to their defaults, CHAR to blank, NUM to zero.
 /FREE
   CLEAR DS1;
 
  //  In the following example, CLEAR sets all occurrences for the
  //  multiple occurrence data structure MODS to their default values
  //  Fld1 to blank, Fld2 to zero.
   CLEAR *ALL MODS;
 /END-FREE
図 272. CLEAR レコード様式のフィールドの初期化
  *..1....+....2....+....3....+....4....+....5....+....6....+....7...+....
A* Field2 および Field3 は出力可能フィールドとして定義され
A* ていて、CLEAR 命令による影響を受けます。また、標識 10
A* は、入力専用フィールドの条件付けを行っている場合にも、
A* CLEAR 命令で変更することができます。これは、CLEAR 命令で
A* *ALL が指定されていないため、すべての標識が出力フィールド
A* として取り扱われるためです。
A*
A*N01N02N03T.Name++++++RLen++TDpBLinPosFunctions++++++++++++++++++++*
A          R FMT01
A  10        Field1        10A  I  2 30
A            Field2        10A  O  3 30
A            Field3        10A  B  4 30
A*
A*  DDS ソース・ステートメントの終わり
A*

F*Flename++IPEASFRlen+LKlen+AIDevice+.Keywords+++++++++++++++++++++++++
FWORKSTN   CF   E             WORKSTN INCLUDE(FMT01)
F
D*Name++++++++++ETDsFrom+++To/L+++IDc.Keywords++++++++++++++++++++++++
D IN              C                   'INPUT DATA'

 /FREE
         CLEAR FMT01;
         WRITE FMT01;
 
   // PF03 が押されるまでループします。
   DOW NOT *IN03;
      READ FMT01;
      *INLR = %EOF;
 
      // PF04 で入力フィールドが出力フィールドに転送されます。
      IF *IN04;
         Field2 = Field3;
         Field3 = Field1;
         CLEAR *IN04;
      ENDIF;
      Field1 = IN;
 
      // PF11 が押されると、出力または両方と定義された
      //レコード様式のすべてのフィールドが、初期化ステップ後の
      //値にリセットされます。
      IF *IN11;
         RESET FMT01;
         CLEAR *IN11;
      ENDIF;
 
      // PF12 が押されると、出力または両方と定義された
      // レコード様式のすべてのフィールドが消去されます。
      IF *IN12;
         CLEAR FMT01;
         CLEAR *IN12;
      ENDIF;
 
      IF NOT *IN03;
         WRITE FMT01;
      ENDIF;
   ENDDO;
 
   *INLR = *ON;
 /END-FREE