首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据第一个字节将多条记录合并为一行

根据第一个字节将多条记录合并为一行
EN

Stack Overflow用户
提问于 2019-12-09 21:43:44
回答 1查看 1.9K关注 0票数 1

我需要将多条记录合并为一条记录。要合并(转置)的每个记录块都由一个数字键标记。分隔符也可以是字符串为CHG的记录。我试着调整大小,但它混合了不同的“块”的记录。“表”的数量可以在1到50之间。输入文件的LRECL是60,因此,如果我的输入数据如下所示:

代码语言:javascript
复制
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

输出至少应该是:

代码语言:javascript
复制
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

理想的输出(如果有帮助,我可以删除记录的第一个字节)

代码语言:javascript
复制
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

这些是我的最后一次尝试,没有一次能正常工作:

代码语言:javascript
复制
 //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)                   

/*

EN

Stack Overflow用户

发布于 2019-12-13 19:52:25

我刚刚想出了以下排序语句,

代码语言:javascript
复制
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)

输入:

代码语言:javascript
复制
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

输出:

代码语言:javascript
复制
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子句。

希望这能有所帮助。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59250181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档