在z / OS下,我想写一个REXX或CLIST脚本将一个顺序数据集复制到另一个,然后运行另一个脚本(REXX)。另一个脚本需要存在特定的SDS,我希望能够在运行第二个脚本之前将许多选项之一复制到该成员。这是来自TSO所以我无法访问任何花哨的ISPF内容。
所以,基本上:
Copy 'level1.level2.name.type1' to 'level1.level2.name'
runother p1 p2 p3
runother
Rexx脚本使用'level1.level2.name'来做自己的魔术 - 我只是为我的每一种可能性提供一个不同的。
所以我需要一个名为'xx42'的脚本,它复制'level1.level2.name.42'然后我可以修改那个除了42以外的值。更好的是参数化那个脚本所以我可以使用
xx 42 p1 p2 p3
或
xx 27 p1 p2 p3
而不是为每个值都有一个脚本。这将复制给定的SDS,然后将参数p1
,p2
和p3
传递给runother
。
答案 0 :(得分:2)
在搜索其他内容时,我发现了这篇文章。 (即我没有花2年的时间来制定这个回应)并且认为未来的主要人(我们还存在吗?)可能会觉得它很有用。
你也可以做一个SMCOPY:
address TSO "SMCOPY FDS('LEVEL1.LEVEL2.NAME.42') TDS('LEVEL2.LEVEL2.NAME')"
FDS - 从数据集,TDS到数据集。如果TDS不存在,您将获得返回码4,但副本将被执行。您也可以使用SMCOPY复制库成员。
答案 1 :(得分:1)
经过一番摆弄后,我发现你可以手动分配所需的数据集并运行IEBGENER
进行复制:
/* REXX */
"ALLOC FI(SYSPRINT) DUMMY REUSE"
"ALLOC FI(SYSIN) DUMMY REUSE"
"ALLOC FI(SYSUT1) DA('LEVEL1.LEVEL2.NAME.42') SHR REUSE"
"ALLOC FI(SYSUT2) DA('LEVEL1.LEVEL2.NAME') SHR REUSE"
"IEBGENER"
RC2 = RC
"FREE FI(SYSUT1)"
"FREE FI(SYSUT2)"
"FREE FI(SYSPRINT)"
"FREE FI(SYSIN)"
IF RC2 ^= 0 THEN DO
SAY "IEBGENER FAILED."
END
ELSE DO
RUNOTHER P1 P2 P3
END
答案 2 :(得分:0)
您也可以使用SORT从SORTIN到SORTOUT进行复制。您可以使用参数将proc包装在proc中,或使用SET语句等