On 18-May-2017 15:27 -0600, Gerald Magnuson wrote:
I am trying to get my group job to spawn....
my RPGLE program does:
 //  Commnd = CALL XYZ9CL PARM('     ' '  ' X'000F' X'00000F')
 Commnd = %xlate(AP:QUOTE:Commnd)  ;
 // turn the single quotes to double quotes....
  The terms "single quotes" and "double quotes", esp. in conjunction, 
are ambiguous, at best.  FWiW, the terms Apostrophe and Quotation Mark 
are well-defined for describing [and probably more universally 
understood to be], respectively, the parenthetical characters that follow:
    (') and (")
  If the entity named AP represents the Apostrophe (') character and 
the entity named QUOTE represents the Quotation Mark character, then 
understand that the Control Language requires the former [i.e. the 
apostrophe], as the character string delimiter.
 cmmnd = 'CHGDTAARA DTAARA(*GDA) VALUE(' + AP +
              %trim(Commnd) + AP + ')' ;
 #ExcCmd(%trim(cmmnd)
        :%Len(%Trim(cmmnd)))  ;
so when I get to my CL program that reads the *GDA, it doesn't like
the double quotes......
  If "double quotes" refers to the quotation mark (") character, then, 
indeed, the CL interpreter will "not like" the use of an unsupported 
character string delimiter.
and I can't find a way to %xlate the quotes in CLLE...
  For OPM, there has long been the Convert Data (QDCXLATE) API program; 
requires an external Table (*TBL) object however.  For ILE CL there is 
the xlatewt from the QC2UTIL1 Service program (SRVPGM) that can pass the 
"table" as a string; e.g. the following source shows both:
  dcl &rcv *char  11
  dcl &src *char  11  value('O''Donovan''s')
  /* Note: Following string can be used to CRTTBL APOSTROPHE */
  dcl &tbl *char 256  value(x'+
  000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F+
  202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F+
  404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F+
  606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7F7E7F+
  808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F+
  A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF+
  C0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF+
  E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF+
  ')
  dcl &lenDec *dec (5 0) 11
  ile: callprc prc('xlatewt') parm((&rcv) (&src) (&tbl))
       dmpclpgm
       dspsplf qppgmdmp splnbr(*last) /* &rcv=O"Donovan"s */
       chgvar &src    value('O''Donovan''s')
  opm: call QDCXLATE (&lenDec &src 'APOSTROPHE')
       dmpclpgm
       dspsplf qppgmdmp splnbr(*last) /* &src=O"Donovan"s */
it seems like I am doing it wrong in the RPG turning the single
quotes to double quotes?
any ideas???
  The likely intent, as I infer, is to "escape" the apostrophe 
characters with an apostrophe; i.e. to "double" the apostrophes.  The 
"translate character" features will simply replace one character with 
another; i.e. no capability for doubling specific characters.
  If so, then perhaps the following could illuminate:
 d Commnd          s             52a   varying
 d CmdXlate        s             52a   varying
 d CmdScanRpl      s             52a   varying
 d Cmmnd           s            100a   varying
 d CmmndPtr        s               *   inz(%addr(Cmmnd))
 d CmmndStruc      DS                  based(CmmndPtr)
 d   Cmmnd0                       5i00
 d   Cmmnd1                      50a
 d   Cmmnd2                      50a
 d pos             s              5u00
 d AP              C                   ''''
 d AP2             C                   ''''''
 d QUOTE           C                   '"'
 D #ExcCmd         pr                  extpgm('QCMDEXC')
 D  theCmd                     2000    const
 D  theCmdLen                    15p05 const
  /free
    dsply 'Starting a new iteration of test' ;
    // set original cmdStr
    Commnd = '?CALL X9CL (''     '' ''  '' X''000F'' X''00000F'')' ;
   //Eval Commnd = CALL X9CL ('     ' '  ' X'000F' X'00000F')
    dsply Commnd ;
    // CmdRqs to set _original_      cmdStr into *LDA
    cmmnd = '?CHGDTAARA DTAARA(*LDA) VALUE(' + AP +
                 %trim( Commnd     ) + AP + ')' ;
    dsply Cmmnd1 ;
    dsply Cmmnd2 ;
    Monitor ;  // ignore any errors; request will fail!
    #ExcCmd(cmmnd:%len(cmmnd)) ;
    on-error ; // show joblog with cpd0020 and cpf0001
      #ExcCmd('dspjoblog':9) ;
    EndMon ;
    // turn the single quotes to double quotes....
    CmdXlate = %xlate(AP:QUOTE:Commnd)  ;
    dsply CmdXlate ;
    // CmdRqs to set _translated_    cmdStr into *LDA
    cmmnd = '?CHGDTAARA DTAARA(*LDA) VALUE(' + AP +
                 %trim( CmdXlate   ) + AP + ')' ;
    dsply Cmmnd1 ;
    dsply Cmmnd2 ;
    #ExcCmd(cmmnd:%len(cmmnd)) ; // issue ChgDtaAra
    #ExcCmd(   'dspdtaara *lda'  // issue DspDtaAra
         :%Len('dspdtaara *lda' ) ) ;
    // Escape the apostrophes; rpl each apost w/ two
    CmdScanRpl = %scanrpl(AP:AP2:Commnd) ;
    dsply CmdScanRpl ;
    // CmdRqs to set _scan+replaced_ cmdStr into *LDA
    cmmnd = '?CHGDTAARA DTAARA(*LDA) VALUE(' + AP +
                 %trim( CmdScanRpl ) + AP + ')' ;
    dsply Cmmnd1 ;
    dsply Cmmnd2 ;
    #ExcCmd(cmmnd:%Len(cmmnd))  ; // issue ChgDtaAra
    #ExcCmd(   'dspdtaara *lda'   // issue DspDtaAra
         :%Len('dspdtaara *lda' ) ) ;
    *inlr = *on ;
  /end-free
As an Amazon Associate we earn from qualifying purchases.