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 脚本

我可以使用 Rexx 在 zos 中读取数据集的分配参数吗?

如何批量运行 ISPF 编辑宏