满足 JCL 中 JOB 卡所有有效选项的正则表达式是什么?

What is a regular expression that satisfies all valid options for a JOB card in JCL?

我正在开发一个程序,需要从 JCL 成员中删除 JOB 卡。我在构建满足所有可能选项和配置的东西时遇到了很多麻烦。

下面是关于 JOB 声明的一个很好的指南: http://www.tutorialspoint.com/jcl/jcl_job_statement.htm

不过有些问题:

  1. 一个会员可以有多张工作卡
  2. 职位卡片中可能会有评论
  3. 第73-80列可能有字符
  4. 在应该保留的 JOB 语句之后可能有一个 SYSAFF、SET 或类似语句,但可以像工作卡一样以斜杠和空格开头

如有任何帮助,我们将不胜感激。目前我有以下正则表达式:

//.*JOB.*\n(//\s{4,}[^\s]+(\s|\d)*\n)+

最终我只需要更改 JOB 名称以适应 FTP JES reader 的限制,这要求您的工作名称是提交 USERID 加上 JESINTERFACELEVEL 1 下的一个字符,即由我们的网站使用。仅更改作业名称也是可以接受的。

您将需要考虑两个位置参数——142 字节的记帐信息和 30 多字节的程序员姓名。此外,您还必须考虑可选的关键字参数:

ADDRSPC=   BYTES=     CARDS=      CLASS=      COND=    
GROUP=     LINES=     MEMLIMIT=   MSGCLASS=   MSGLEVEL=
NOTIFY=    PAGES=     PASSWORD=   PERFORM=    PRTY=    
RD=        REGION=    RESTART=    SECLABEL=   SCHENV=  
TIME=      TYPRUN=    USER=   

处理 SYSAFF 等 JES 命令和 SET 等其他 JCL 命令使其变得非常复杂。

您可能希望逐步处理它 -- 正则表达式处理“//”后跟最多 69 个字节并以逗号继续,但以“//*”开头的注释除外。

了解您要完成的目标可能会有所帮助。您可以要求 JES 为您处理 JCL,您可以通过宏、出口和控制块检查已解析的 JCL。

根据您对 Joe 回答的评论中的信息,您的任务变得更容易。

 //JJJJJAAA JOB other-stuff

如果第二个字是JOB,第一个字的前两个字是//,第三个字不是*,那么你就是一张JOB卡。删除第一个单词,将其替换为 //JJJJJx,其中 x 是您额外的单个字符。 JJJJJ代表用户id。

这确实假设现有 JOB 的用户 ID 将与新 JOB 的用户 ID 相同,在这种情况下,替换 JOB 名称不会导致 JOB 卡的扩展。

如果不是这种情况,如果原始 JOB 卡上的用户 ID 更短,或者实际上根本不是用户 ID 并且更短,无论是全部还是部分,那么我建议拆分第一个逗号后的 JOB 卡(如果存在)。

在极少数情况下,您只有很长的会计信息而没有其他信息,当上述情况成立时,这可能会导致 JCL 错误。如果是这样,请修复记帐信息或绕过用户 ID 限制。这是不太可能的情况:-)

如果没有会计信息但有很长的注释,这可能会导致 JCL 错误,因为不小心用数据命中了第 72 列(因此它会认为下一行是 Continuation)。即使这种情况不太可能发生,也要修复它。

这两个都不值得编码。它们值得验证,尽管最简单的方法是观察并在它们跌倒时捡起它们。

您还需要注意一件事,那就是您的任何步骤是使用 DD * 还是 DD DATA。如果他们这样做,那么您必须发现是否有任何用途 DLM=。如果他们这样做,您将必须在遇到 DLM= 时关闭对 JOB 卡的搜索,并在到达从第一列开始的分隔符值时再次打开它。

你的单一性格可能会给你带来麻烦。每个用户 ID 可能有有限数量的作业名称。除非允许,同名的 JOB 不会同时 运行。

在大多数情况下,无论如何它都是第一张牌。或者至少是第一张非评论卡。