首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用DFSORT在组中计数记录

使用DFSORT在组中计数记录
EN

Stack Overflow用户
提问于 2021-10-12 14:00:12
回答 1查看 686关注 0票数 1

我有包含JES2作业输出的文件。我正在练习使用DFSORT,以便在每个作业的基础上从文件中检索一些信息。

我想做的一件事是:

  • 第一行作业输出
  • 最后一行作业输出
  • 作业输出总数(每个作业)

在我的结果中,我设法得到了作业的总行(完整输出)、作业编号和总行数:

代码语言:javascript
复制
(1)    (2)    (3)
000001 000001 000001         (1) Total lines
000002 000001 000002         (2) Job number
000003 000001 000003         (3) Lines in job
000004 000001 000004
000005 000001 000005
000006 000001 000006
000007 000001 000007
000008 000001 000008
...
000953 000001 000953
000954 000001 000954
000955 000001 000955
000956 000001 000956
000957 000001 000957
000958 000001 000958
000959 000001 000959
000960 000002 000001   <-- new job output starts here
000961 000002 000002
000962 000002 000003
000963 000002 000004
000964 000002 000005
000965 000002 000006

为了实现上述输出,我使用了以下SYSIN DD语句(PGM=SORT):row1:INREC OVERLAY=(135:SEQNUM,6,ZD,START=1,INCR=1)

代码语言:javascript
复制
INREC  IFTHEN=(WHEN=GROUP,                         
                    BEGIN=(21,6,CH,EQ,C'J E S 2 '),
                    PUSH=(142:ID=6),                     <--- Second row
                    HIT=NEXT),                     
       IFTHEN=(WHEN=GROUP,                         
                    BEGIN=(21,6,CH,EQ,C'J E S 2 '),
                    PUSH=(149:SEQ=6))                    <--- 3th row

我想要达到的结果如下:

代码语言:javascript
复制
JOBNAME  f_row  l_row  rowcnt
JOB12345 000001 000100 000099
JOB54321 000101 000500 000399

我目前面临的问题是,我不知道如何计算rowcnt列。我能够计算rowcnt列,但只能在下一个作业的第一行(通过SUB)执行。我认为最好的方法是使用IFTHEN并将行推到组中的所有记录,但是在过去的两天里我还没有做到这一点。

在这一点上我被困住了。我不知道我应该用哪些语句来完成这个任务。有些论坛提供了一种使用两个单独文件的方法,但在我的情况下这不是首选。如能向正确的方向提供任何指导,将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-14 13:52:24

我解决了我的问题。我采取了以下步骤。

首先,我必须添加序列号,其中包括记录的总数、唯一的作业和唯一作业中的记录数。我以前能够做到这一点,但我将我以前的两个步骤合并为一个步骤:

代码语言:javascript
复制
INREC BUILD=(135:SEQNUM,6,ZD,START=1,INCR=1)
OUTREC IFTHEN=(WHEN=GROUP,                          
               BEGIN=(20,7,CH,EQ,C'J E S 2'),       
               PUSH=(142:ID=6),                     
               HIT=NEXT),                           
       IFTHEN=(WHEN=GROUP,                          
               BEGIN=(20,7,CH,EQ,C'J E S 2'),       
               PUSH=(149:SEQ=6))                    

这将产生以下输出:

代码语言:javascript
复制
 000952 000001 000952
 000953 000001 000953
 000954 000001 000954
 000955 000001 000955
 000956 000001 000956
 000957 000001 000957
 000958 000001 000958
 000959 000001 000959
 000960 000002 000001    <-- New job starts here
 000961 000002 000002
 000962 000002 000003
 000963 000002 000004
 000964 000002 000005
 000965 000002 000006
 000966 000002 000007
 000967 000002 000008
 000968 000002 000009
 000969 000002 000010
 000970 000002 000011
 000971 000002 000012
 000972 000002 000013

我的下一份工作是在一份工作中获得最高的最高记录。我能够通过对第二个排序输入按降序排序来实现这一点,请参见下面的内容。我还添加了一个新行(在157位置上),以推动最高记录计数,以便以后能够使用它。

代码语言:javascript
复制
SORT FIELDS=(142,6,ZD,A,135,6,ZD,D)        
OUTREC IFTHEN=(WHEN=GROUP,                 
               END=(20,7,CH,EQ,C'J E S 2'),
               PUSH=(157:149,6))           

上述步骤提供了以下输出(在第二列上排序,然后在第一列上排序)

代码语言:javascript
复制
000959 000001 000959  000959
000958 000001 000958  000959
000957 000001 000957  000959
000956 000001 000956  000959
000955 000001 000955  000959
...
000007 000001 000007  000959
000006 000001 000006  000959
000005 000001 000005  000959
000004 000001 000004  000959
000003 000001 000003  000959
000002 000001 000002  000959
000001 000001 000001  000959
001976 000002 001017  001017    <--- Next job starts, highest row count is 1017
001975 000002 001016  001017
001974 000002 001015  001017
001973 000002 001014  001017
001972 000002 001013  001017
001971 000002 001012  001017
001970 000002 001011  001017
001969 000002 001010  001017
001968 000002 001009  001017
001967 000002 001008  001017
001966 000002 001007  001017

在第四列中,我现在有了作业中的行总数。在那个时候,剩下的是回到原来的记录顺序。这是通过对相同的列进行排序来完成的,但是对第二个排序输入使用升序,而不是降序。

代码语言:javascript
复制
SORT FIELDS=(142,6,ZD,A,135,6,ZD,A)

当回顾这个解决方案时,我的思维方式很困难,这导致我无法理解这一点:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69541936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档