最初のページに戻ります。

総合の目次があるページに戻ります。

よく使うマニュアルです

Wiki

updated on 2004.06.23

5.12.取り出しコマンドの作り方

[ Previous ] [ HOME ] [ Upper ] [ Next ]


たとえば、あるファイルの情報を取り出して、それをコマンドに戻したい、と思ったことはありませんか?

たとえば、RTVJOBAみたいに、いくつかのキーワードがあって、その中の一部に、&xxxxとすると、その変数フィールドにデータが戻るようなコマンドです。

割合簡単ですが、ちょっとしたコツがあります。

  • CPPは必ず、CLPでなくてはなりません。CLPからRPGを呼び出すことになります。
  • コマンド作成のときの実行環境を、CLP内のみ(*IPGM,*BPGM)にしないと、コンパイルできません(うろ覚えだけど)。
  • コマンドの取り出しキーワードでは当然ですが、RTNVAL(*YES)にします。
  • CPPとなるCLPでは、MCH3601をモニターします。モニターしてスキップした後のメッセージをRCVMSGで消します。
  • CRTCLPGMをするときは、LOGを*NOにします。(当然ですが、テスト中はロギングしてよい)

下にあるのはコマンドソースです。赤い文字に気をつけてください。プロンプト画面GIF

CMD        PROMPT('RETRIEVE DATE ATTRIBUTE')    
      PARM       KWD(DATE) TYPE(*CHAR) LEN(6) MIN(1) +
                          EXPR(*YES) PROMPT('DATE (6):')     
      PARM       KWD(WEEK) TYPE(*CHAR) LEN(1) RTNVAL(*YES) +
                            PROMPT('WEEK CODE (1):')             
      PARM       KWD(WEEKE) TYPE(*CHAR) LEN(3) RTNVAL(*YES) +
                              PROMPT('WEEK ENGLISH +
                          NAME (3):')     
      PARM       KWD(WEEKK) TYPE(*CHAR) LEN(4) RTNVAL(*YES) +
                              PROMPT('WEEK JAPANESE +
                          NAME (4):')       
      PARM       KWD(BSN) TYPE(*CHAR) LEN(1) RTNVAL(*YES) +
                              PROMPT('BUSINESS DATE +
                          OR NOT (1):')        
      PARM       KWD(STEN) TYPE(*CHAR) LEN(1) RTNVAL(*YES) +
                              PROMPT('FIRST BUSINESS +
                          DAY OR NOT (1):')            
      PARM       KWD(HOL) TYPE(*CHAR) LEN(1) RTNVAL(*YES) +
                              PROMPT('HOLYDAY (1):')             
      PARM       KWD(JUL) TYPE(*CHAR) LEN(3) RTNVAL(*YES) +
                              PROMPT('JULIAN DATE (3):')             
      PARM       KWD(BDY) TYPE(*CHAR) LEN(2) RTNVAL(*YES) +
                              PROMPT('NUMBER OF BUSINESS DAYE (2):')    
      PARM       KWD(LDY) TYPE(*CHAR) LEN(2) RTNVAL(*YES) +
                              PROMPT('LAST DAY OF +
                          MONTH (2):')          
      PARM       KWD(STR) TYPE(*CHAR) LEN(2) RTNVAL(*YES) +
                              PROMPT('START BUSINESS +
                          DAY (2):')             
      PARM       KWD(END) TYPE(*CHAR) LEN(2) RTNVAL(*YES) +
                              PROMPT('END BUSINESS +
                          DAY (2):')            

下にCLPのサンプルを掲げます。

PGM  (&DATE &WEEK &WEEKE &WEEKK &BSN &STEN +
      &HOL  &JUL  &BDY &LDY &STR  &END)          
       DCL &DATE  *CHAR  6
       DCL &WEEK  *CHAR  1
       DCL &WEEKE *CHAR  3
       DCL &WEEKK *CHAR  4
       DCL &BSN   *CHAR  1
       DCL &STEN  *CHAR  1
       DCL &HOL   *CHAR  1
       DCL &JUL   *CHAR  3
       DCL &BDY   *CHAR  2
       DCL &LDY   *CHAR  2
       DCL &STR   *CHAR  2
       DCL &END   *CHAR  2           
       DCL &PARM  *CHAR  45
       DCL &PERR  *CHAR  1
       DCLF CALENDP          
     MONMSG CPF0000
     MONMSG MCH3600           
   CHGVAR  &ZZDATE    &DATE
           RCVMSG
   CHGVAR  &ZZWEEK    &WEEK
           RCVMSG
   CHGVAR  &ZZWEKA    &WEEKE
           RCVMSG
   CHGVAR  &ZZWEKK    &WEEKK
           RCVMSG
   CHGVAR  &ZZBSN     &BSN
           RCVMSG
   CHGVAR  &ZZSTEN    &STEN
           RCVMSG
   CHGVAR  &ZZHOL     &HOL
           RCVMSG
   CHGVAR  &ZZJUL     &JUL
           RCVMSG
   CHGVAR  &ZZBDY     &BDY
           RCVMSG
   CHGVAR  &ZZLDY     &LDY
           RCVMSG
   CHGVAR  &ZZSTR     &STR
           RCVMSG
   CHGVAR  &ZZEND     &END
           RCVMSG                                  
     IF (%SST(&ZZDATE 1 2)>='40') CHGVAR &ZZCEN '0'
        ELSE                      CHGVAR &ZZCEN '1'           
   CHGVAR &PARM (&ZZCEN||&ZZDATE||&ZZYY||&ZZMM||&ZZDD||+
   &ZZWEEK||&ZZWEKA||&ZZWEKK||&ZZBSN||&ZZSTEN||&ZZHOL||+
   &ZZJUL||&ZZBDY||&ZZLDY||&ZZSTR||&ZZEND||+
   &ZZFLG0||&ZZFLG1||&ZZFLG2||&ZZFLG3||&ZZFLG4||&ZZFLG5||+
   &ZZFLG6||&ZZFLG7||&ZZFLG8||&ZZFLG9)            
     CALL CALEN020 (&PARM &PERR)          
    IF (&PERR='E') +
         SNDPGMMSG  MSGID(CPF9898) MSGF(QCPFMSG) MSGDTA('DATE IS +
                    INVALID. NO DATA IS FOUND IN CALENDAR +
                     FILE "CALENDP"') MSGTYPE(*ESCAPE)             
       CHGVAR &WEEK   %SST(&PARM 14  1)
           RCVMSG
       CHGVAR &WEEKE  %SST(&PARM 15  3)
           RCVMSG
       CHGVAR &WEEKK  %SST(&PARM 18  4)
           RCVMSG
       CHGVAR &BSN    %SST(&PARM 22  1)
           RCVMSG
       CHGVAR &STEN   %SST(&PARM 23  1)
           RCVMSG
       CHGVAR &HOL    %SST(&PARM 24  1)
           RCVMSG
       CHGVAR &JUL    %SST(&PARM 25  3)
           RCVMSG
       CHGVAR &BDY    %SST(&PARM 28  2)
           RCVMSG
       CHGVAR &LDY    %SST(&PARM 30  2)
           RCVMSG
       CHGVAR &STR    %SST(&PARM 32  2)
           RCVMSG
       CHGVAR &END    %SST(&PARM 34  2)
           RCVMSG
              
  RETURN
  ENDPGM     

[ Previous ] [ HOME ] [ Upper ] [ Next ]

You are at K's tips-n-kicks of AS/400

 

SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送