bp8*_*p89 0 mainframe jcl rexx ispf
我写了一个宏来改变字符串PDS的所有成员.我通过JCL传递PDS,现有价值和新价值.我使用rexx将参数传递给ispf宏时出现无效长度错误.错误是:
ISPS108 Invalid length -/-Parameter 'PARM' exceeds the allowable length.
Run Code Online (Sandbox Code Playgroud)
我的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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
在JCL中,我通过以下ISPF命令调用它们:
//REXX EXEC PGM=IKJEFT01,REGION=32M
//SYSPRINT DD SYSOUT=*
//SYSTSIN DD *
ISPSTART CMD(%IWUPDRX 'PPPRG3.BASE.WRJCL' '2016-01-01' 'IWPULDT')
/*
Run Code Online (Sandbox Code Playgroud)
我还打印了长度,所以字符串传递给宏 - 它说3.我无法得到错误的根本原因.有人可以帮忙吗?
认为您的编辑PARM正在等待变量名称,而不是值.
ADDRESS ISPEXEC "EDIT DATASET ('"PDS"("LIBMEM.I")') " ||,
"MACRO ("MAC") PARM ("S12")"
Run Code Online (Sandbox Code Playgroud)
所以,试图取代"... PARM ("S12")"与"... PARM (S12)"