REXX:将长字符串写入 pds 成员
Posted
技术标签:
【中文标题】REXX:将长字符串写入 pds 成员【英文标题】:REXX: writing long string to pds member 【发布时间】:2015-09-22 13:01:29 【问题描述】:我正在我大学的 z/OS(ADCD 版本)上编写 rexx 脚本。 我想用 diskw 向 pds 成员写一个很长的字符串。 遗憾的是,rexx 不会自动换行,因此只有大约一半的字符串会写入成员。我的字符串是我正在连接、执行并且我想写入日志的命令。
/*REXX*/
"ALLOCATE DATASET('"FILEPATH"') FILE(FILE) SHR REUSE"
command = "adduser" username
command = command || " TSO(ACCTNUM(ACCT) PROC(DBSPROC)",
"MAXSIZE(6072) SIZE(5000) MSGCLASS(H) UNIT(SYSALLDA))"
LOG.1 = command
LOG.2 = "Other Stuff"
"EXECIO" 2 "DISKW FILE (STEM LOG."
"EXECIO 0 DISKW FILE (FINIS"
"FREE FILE(FILE)"
现在创建的日志只包含我对某个角色的命令,而我的其余命令不会写入该成员。像这样:
adduser john TSO(ACCTNUM(ACCT) PROC(DBSPROC) MAXSIZE(6072) SIZE(5
你知道如何让 rexx 换行并写下我的整个命令吗?
【问题讨论】:
你在 rexx 中分解它。 Rexx 具有长度、子字符串和子字等函数,您可以使用它们来分解命令字符串 好的。谢谢,我希望有更方便的方法... 【参考方案1】:将日志文件定义为 recfm(v) lrecl(32100) block(32108) 或 (vb) 其中 lrecl 是预期的最大记录长度。
如下写:
推送命令
“EXECIO 1 磁盘文件”
推送“其他东西”
“EXECIO 1 磁盘文件”
【讨论】:
这导致与我的第一个方法相同的截断。但是谢谢你的想法【参考方案2】:您示例中的 ALLOCATE 用于现有数据集。如果您想创建一个具有更长行的新输出数据集(如 Joseph 建议的那样),它需要是一个不同的数据集,并且 ALLOCATE 需要更改为指向新文件而不是旧文件。
此外,尽管要求使用 RECFM(V) 或 VB 等文件,但可能不是系统实际创建的文件。在尝试使用它之前,您需要确保输出文件确实有很长的 LRECL。某些系统可能会覆盖您的要求并创建 80 字节的记录文件(使用所谓的 SMS 规则)。
【讨论】:
以上是关于REXX:将长字符串写入 pds 成员的主要内容,如果未能解决你的问题,请参考以下文章
只读 DB2 使用来自 REXX 中的 PDS(Dataset) 的成员并存储在 Stem 变量中以供进程相互使用
从 rexx 代码向 ispf 宏传递参数时出现无效长度错误
以编程方式更改 PDS 成员的 ISPF 统计信息中的用户 ID
将参数从 ISPF DSLIST 自动传递到 REXX 脚本