我需要将多条记录合并为一条记录。要合并(转置)的每个记录块都由一个数字键标记。分隔符也可以是字符串为CHG的记录。我试着调整大小,但它混合了不同的“块”的记录。“表”的数量可以在1到50之间。输入文件的LRECL是60,因此,如果我的输入数据如下所示:
1 CHG
1 DATA
1 MOTIVE
1 table1
1 table2
1 table3
2 CHG
2 DATA
2 MOTIVO
2 table1
3 CHG
3 DATA
3 MOTIVE
3 table1
3 table2
3 table3
3 table4
3 table5输出至少应该是:
1 CHG 1 DATA 1 MOTIVE 1 table1 1 table2 1 table3
2 CHG 2 DATA 2 MOTIVE 2 table1
3 CHG 3 DATA 3 MOTIVE 3 table1 3 table2 3 table3 3 table4 3 table5理想的输出(如果有帮助,我可以删除记录的第一个字节)
1 CHG DATA MOTIVE table1
1 CHG DATA MOTIVE table2
1 CHG DATA MOTIVE table3
2 CHG DATA MOTIVE table1
3 CHG DATA MOTIVE table1
3 CHG DATA MOTIVE table2
3 CHG DATA MOTIVE table3
3 CHG DATA MOTIVE table4
3 CHG DATA MOTIVE table5这些是我的最后一次尝试,没有一次能正常工作:
//TOOLIN DD *
RESIZE FROM(INDD) TO(OUTDD1) TOLEN(600) USING(CTL1)
//TOOLIN DD *
RESIZE FROM(INDD) TO(OUTDD1) TOLEN(600) USING(CTL1)
//CTL1CNTL DD *
INREC BUILD=(1,50)
OUTFIL FNAMES=OUTDD1,OVERLAY=(1:1,600) /*
发布于 2019-12-13 19:52:25
我刚刚想出了以下排序语句,
SORT FIELDS=(53,1,CH,A)
INREC IFTHEN=(WHEN=GROUP,BEGIN=(3,3,CH,EQ,C'CHG'),PUSH=(15:ID=1)),
IFTHEN=(WHEN=(3,3,CH,EQ,C'CHG'),BUILD=(1,5,47Z,15,1)),
IFTHEN=(WHEN=(3,4,CH,EQ,C'DATA'),BUILD=(6Z,3,4,42Z,15,1)),
IFTHEN=(WHEN=(3,6,CH,EQ,C'MOTIVE'),BUILD=(11Z,3,6,35Z,15,1)),
IFTHEN=(WHEN=(3,6,CH,EQ,C'TABLE1'),BUILD=(18Z,3,6,28Z,15,1)),
IFTHEN=(WHEN=(3,6,CH,EQ,C'TABLE2'),BUILD=(25Z,3,6,21Z,15,1)),
IFTHEN=(WHEN=(3,6,CH,EQ,C'TABLE3'),BUILD=(32Z,3,6,14Z,15,1)),
IFTHEN=(WHEN=(3,6,CH,EQ,C'TABLE4'),BUILD=(39Z,3,6,7Z,15,1)),
IFTHEN=(WHEN=(3,6,CH,EQ,C'TABLE5'),BUILD=(46Z,3,6,15,1))
SUM FIELDS=(1,8,9,8,17,8,25,8,33,8,41,8,49,4),FORMAT=BI
ALTSEQ CODE=(0040)
OUTREC FIELDS=(1,52,TRAN=ALTSEQ)输入:
1 CHG
1 DATA
1 MOTIVE
1 TABLE1
1 TABLE2
1 TABLE3
2 CHG
2 DATA
2 MOTIVE
2 TABLE1
3 CHG
3 DATA
3 MOTIVE
3 TABLE1
3 TABLE2
3 TABLE3
3 TABLE4
3 TABLE5输出:
1 CHG DATA MOTIVE TABLE1 TABLE2 TABLE3
2 CHG DATA MOTIVE TABLE1
3 CHG DATA MOTIVE TABLE1 TABLE2 TABLE3 TABLE4 TABLE5我在DFSORT中使用了我最喜欢的WHEN=GROUP特性和二进制加法技术来实现这个结果。关于这些特性和技术的更多细节可以在我在SO中的这篇answer中找到,因为它还建议了一个记录转置问题的解决方案。
此外,还使用ALTSEQ CODE将最终输出中任何未使用的二进制零转换为空格。
尽管我相信这个答案为您提供了获得输出的基本思路,但对于从6到50的表,您可能需要重复INREC IFTHEN子句。
希望这能有所帮助。
https://stackoverflow.com/questions/59250181
复制相似问题