Ste*_*rex 1 sorting mainframe include 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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
基本上,这是NOT-EQUAL时的INCLUDE和EQUAL时的OMIT.
问题是你有没有逆转和的和或的.这意味着它们是非常不同的排序测试,因此会给出不同的答案
如果你看第一个测试,特别是:
(1,3,CH,NE,C'CAB'),OR,
(1,3,CH,NE,C'CBA')
Run Code Online (Sandbox Code Playgroud)
是永远真实,
而下面是假的时,字符1,3是什么,但CAB或CBA:
(1,3,CH,EQ,C'CAB'),OR,
(1,3,CH,EQ,C'CBA')
Run Code Online (Sandbox Code Playgroud)
使用布尔逻辑,规则是
not (a and b) = (not A) or (not b)
not (a or b) = (not A) and (not b)
Run Code Online (Sandbox Code Playgroud)
因此,从不断变化的,当省略对包括,必须扭转将与和或的
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
Run Code Online (Sandbox Code Playgroud)
变为:
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
Run Code Online (Sandbox Code Playgroud)