如何组合两个文件并在COBOL中创建具有匹配字段的报表

时间:2009-04-23 07:45:19

标签: cobol

我有两个文件: 第一个文件包含作业名称和开始时间,如下所示:

ZPUDA13V STARTED - TIME=00.13.30
ZPUDM00V STARTED - TIME=03.26.54
ZPUDM01V STARTED - TIME=03.26.54
ZPUDM02V STARTED - TIME=03.26.54
ZPUDM03V STARTED - TIME=03.26.56

,第二个文件包含jobname和Endtime,如下所示:

ZPUDA13V ENDED - TIME=00.13.37
ZPUDM00V ENDED - TIME=03.27.38
ZPUDM01V ENDED - TIME=03.27.34
ZPUDM02V ENDED - TIME=03.27.29
ZPUDM03V ENDED - TIME=03.27.27

现在我正在尝试将这两个文件组合起来以获取报告,例如JOBNAME START TIME ENDTIME。我已经使用ICETOOL来获取报告如果我得到JOBNAME START TIME,则ENDTIME是SPACES。如果我得到Endtime,则JOBNAME START TIME获得空间。 请告诉我如何对outrec字段进行编码,因为我已经编码了几乎所有可能的字段以获得所需的字段。但是我的输出仍然与我的要求不一样

2 个答案:

答案 0 :(得分:2)

我不知道ICETOOL是什么(也不想在Google中查找它:-)但这是一个经典的COBOL数据处理任务。

根据您的简单数据输入,算法将是:

for every record S in startfile:
    for every record E in endfile:
        if S.jobnname = E.jobname:
            ouput S.jobname S.time E.time
            next S
        endif
    endfor
endfor

但是,您可能需要考虑以下事实:

  • 同一个多个同名作业可能在白天运行(文件中有多个条目)。
  • 同名的多个作业可以同时运行。

通过确保E记录紧跟在S记录之后(基于时间),您可以解决第一个问题。第二个问题是doozy。

如果您在z / OS上运行(考虑到作业名称,您可能正在运行),您是否考虑过使用SMF记录中的信息来进行此收集和分析。我很确定SMF 30型记录可以保存您需要的所有内容。

假设这个一个大型机的问题,这里有一本无耻的插件,我的一位朋友写了一本书,请查看David Stephens撰写的What On Earth is a Mainframe?(ISBN-13 = 978) -1409225355)。

答案 1 :(得分:0)

我知道,我的解决方案太迟了,但可能对新来的堆栈溢出有帮助

您可以使用JCL使用JOINKEYS DFSORT

JOINKEYS F1 FIELDS=(01,08,CH,A)
JOINKEYS F2 FIELDS=(01,08,CH,A)
REFORMAT FIELDS=(F1:01,33,F2:25,08)
SORT FIELDS=COPY
OUTREC FIELDS=(01,08,25,08,34,08)

outrec将根据您的需要保存数据!