JCL - 获取给定区域(大型机)中非空格字符的计数

Posted

技术标签:

【中文标题】JCL - 获取给定区域(大型机)中非空格字符的计数【英文标题】:JCL - Get count of non space chars in a given area (mainframe) 【发布时间】:2012-06-18 01:28:09 【问题描述】:

我需要准备一些输入数据来运行一个程序,数据应该是以下格式。

 UID (1-11)|TxtLen (12-16)| Text (17-62)

我可以使用排序来正确定位字段并获取 UID 和文本字段。 “TxtLen”应包含从文本字段开头到文本字段中最后一个字符的字符数。

i.e. “Hello”’s TxtLen is 5, “Hel lo”’s TxtLen is 6, “Hello World”’s TxtLen is 11, etc...

我想知道是否有办法仅通过 JCL 获取 TxtLen,或者是否需要一个程序来执行此操作?

-谢谢

【问题讨论】:

你想要记录字符还是两个位置之间的字符数? 您需要大约 45 条 IFTHEN=(WHEN=(logexp 语句,但它们会非常相似。所以,是的,您可以使用 Sort 完成全部操作。 【参考方案1】:

你需要一个程序。

我在 Stack Overflow 上看到相当多的大型机问题,询问“仅 JCL”是否可行。请记住,JCL 主要是一种执行程序的方法,实际上除此之外几乎没有什么作用。例如,当你说

我可以使用 sort 来正确定位字段并获取 UID 和 文本字段

sort 是一个程序。它恰好是在大多数系统上都可以找到的程序(尽管有不同供应商的实现,IBM 有一个,SyncSort 有一个,CA 有一个,等等)在大型机系统上常见有plenty of other programs。

为了迂腐,JCL 实际上并没有做任何事情,JES 在解释 JCL 时完成了工作。

对于您的特定情况,您可以创建一个 SORT 出口,或在 Rexx 中处理您的数据,或者您可以使用一些 Unix System Services commands 并通过 BPXBATCH 或 COZBATCH 执行这些。

【讨论】:

同意,如果你想在 JCL 中使用它,这通常意味着你需要在不重新打包编译代码的情况下对其进行调整。因此使用 REXX 或 Eztrieve 或更高级别的实用程序。【参考方案2】:

我使用 REXX 程序完成了类似的临时转换。该程序非常简单:

分配输入和输出文件 打开两个文件 开始循环: 读取输入 提取文本字段并去除尾随空格 获取修剪后文本字段的长度和格式为 5 位数字 在 Len 字段位置中将叠加数字重新写入记录 写出更新的记录 重复循环直到文件结束 关闭这两个文件 释放分配的文件

如果您需要一些实际代码,请告诉我。我发现 REXX 在字符串函数和操作方面优于 COBOL。我什至从 COBOL 创建并调用了 REXX 例程来完成此任务。

【讨论】:

以上是关于JCL - 获取给定区域(大型机)中非空格字符的计数的主要内容,如果未能解决你的问题,请参考以下文章

如何自动化 jcl 在大型机上运行 cobol 程序

创建分区数据集的 JCL 错误

jcl 查找给定 n 个数据集的整体大小

MAINFRAME:在 JCL 中排序以将数据集转换为 CSV 格式

使用 FTP 和 C# 启动现有大型机作业

Oracle SQL 查询:按空格分割字符串并获取第 n 个字符串