SORT:
JOINKEYS FILES=F1,FIELDS=(5,4,A,10,20,A)
JOINKEYS FILES=F2,FIELDS=(1,4,A,6,20,A)
REFORMAT FIELDS=(F1:10,20,9,1,5,4,30,1,31,10,F2:27,10)
JOIN UNPAIRED,F1
INREC BUILD=(1,36,C',',37,10,C',',27,10,SFF,SUB,37,10,SFF,
EDIT=(TTTTTT))
OUTPUT IS:*第2行第4列是第2个文件未配对的空格,需要自动为0。
22680372 ,5102, 1, 1,000000
22222222 ,5105, 2, ,000002
OUTPUT shud be:*第2行第4列为0或0000s为未配对的第2个文件,需要自动为0。
22680372 ,5102, 1, 1,000000
22222222 ,5105, 2, 0,000002
答案 0 :(得分:3)
你需要一个条件,这意味着IFTHEN。你不能在同一个INREC上拥有IFTHEN和BUILD,但你可以拥有多个IFTHEN,而BUILD可以成为IFTHEN的一部分。
IFTHEN =(WHEN = INIT表示应该为每条记录做出的事情(无条件)。
IFTHEN =(WHEN =(逻辑表达式仅在条件为真时才会被执行。
每个BUILD语句都会创建一个完整的新中间记录(输入和输出之间的中间记录)。 OVERLAY仅影响指定位置的数据(假设没有记录的扩展名)。
您的条件是记录的第46个字节是空格。您已经使用过SFF(您是否尝试过其他建议,尤其是FS?),因此无需在构建之前将值设为零。
JOINKEYS FILES=F1,FIELDS=(5,4,A,10,20,A)
JOINKEYS FILES=F2,FIELDS=(1,4,A,6,20,A)
REFORMAT FIELDS=(F1:10,20,9,1,5,4,30,1,31,10,F2:27,10)
JOIN UNPAIRED,F1
INREC IFTHEN=(WHEN=INIT,
BUILD=(1,36,
C',',
37,10,
C',',
27,10,SFF,
SUB,
37,10,SFF,
EDIT=(TTTTTT))),
IFTHEN=(WHEN=(47,1,CH,EQ,C' '),
OVERLAY=(46:C'0'))
我不会像只是那样格式化语句,而是为了让它们更容易理解和维护。
好的,那个解决方案有点笨重。你可以用这个替换INREC,对于这种类型的数据,它可以替代编辑:INREC IFTHEN=(WHEN=INIT,
BUILD=(1,36,
C',',
37,10,FS,TO=FS,LENGTH=10,
C',',
27,10,FS,
SUB,
37,10,FS,
TO=FS,LENGTH=8))
这更加自然,因为空间变为零,前导空白完全没有条件,并且仅在REFORMAT记录中使用对该字段的引用。