新規投稿 記事一覧 ホーム
●ご利用方法,ご利用に際しての規約はこちらをお読みください。
こちらからの投稿は、先頭に表示されているコメントへの返信になります。
CL呼び出しで複数桁のブランクをパラメータで渡す方法 菅沼 さん [ 9月12日(水) 10時19分 ]

    CALL PGM(PGMA) PARM('    ')
    CL(PGMA)の内容は以下
    PGM       PARM(&STRG)                                                     
              DCL        VAR(&STRG) TYPE(*CHAR) LEN(22)                                     
              CPYF       FROMFILE(FILEA) TOFILE(FILEB) +
                              MBROPT(*ADD) CRTFILE(*YES) INCCHAR(*RCD +
                              10 *EQ &STRG) FMTOPT(*NOCHK)
    ENDPGM
    結果的には &STRG はブランク1桁として扱われてしまうようです。
    複数桁のブランクとして渡すことはできないのでしょうか?     

    RE:CL呼び出しで複数桁のブランクをパラメータで渡す方法 IKD さん [ 9月12日(水) 14時25分 ]

      &STRG は正しく 22桁のブランク値として渡されていますが
      INCCHAR(*RCD 10 *EQ &STRG) に値が代入されると
      この式は

      INCCHAR(*RCD 10 *EQ            ) という式となってしまいます。
      これが CPYF によって1 桁のブランクと見なされてしまう原因となっています。
      引用符で囲む方法も正しく動作しませんでした。
      従って次のように条件分岐をするしか方法がなさそうです。

      0001.00              PGM        PARM(&STRG)                                   
      0002.00              DCL        VAR(&STRG) TYPE(*CHAR) LEN(22)                
      0003.00                                                                       
      0004.00              IF         COND(&STRG *EQ '  ') THEN(DO)                 
      0005.00              CPYF       FROMFILE(FILEA) TOFILE(FILEB) MBROPT(*ADD) +  
      0006.00                           CRTFILE(*YES) INCCHAR(*RCD 10 *EQ '  ') +   
      0007.00                           FMTOPT(*NOCHK)                              
      0008.00              ENDDO                                                    
      0009.00              ELSE       CMD(DO)                                       
      0010.00              CPYF       FROMFILE(FILEA) TOFILE(FILEB) MBROPT(*ADD) +  
      0011.00                           CRTFILE(*YES) INCCHAR(*RCD 10 *EQ &STRG) +  
      0012.00                           FMTOPT(*NOCHK)                              
      0013.00              ENDDO                                                    
      0014.00              ENDPGM        

      RE:CL呼び出しで複数桁のブランクをパラメータで渡す方法 菅沼 さん [ 9月12日(水) 16時58分 ]

        回答ありがとうございました。
        ブランクが一つの場合はこの方法で切り抜けられますね。
        ブランクが複数の場合や'ABC     'とかの場合面倒になりますね。
        (CPYFをブランクの回数繰り返すとか)
        対話式にCPYFを行う場合このようなことは問題にならないので何か方法は
        ありそうな気はしますが・・・

        RE:CL呼び出しで複数桁のブランクをパラメータで渡す方法 IKD さん [ 9月12日(水) 18時45分 ]

          根本的な解決をしようとすると、少し面度にはなりますが
          下記のように

          3つの文字列 : CPYF FROMFILE .... '  + &STRG + ') FMTOPT ...' を
          このようにして結合したものを API: QCMDEXC で実行させることです。
          この方法であれば &STRG にどのような値が入っていても正しく希望通りに
          動作します。


          0001.00              PGM        PARM(&STRG)                                  
          0002.00              DCL        VAR(&STRG) TYPE(*CHAR) LEN(22)               
          0003.00              DCL        VAR(&CMD) TYPE(*CHAR) LEN(512)               
          0004.00              DCL        VAR(&CMDLEN) TYPE(*DEC) LEN(15 5) VALUE(512) 
          0005.00                                                                      
          0006.00              CHGVAR     VAR(&CMD) VALUE('CPYF +                      
          0007.00                           FROMFILE(FILEA) +                          
          0008.00                           TOFILE(FILEB) MBROPT(*ADD) +               
          0009.00                           CRTFILE(*YES) INCCHAR(*RCD 10 *EQ ''' +    
          0010.00                           *CAT &STRG *CAT ''') FMTOPT(*NOCHK)')      
          0011.00              CALL       PGM(QCMDEXC) PARM(&CMD &CMDLEN)              
          0012.00              ENDPGM        

お名前
パスワード
e-mailアドレス
タイトル
ホームページ
アドレス