使用 Rexx 在 PDS 中查找与给定字符串匹配的成员
Posted
技术标签:
【中文标题】使用 Rexx 在 PDS 中查找与给定字符串匹配的成员【英文标题】:Using Rexx to find members in a PDS matching a given string 【发布时间】:2021-10-25 09:04:57 【问题描述】:我正在寻求有关我的 REXX 脚本的帮助。这应该打开一个现有的成员并搜索特定的字符串。
这是我的脚本:
/* REXX */
"ALLOC FILE(input) DA('.....(MEMBER)') SHR REUSE"
"EXECIO * DISKR "input" (STEM input. FINIS"
"FREE FILE(input)"
/* Parmlib werden ausgelesen */
do i =1 to input.0
if POS('met,', input.i) > 0 Then
/* Code if string is found */
say Zeile gefunden
else
/* Code if string is not found */
say Zeile nicht gefunden
end
【问题讨论】:
程序工作需要什么帮助?我看不出有什么明显的问题。试着把输入行写出来,把更多的say ...
放进去
@BruceMartin 很明显,我不需要输出中字符串的位置。我需要输出中的整个搜索字符串。我正在尝试的是,了解如何在大成员中搜索特定字符串,然后将这些字符串写入新成员中。目标是制作一个 rexx 脚本,该脚本将检查这些字符串是否在这里并给出这些字符串的输出
@firedotwater 毫无疑问,没有什么是显而易见的!你是在寻求帮助,那么请礼貌地问一个问题。不要让我们猜测您可能想要什么。
请显示您希望匹配的 o 输出看起来像什么。举个例子。
您是否有理由编写代码而不是使用 ISRSUPC (ISPF 3.14)?
【参考方案1】:
正如 cschneid 所说,这看起来像是你只会使用 SuperC 的东西。 ISPF 选项 3.14 或 3.15 将搜索字符串并显示结果。您也可以从成员列表中发出 SRCHFOR,然后仅在成员列表中过滤找到的成员。此外,ISPF LM 服务可用于通过 PDS 的成员,然后运行编辑宏来进行查找。 EXEXIO 可用于将结果写入输出文件。请注意,SuperC 已经使用 3.15 执行此操作
【讨论】:
【参考方案2】:在 ISPF 下,编辑宏似乎很合适。如果您还没有运行 ISPF 堆栈,您可以设置一个堆栈,也可以批量运行。
如果我正确阅读了您的要求,也许这样的事情可能会起作用:
/* REXX-ISPF V/E macro */
Address ISREDIT
"MACRO (needle,dest)"
"CURSOR = 1 0"
lastHit = 0
i = 0
"SEEK "needle
Do While RC=0
"(l#) = CURSOR"
/* Conditional for multiple hits on same line */
If l# > lastHit Then Do /* do */
"(this) = LINE "l#
i=i+1; out.i = this
lastHit = l#
End
"SEEK "needle
End
out.0=i
Address TSO
"ALLOCATE F(OUT) DA("dest"') OLD"
"EXECIO "out.0" DISKW OUT (FINIS STEM out."
Exit 0
您可以在宏 (X ALL
-> F ALL needle
-> DEL ALL X
-> CREATE dest
) 中使用更少的行和更多的 ISPF 服务来做到这一点。或者通过间歇性使用 ISPF E 剪贴板。这有一些风险,所以不要讨论。
关于 ISPF E/V 宏的好处是您使用的命令与您通常在 ISPF E/V 中使用的命令几乎相同。查找速度很快。它需要适应区域中的整个数据集,这有时可能是个问题。
【讨论】:
【参考方案3】:您也可以从 Rexx 调用 ISRSUPC。很久以前在 MVS 更新中发布了一个漂亮的 Rexx 执行程序。它在 PDS 的所有成员中搜索字符串,并在 ISPF 面板上显示“命中列表”,因此您可以编辑或查看成员。
我仍然在我的系统上使用它(无论如何它的后代)。我找到了 MVS 更新文章,在这里:
https://manualzz.com/doc/10913425/mvs0207
【讨论】:
以上是关于使用 Rexx 在 PDS 中查找与给定字符串匹配的成员的主要内容,如果未能解决你的问题,请参考以下文章
从 rexx 代码向 ispf 宏传递参数时出现无效长度错误
我可以使用 Rexx 在 zos 中读取数据集的分配参数吗?