如何批量运行 ISPF 编辑宏

Posted

技术标签:

【中文标题】如何批量运行 ISPF 编辑宏【英文标题】:How can I run ISPF Edit Macros in Batch 【发布时间】:2016-08-13 11:53:53 【问题描述】:

我经常编写和使用 ISPF 编辑宏。但是,在前台调用它们非常耗时。我可以使用 Rexx 程序通过批处理对 PDS 的所有成员或部分成员运行编辑宏吗?

【问题讨论】:

你是在回答自己的问题吗,迈克? ;) 大卫,是的。显然这样做是可以的,因为这是体贴的帮助他人,本着 SO 的精神。 【参考方案1】:

您可以使用图书馆管理功能。

您使用 LMINIT 为要编辑的数据集获取 DATA ID,然后使用 LMOPEN打开数据集的函数。

如果要对 PDS 或 PDSE 的一个或多个成员执行宏,则可以使用 LMMLIST。 然后您可以使用 EDIT 函数指定要使用/调用的宏,应该有一个 ISREDIT ENDISREDIT CANCEL。 如果使用了 LMMLIST,则应使用带有 OPTION(FREE) 的 LMMLIST 释放列表 然后应使用 LMCLOSE 关闭数据集。 然后应该使用 LMFREE 来释放 DATA ID

上述内容可以用各种编程语言完成,尽管 REXX 可能是最简单的。

【讨论】:

【参考方案2】:

这是一个编辑宏,它将针对 PDS 的所有成员运行另一个宏:

/*REXX - Edit macro to invoke the same macro against all members    */
/*       in the data set being edited.                              */
/*       Syntax:                                                    */
/*          ALLMEM macro prefix                                     */
/*             macro is the name of a macro to execute.  If it      */
/*                   is a program macro, remember to specify the    */
/*                   exclamation point before the name.             */
/*                                                                  */
/*             prefix is an optional prefix to use when selecting   */
/*                    members to process.  for example, ISR will    */
/*                    process all members starting with ISR.        */
/*                                                                  */
/*       Note that the macro which this calls can have an           */
/*       ISREDIT END or ISREDIT CANCEL in it to avoid the display   */
/*------------------------------------------------------------------*/
Address 'ISPEXEC'
'ISREDIT MACRO (WORKMAC,PREFIX)'
'ISREDIT (DATA1) = DATAID'
'ISREDIT (THISONE) = MEMBER '
Address 'ISPEXEC' 'LMOPEN DATAID('data1') OPTION(INPUT)'
parse upper var prefix prefix .
member1=''
Do Until lmrc\=0
  Address 'ISPEXEC' 'LMMLIST DATAID('data1') OPTION(LIST)',
                    'MEMBER(MEMBER1) STATS(YES)'
  lmrc = rc
  If lmrc = 0           ,/* if member name returned                 */
    & member1\=thisone  ,/* and it isn't this member                */
    & (                 ,/* and prefix check is ok...               */
        prefix=''       ,/*    No prefix specified                  */
        | substr(member1,1,length(prefix))=prefix,/* or prefix match*/
      ) Then
    Do                   /* invoke edit with specified initial macro*/
      Address 'ISPEXEC' 'CONTROL ERRORS CANCEL'
      Address 'ISPEXEC' 'EDIT DATAID('data1')',
              'MEMBER('member1') MACRO('workmac')'
      Address 'ISPEXEC' 'CONTROL ERRORS CANCEL'
    End
End
Address 'ISPEXEC' 'LMMLIST DATAID('data1') OPTION(FREE)'
Address 'ISPEXEC' 'LMCLOSE DATAID('data1')'
'ISREDIT DEFINE 'workmac' MACRO CMD'
 If prefix=''                              ,/* No prefix specified */
    | substr(thisone,1,length(prefix))=prefix,   /* or prefix match*/
   then
     'ISREDIT 'workmac           /* perform macro for this member  */

它用于在 ISPF 视图或编辑下使用,但可以批量工作,但您也可以关闭它并在它针对所有 PDS 运行宏时坐下来,让您不必在其上运行它每个成员手动。

【讨论】:

以上是关于如何批量运行 ISPF 编辑宏的主要内容,如果未能解决你的问题,请参考以下文章

如何使用wps宏进行大批量物流跟踪

使用 ISPF Edit via TN3270 编辑文件时如何插入字符?

从 rexx 代码向 ispf 宏传递参数时出现无效长度错误

tso ispf“查看保存终止”如何更改默认

如何有条件地 %include 一个定义宏的 *.sas 文件?

将多套图片批量分别插入对应的word中