新規投稿 記事一覧 ホーム
●ご利用方法,ご利用に際しての規約はこちらをお読みください。
こちらからの投稿は、先頭に表示されているコメントへの返信になります。
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アドレス
タイトル
ホームページ
アドレス