满足 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
不过有些问题:
- 一个会员可以有多张工作卡
- 职位卡片中可能会有评论
- 第73-80列可能有字符
- 在应该保留的 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 不会同时 运行。
在大多数情况下,无论如何它都是第一张牌。或者至少是第一张非评论卡。
我正在开发一个程序,需要从 JCL 成员中删除 JOB 卡。我在构建满足所有可能选项和配置的东西时遇到了很多麻烦。
下面是关于 JOB 声明的一个很好的指南: http://www.tutorialspoint.com/jcl/jcl_job_statement.htm
不过有些问题:
- 一个会员可以有多张工作卡
- 职位卡片中可能会有评论
- 第73-80列可能有字符
- 在应该保留的 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 不会同时 运行。
在大多数情况下,无论如何它都是第一张牌。或者至少是第一张非评论卡。