Syncsort Sum Fields=None 不删除重复项

Posted

技术标签:

【中文标题】Syncsort Sum Fields=None 不删除重复项【英文标题】:Syncsort Sum Fields=None not removing duplicates 【发布时间】:2016-08-08 21:19:27 【问题描述】:

我正在尝试运行将删除重复条目的 SYNCSORT 作业,但当我运行它时,我仍然会收到重复项。以下是我正在使用的 SYNCSORT 代码:

INCLUDE COND=(((61,1,CH,EQ,C'P'),OR, 
              (61,1,CH,EQ,C'V')),AND,
              (8,2,CH,EQ,C'FL'))     
OUTREC FIELDS=(1:12,20,              
               30:36,20,             
               55:61,1)              
SORT FIELDS=(30,20,CH,A,             
             01,20,CH,A)             
SUM FIELDS=NONE                      

输入如下:

----+----1----+----2----+----3----+----4----+----5----+----6
      FL                           AMELIA CITY              
32034 FL  NASSAU                  FERNANDINA BEACH         P
32034 FL  NASSAU                  AMELIA CITY              V
32034 FL  NASSAU                  AMELIA ISLAND            S
32034 FL  NASSAU                  FERNANDINA               S

我得到了大部分预期的输出,除了我仍然得到重复。我的输出如下:

----+----1----+----2----+----3----+----4----+----5----+
MANATEE                      BRADENTON                P
MANATEE                      BRADENTON                P
MANATEE                      BRADENTON                P
MANATEE                      BRADENTON                P
MANATEE                      BRADENTON                P
MANATEE                      BRADINGTON               V
POLK                         BRADLEY                  P
HILLSBOROUGH                 BRANDON                  P
SUWANNEE                     BRANFORD                 P
MIAMI-DADE                   BRICKELL                 V

任何帮助将不胜感激,因为我无法找到我的错误。

【问题讨论】:

首先,排序适用于输入记录,您可以在其中对输出记录的排序进行编码。 【参考方案1】:

这就是你的排序总结:

< ------------ Sort Field ----------------------->  
----+----1----+----2----+----3----+----4----+----5----+----6
      FL                           AMELIA CITY              
32034 FL  NASSAU                  FERNANDINA BEACH         P
32034 FL  NASSAU                  AMELIA CITY              V
32034 FL  NASSAU                  AMELIA ISLAND            S
32034 FL  NASSAU                  FERNANDINA               S

重复记录在前 11 个字节中会有所不同,您看不到。尝试删除outrec进行检查。

可能的变化 -

将 outrec 更改为 inrec 使用与输出关联的字段重新编码排序,请参阅以下内容:

以下排序根据输出记录排序:

INCLUDE COND=(((61,1,CH,EQ,C'P'),OR, 
               (61,1,CH,EQ,C'V')),AND,
              (8,2,CH,EQ,C'FL'))     
OUTREC FIELDS=(1:12,20,              
              30:36,20,             
              55:61,1)              
SORT FIELDS=(42,20,CH,A,             
             12,20,CH,A)             
SUM FIELDS=NONE

【讨论】:

我最终将 outrec 更改为 inrec,然后更改了排序。【参考方案2】:

“排序”的不同阶段的编码顺序无关紧要,它们将按照 SORT 想要的顺序执行。

在您的情况下,这将是 INCLUDE,然后是 SORT,然后是 SUM,然后是 OUTREC。您可以通过完全反转控制卡来检查是否是这种情况,您将获得相同的输出。

如果您想在 SORT 之前做某事,请使用 INREC,而不仅仅是尝试在 SORT 语句之前定位 OUTREC。在这里,由于您正在排序,因此您只想包含您需要的数据。您想要包含用于格式化的间距。为什么要将文件加载到 SORT 并在每条记录上使用额外的相同数据?

在 INREC 和 OUTREC 上,请不要使用 FIELDS。在OUTFIL 请不要使用OUTREC。很明显 FIELDS 是“超载”的(看看你使用 FIELDS 的次数,看看有多少次是“相同的”),而 OUTREC 是“超载”的。 10 多年前,BUILD 被引入让事情变得更加清晰 - 它描述了它正在做什么,每次你看到 BUILD 时它只意味着 BUILD。

 INCLUDE COND=(((61,1,CH,EQ,C'P'), 
                OR, 
                (61,1,CH,EQ,C'V')),
               AND, 
                (8,2,CH,EQ,C'FL')) 
 INREC BUILD=(36,20, 
              12,20, 
              61,1) 
 SORT FIELDS=(1,40,CH,A) 
 OUTREC BUILD=(21,10, 
               10X, 
               1,20, 
               5X, 
               41,1) 

INREC 仅选择您想要的数据,并按照您需要的顺序仅指定一个 SORT 键。

然后,OUTREC 会按照您想要的方式格式化数据。对于 SORT 中的每条记录,保存了 15 个字节(空白)。 10X 是 10 个空格,5X 是 5 个空格。

请注意,如果您包含“显式”空格而不是使用列号的隐式空格,则编码和理解会更容易,因此更易于维护。对报告的 10 列进行成像,并且第一列和第二列之间的间距不正确。您想更改所有列引用,只是为了增加一个额外的空间,还是更愿意将 7X 更改为 8X,其余的自行解决?即使您喜欢乏味的变化,也要记住您的同事:-)

如果您的数据已经有序不要使用 SUM FIELDS=NONE。使用 OUTFIL 报告功能,REMOVECCNODETAILSECTIONSTRAILER3永远不要 对数据进行排序只是为了让您删除带有SUM FIELDS=NONE 的重复数据。

【讨论】:

以上是关于Syncsort Sum Fields=None 不删除重复项的主要内容,如果未能解决你的问题,请参考以下文章

syncsort 将 pd 精确转换为 zdf

z / OS Syncsort:省略没有排序的重复项

z/OS Syncsort:省略不排序的重复项

python读取财经数据

Django 中的FormModelForm

注释 Sum 会导致 None 而不是零