【问题标题】:Using Rexx to find members in a PDS matching a given string使用 Rexx 在 PDS 中查找与给定字符串匹配的成员
【发布时间】: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)?

标签: mainframe rexx


【解决方案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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-07
        • 2011-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-08
        • 1970-01-01
        相关资源
        最近更新 更多