0

PDS のすべてのメンバーの文字列を変更するマクロを作成しました。JCL を介して PDS、既存の値、および新しい値を渡しています。rexx を使用して ispf マクロに引数を渡すときに、無効な長さのエラーが発生します。エラー:

ISPS108 Invalid length    -/-Parameter 'PARM' exceeds the allowable length.

私のREXXコード - IWPURDXは:

TRACE "ALL"                                                         
ARG PDS STRING1 STRING2 .                                           
MAC  = 'TEMPMAC'                               /* Macro name        
*/                                                                  
PDS = STRIP(PDS,"B","'")                                            
STRING1 = STRIP(STRING1,"B","'")                                    
STRING2 = STRIP(STRING2,"B","'")                                    
S12 = STRING1 || " " || STRING2                                     
SAY "STRING1" STRING1                                               
SAY "STRING2" STRING2                                               
SAY "S12" S12                                                       
SAY "LENGTH" LENGTH("S12")                                          
X = OUTTRAP("LIBMEM.")                         /* Trap output of TSO
*/                                                                  
 ADDRESS TSO "LISTDS '"PDS"' M"                                     
 X = OUTTRAP("OFF")                                           

DO I = 7 TO LIBMEM.0                                         
  LIBMEM.I = STRIP(LIBMEM.I)                   /* Member name
*/                                                           
  ADDRESS ISPEXEC "EDIT DATASET ('"PDS"("LIBMEM.I")') " ||,  
    "MACRO ("MAC") PARM ("S12")"                             
  SAY I RC LIBMEM.I                                          
END

ISPF マクロ - TEMPMAC は次のとおりです。

 /*REXX*/                                       
 TRACE "ALL"                                    
SAY "TEMPMAC"                                   
ADDRESS ISREDIT "MACRO (PARM) PROCESS"          
PARSE VAR PARM STRING1 STRING2                  
ADDRESS ISREDIT "CHANGE ALL 'STRING1' 'STRING2'"
C_RC = RC                                       
ADDRESS ISREDIT "END"                           
EXIT C_RC                                       

JCL では、以下の ISPF コマンドを使用してそれらを呼び出しています。

//REXX  EXEC PGM=IKJEFT01,REGION=32M                               
//SYSPRINT DD  SYSOUT=*                                            
//SYSTSIN  DD  *                                                   
  ISPSTART CMD(%IWUPDRX 'PPPRG3.BASE.WRJCL' '2016-01-01' 'IWPULDT')
/*                                                                 

また、長さを出力したので、文字列がマクロに渡されました - 3 と表示されています。エラーの根本原因を取得できません。誰か助けてくれませんか?

4

3 に答える 3

0

ここで行った方法でパラメーターを渡すのは悪い考えです。それらを呼び出し元の exec 内の変数プールに VPUT し、マクロ内で VGET する方がよいでしょう。

この場合、STRING1 と STRING2 の値は単一のトークン/単語でなければなりませんが (exec の ARG ステートメントによってそのように作成されたため)、vput/vget アプローチを使用すると、任意の文字列をマクロに渡すことができます。それらを単一の変数に連結し、それをマクロで別々に解析しても意味がありません.vputとvgetの両方です.

マクロを使用すると、string1 と string2 の実際の値によっては、'isredit change' コマンドが機能しない場合があります。たとえば、変更コマンドの有効なパラメーターでもある FIRST LAST などの単語が含まれていると想像してみてください。

やったことある

hexstring1 = c2x(string1)
hexstring2 = c2x(string2)
"address isredit change x'"hexstring1"' '"hexstring2"' all"

そのようなマクロでは、文字列の内容が何であるかは完全に無関係です。

于 2017-10-21T12:11:00.220 に答える