JCL SYNCSORT:OMIT和INCLUDE不可互换?

时间:2014-07-25 11:17:59

标签: sorting include mainframe jcl syncsort

我为这两张排序卡获得了不同的输出,有人可以告诉我为什么吗?

1

INCLUDE COND=((1,3,CH,NE,C'ABC',AND,5,3,CH,NE,C'PQR'),OR,
              (1,3,CH,NE,C'CAB'),OR,
              (1,3,CH,NE,C'CBA'),OR,
              (1,3,CH,NE,C'ABC',AND,5,3,CH,NE,C'PQR'))
SORT FIELDS=COPY

2

   OMIT COND=((1,3,CH,EQ,C'ABC',AND,5,3,CH,EQ,C'PQR'),OR,
              (1,3,CH,EQ,C'CAB'),OR,
              (1,3,CH,EQ,C'CBA'),OR,
              (1,3,CH,EQ,C'ABC',AND,5,3,CH,EQ,C'PQR'))
SORT FIELDS=COPY

这基本上是NOT-EQUAL时的INCLUDE和EQUAL时的OMIT。

1 个答案:

答案 0 :(得分:5)

问题是你没有扭转以及。这意味着 他们是非常不同的排序测试,所以会给出不同的答案

如果你看第一个测试,特别是:

          (1,3,CH,NE,C'CAB'),OR,
          (1,3,CH,NE,C'CBA')

始终为真,

当字符1,3 任何 CAB CBA 时,以下 false

          (1,3,CH,EQ,C'CAB'),OR,
          (1,3,CH,EQ,C'CBA')

使用布尔逻辑,规则为

 not (a and b) = (not A) or (not b)
 not (a or b) = (not A) and (not b)

因此,当从省略更改为包含时,您必须撤消 &

OMIT COND=((1,3,CH,EQ,C'ABC',AND,5,3,CH,EQ,C'PQR'),OR,
          (1,3,CH,EQ,C'CAB'),OR,
          (1,3,CH,EQ,C'CBA'),OR,
          (1,3,CH,EQ,C'ABC',AND,5,3,CH,EQ,C'PQR'))
SORT FIELDS=COPY

成为:

INCLUDE COND=((1,3,CH,NE,C'ABC',or,5,3,CH,NE,C'PQR'),and,
          (1,3,CH,NE,C'CAB'),and,
          (1,3,CH,NE,C'CBA'),and,
          (1,3,CH,NE,C'ABC',or,5,3,CH,NE,C'PQR'))
SORT FIELDS=COPY