CL

155. フィールドの多重定義をするDEFINED

RPGのデータ構造定義で

   D*( WORK 日付 YYMMDD データ 構造  )     
   D DATEDS          DS                  
   D  SRY                    1      2  0 
   D  SRYMD                  1      8  0 
   D  YYMMDD                 3      8  0 
   D  YYMM                   3      6  0 
   D  MMDD                   5      8  0 
   D  YY                     3      4  0 
   D  MM                     5      6  0 
   D  DD                     7      8  0 

のようなデータ・ストラクチャーは良く知られている。
これは

   Z-ADD UDATE     YYMMDD

のようにすると YY には年が入り、MMには月が入り
DD にも同時に日付が入るという定業の方法である。
これと同じような定義をCLPでも定義することができる。

0001.00              PGM                                                      
0002.00              DCL        VAR(&DATEDS) TYPE(*CHAR) LEN(8)               
0003.00              DCL        VAR(&YY) TYPE(*CHAR) STG(*DEFINED) LEN(2) +   
0004.00                           DEFVAR(&DATEDS 3)                           
0005.00              DCL        VAR(&MM) TYPE(*CHAR) STG(*DEFINED) LEN(2) +   
0006.00                           DEFVAR(&DATEDS 5)                           
0007.00              DCL        VAR(&DD) TYPE(*CHAR) STG(*DEFINED) LEN(2) +   
0008.00                           DEFVAR(&DATEDS 7)                           
0009.00              ENDPGM                                                   

[解説]

8桁の日付の変数 &DATEDS に対して
年 &YYと月 &MM と日 &DD をデータメストラクチャーと同じように
多重で定義することができる。

   CHGVAR &YY %SST(%DATEDS 3 2)

のような演算は不要である。
覚えておくと便利な方法である。
_