概述
dfsort是IBM的产品,syncsort是SYNCSORT公司的产品,但两者相似度极高。基本上会用其中一个就会用另外一个,下文将以sort代表两者。本文介绍sort中数据类型的注意点及一些常用并且十分有用的数据类型。
https://www.ibm.com/support/knowledgecenter/SSLTBW_2.4.0/com.ibm.zos.v2r4.icea100/sorcst.htm
类型
1.ZD、ZDF、ZDC
ZD可说是sort中最常用的数据类型之一,表示十进制数(zoned decimal)。
ZD实际是有符号,所以有一个问题就是正数的最后一个字节的高4bit默认是C,并不是F。所以最后一位显示时并不是0(X'F0')~9(X'F9'), 而是{(X'C0')~I(X'C9')。有时并不想要这个结果,这时ZDF就派上场了。ZDF与ZD相似,但对于ZDF来说,正数的最后一个字节的高4bit默认是F,这样在显示正数时就正常了。但比较浮云的是,因为负数的内存形式仍然与ZD无异(最后一位为X'D0'~X'D9',显示时不是数字),所以要比较合理地显示数字,最好还是使用EDIT语句。
ZDC等同于ZD。
例子
输入,PD类型的+1145728:
显示 |
. |
. |
. |
. |
HEX MODE |
11 |
45 |
72 |
8C |
各种情况输出:
1,4,PD,TO=ZD/ZDC
显示 |
1 |
1 |
4 |
5 |
7 |
2 |
H |
HEX MODE |
F1 |
F1 |
F4 |
F5 |
F7 |
F2 |
C8 |
1,4,PD,TO=ZDF
显示 |
1 |
1 |
4 |
5 |
7 |
2 |
8 |
HEX MODE |
F1 |
F1 |
F4 |
F5 |
F7 |
F2 |
F8 |
1,4,PD,EDIT=(STTTTTTT,SIGN=(+,-))
显示 |
+ |
1 |
1 |
4 |
5 |
7 |
2 |
8 |
HEX MODE |
4E |
F1 |
F1 |
F4 |
F5 |
F7 |
F2 |
F8 |
2.BI、FI
BI表示binary,要点是BI是无符号的,也就是按原码存储,即使第一个bit为1也是正数。
Fi则是有符号的binary,第一个bit为0则是正数,第一个bit为1则是负数。负数是补码形式的。
X'E163',如果是BI则是57699,如果是FI则是-7837。
3.UFF、SFF
UFF表示自由形式的数字。所有非0~9的字符都被忽略。
$2,232,98,32.540 → +22329832540
173/821/@5 → +1738215
ABC → +0
SFF与UFF相似,但SFF是有符号的,在任何位置出现-或),都视为负数
-76,23.847 → -7623847
(234/32/E2) → -234322
4.AQ
(1)改变默认顺序。
例:排序的时候,X'5B'将在X'EA'之前,X'E9'之后。相当于EBCDIC码表的顺序被改变为了 E9 5B EA,当然只有在这里的SORT语句中生效,系统的EBCDIC码表还是老样子.
SORT FIELDS=(1,1,AQ,A)
ALTSEQ CODE=(5BEA)
注意:sort中语句的顺序是没有约束的,所以这里将ALTSEQ写在后面是可以的。
(2)替换。
例:将X'C3'替换为X'F1',将X'C4'替换为X'F2'。
ALTSEQ CODE=(C3F1,C4F2)
OUTREC BUILD=(1,80,TRAN=ALTSEQ)
5.SS
SS表示在一个字符串中包含某个字符串。
例:一条记录的前十个字节中只要包含ALAN,这条记录就会参与排序。
INCLUDE COND=(1,10,SS,EQ,C'ALAN')
参考
(1)z/OS V1R12.0 DFSORT Application Programming Guide
http://publibz.boulder.ibm.com/cgi-bin/bookmgr_OS390/BOOKS/ICE1CA50/CCONTENTS?SHELF=ICE1SH50&DN=SC26-7523-05&DT=20100630155256
(2)ASCII or EBCDIC
http://www.simotime.com/asc2ebc1.htm