IBM大型机论坛索引
 
登录
 
IBM大型机论坛索引 大型机:搜索 IBM Mainframe论坛:常见问题解答 寄存器
 

使用SORT将文件拆分为不同的文件


IBM大型机论坛 -> JCL& VSAM
发表新话题   回复主题
查看上一个主题 :: 查看下一个主题  
作者 信息
阿宾

活跃用户


已加入:2006年8月14日
帖子:198

发布发表:2007年3月12日星期一5:31 pm
引用回复

大家好,

请提供一些解决此问题的方法。

我有一个长度为5000的文件。

其布局为格式
01布局。
05 ws-key1图片x(20)
05填充图片x(20)
05 ws-key2图片x(10)
05 FILLEr pic x(4950)。

该文件包含约3500万条记录。

我必须将此文件洒到10个不同的文件中。但是此文件中的任何键值都不应重叠。

即,如果file1有一个键为key的记录,则其他文件的记录中没有相同键的记录。

请让我知道是否需要进一步澄清。

谢谢,
阿彬
回到顶部
查看用户资料 发送私信
沙丁鱼

活跃用户


加入时间:2006年5月5日
帖子:183
所在地:苏格兰

发布发表:2007年3月12日星期一7:07 pm
引用回复

更澄清吗?是的,请!

投入和预期产出的例子肯定会有所帮助。
回到顶部
查看用户资料 发送私信
阿宾

活跃用户


已加入:2006年8月14日
帖子:198

发布发表:2007年3月13日,星期二,上午10:04
引用回复

你好

感谢回复。

输入看起来像
1111111111111111111SOMEDATA1 1111111111
1111111111111111111SOMEDATA2 1111111111
2222222222222222222SOMEDATA3 2222222222
3333333333333333333SOMEDATA4 3333333333
3333333333333333333SOMEDATA5 3333333333
3333333333333333333SOMEDATA6 3333333333
4444444444444444444SOMEDATA7 4444444444
5555555555555555555SOMEDATA8 5555555555
6666666666666666666SOMEDATA9 6666666666
6666666666666666666SOMEDATA10 6666666666
9999999999999999999SOMEDATA11 9999999999

PS:输入文件按排序顺序

我想将此文件分为两部分
现在,当我拆分第一个文件时,应包含
1111111111111111111SOMEDATA1 1111111111
1111111111111111111SOMEDATA2 1111111111
2222222222222222222SOMEDATA3 2222222222
3333333333333333333SOMEDATA4 3333333333
3333333333333333333SOMEDATA5 3333333333
3333333333333333333SOMEDATA6 3333333333
第二个文件应包含
4444444444444444444SOMEDATA7 4444444444
5555555555555555555SOMEDATA8 5555555555
6666666666666666666SOMEDATA9 6666666666
6666666666666666666SOMEDATA10 6666666666
9999999999999999999SOMEDATA11 9999999999

PS:这只是一个示例数据。实际数据包含超过3500万条记录,我想分成10多个不同的文件,每个文件包含几乎相等数量的记录。

谢谢,
阿彬
回到顶部
查看用户资料 发送私信
Santhunaveen

新的用户


已加入:2006年9月22日
帖子:33

发布发表:2007年3月13日,星期二,下午3:44
引用回复

你好

我们可以使用OUTFIL选项分割文件。检查以下示例。

码:

// **************************************************** ***********
// SPLITFLS EXEC PGM =排序
// **************************************************** ***********
// SYSPRINT DD SYSOUT = *
// SYSOUT DD SYSOUT = *
// SYSUDUMP DD SYSOUT = *
// SORTIN DD DSN = FILE1 ......,DISP = SHR
// SORTOF01 DD DSN = OUTPUTFILE1 .......,
// DISP =(NEW,CATLG,DELETE),UNIT = SYSDA,
// SPACE =(CYL,(1,1),RLSE),
// RECFM = FB,LRECL = 20
// SORTOF02 DD DSN = OUTPUTFILE2 .....,
// DISP =(NEW,CATLG,DELETE),UNIT = SYSDA,
// SPACE =(CYL,(1,1),RLSE),
// RECFM = FB,LRECL = 20
// SORTOF03 DD DSN = OUTPUTFILE3 ........,
// DISP =(NEW,CATLG,DELETE),UNIT = SYSDA,
// SPACE =(CYL,(1,1),RLSE),
// RECFM = FB,LRECL = 20
// SORTOF04 DD DSN = OUTPUTFILE3 ........,
// DISP =(NEW,CATLG,DELETE),UNIT = SYSDA,
// SPACE =(CYL,(1,1),RLSE),
// RECFM = FB,LRECL = 20
???????????????? //您可以根据需要提供任意数量的文件
????????????????
????????????????
// SYSIN DD *
排序字段=复制
OUTFIL FILES = 01,ENDREC = 200 //对于文件1您要分割多少条记录
OUTFIL FILES = 02,STARTREC = 201,ENDREC = 400 //对于文件2
OUTFIL FILES = 03,STARTREC = 401,ENDREC = 700 //对于文件3
OUTFIL FILES = 03,STARTREC = 401,ENDREC = 700 //对于文件4
......................................... //用于所有文件
....................................
.....................................
// SYSPRINT DD SYSOUT = *
// SYSOUT DD SYSOUT = *
// *


如果我错了,请纠正我。
回到顶部
查看用户资料 发送私信
沙丁鱼

活跃用户


加入时间:2006年5月5日
帖子:183
所在地:苏格兰

发布发表:2007年3月13日,星期二,下午4:31
引用回复

实际的要求是将主文件拆分为几个文件,而不必将所有键都包含在内。

简单地使用字母序号将无法满足此要求。
回到顶部
查看用户资料 发送私信
威廉·汤普森

全球主持人


已加入:2006年11月18日
帖子:3156
所在地:亚利桑那州图森

发布发表:2007年3月13日,星期二,下午5:18
引用回复

阿宾写道:
该文件包含约3500万条记录。
我必须将此文件洒到10个不同的文件中。但是此文件中的任何键值都不应重叠。
记录是否已按键排序?
如果您希望所有10个文件的大小几乎相同,那么您知道每个键范围中有多少个文件吗?
回到顶部
查看用户资料 发送私信
阿宾

活跃用户


已加入:2006年8月14日
帖子:198

发布发表:2007年3月13日,星期二,下午5:59
引用回复

嗨,威尔,

是的,记录按键排序。

如果您希望所有10个文件的大小几乎相同,那么您知道每个键范围中有多少个文件吗?

恐怕这是无法预料的。但是我们可以将总数除以所需文件数。假设输入包含3000000条记录
我想要10个文件。然后每个文件应包含近= 300000条记录
回到顶部
查看用户资料 发送私信
威廉·汤普森

全球主持人


已加入:2006年11月18日
帖子:3156
所在地:亚利桑那州图森

发布发表:2007年3月13日,星期二,下午6:08
引用回复

是的,每隔30万次写入您要等待一个关键的中断,然后关闭该文件并打开一个新文件,对吗?
使用编程语言可以轻松完成,但是我不知道是否可以通过排序完成。
是排序要求还是您还有其他可能使用的资源?
回到顶部
查看用户资料 发送私信
阿宾

活跃用户


已加入:2006年8月14日
帖子:198

发布发表:2007年3月13日,星期二,下午6:25
引用回复

嗨,

您要等待每30万次写入,就需要等待密钥中断并关闭该文件并打开一个新文件,对吗?

你部分正确。我不想等待关键的突破,因为这将是一个批处理工作。

没错,我们可以使用编程语言来做得很好。但是,如果可以使用SORT,那就太好了。 icon_smile.gif
回到顶部
查看用户资料 发送私信
斯里克里希

活跃用户


已加入:2005年7月30日
帖子:183
地点:海得拉巴

发布发表:2007年3月13日,星期二,下午6:36
引用回复

你好
我认为您可以创建动态控制卡,将文件分为10个文件。

无论如何,让我们等待弗兰克的回应,他可能会提出好主意。

谢谢
克里希
回到顶部
查看用户资料 发送私信
Santhunaveen

新的用户


已加入:2006年9月22日
帖子:33

发布发表:2007年3月13日,星期二,7:44 pm
引用回复

嗨,IQofaGerbil,

“实际的要求是将主文件分割成几个文件,而不必将密钥换行。”

如果文件已经排序,则...的问题在哪里 包裹的钥匙......................
回到顶部
查看用户资料 发送私信
沙丁鱼

活跃用户


加入时间:2006年5月5日
帖子:183
所在地:苏格兰

发布发表:2007年3月13日,星期二,9:20 pm
引用回复

嗨,santhunaveen

好吧,从预期的输出

引用:

我想将此文件分为两部分
现在,当我拆分第一个文件时,应包含
1111111111111111111SOMEDATA1 1111111111
1111111111111111111SOMEDATA2 1111111111
2222222222222222222SOMEDATA3 2222222222
3333333333333333333SOMEDATA4 3333333333
3333333333333333333SOMEDATA5 3333333333
3333333333333333333SOMEDATA6 3333333333
第二个文件应包含
4444444444444444444SOMEDATA7 4444444444
5555555555555555555SOMEDATA8 5555555555
6666666666666666666SOMEDATA9 6666666666
6666666666666666666SOMEDATA10 6666666666
9999999999999999999SOMEDATA11 9999999999



我从中得到的是,应该在3键之后和4键之前完成一个键之后拆分记录
所以阿宾不想要的是


// SYSIN DD *
排序字段=复制
OUTFIL FILES = 01,ENDREC = 5 //对于文件1您要分割多少条记录
OUTFIL FILES = 02,STARTREC = 6,ENDREC = 5 //对于文件2

第一个档案
1111111111111111111SOMEDATA1 1111111111
1111111111111111111SOMEDATA2 1111111111
2222222222222222222SOMEDATA3 2222222222
3333333333333333333SOMEDATA4 3333333333
3333333333333333333SOMEDATA5 3333333333
第二档
3333333333333333333SOMEDATA6 3333333333
4444444444444444444SOMEDATA7 4444444444
5555555555555555555SOMEDATA8 5555555555
6666666666666666666SOMEDATA9 6666666666
6666666666666666666SOMEDATA10 6666666666
9999999999999999999SOMEDATA11 9999999999


看看键(3的位置)在哪里被分割了?

也许我是错的,但是该解决方案仅在您知道密钥在哪里结束/开始的地方才有效,因此William提出了疑问。
回到顶部
查看用户资料 发送私信
阿宾

活跃用户


已加入:2006年8月14日
帖子:198

发布发表:2007年3月13日,星期二,9:25 pm
引用回复

嗨,沙鼠,

你说的没错
回到顶部
查看用户资料 发送私信
弗兰克·雅格

DFSORT开发人员


已加入:2005年2月15日
帖子:7129
地点:加利福尼亚州圣何塞

发布发表:2007年3月13日,星期二,10:59 pm
引用回复

这非常棘手,需要进行一次合并和复制,但是这是DFSORT / ICETOOL作业,我相信它将完成您想要的工作:

码:

// S1    EXEC  PGM=ICEMAN
// SYSOUT   DD  SYSOUT=*
// SORTIN01 DD DSN = ...  input file (FB/5000)
// T1 DD DSN =&&T1,UNIT=SYSDA,SPACE=(CYL,(5,5)),DISP=(,PASS)
// T2 DD DSN =&&T2,UNIT=SYSDA,SPACE=(CYL,(5,5)),DISP=(,PASS)
// SYSIN    DD    *
  OPTION EQUALS
  INREC OVERLAY=(5009:1,19,30,10)
  MERGE FIELDS=(5009,29,CH,A)
 OUTFIL FNAMES = T1,OVERLAY =(5001:SEQNUM,8,ZD)
 OUTFIL FNAMES = T2,NODETAIL,REMOVECC,
    SECTIONS=(5009,29,
      TRAILER3=(SUBCOUNT=(M11,LENGTH=8)))
// S2    EXEC  PGM=ICETOOL
//工具   DD  SYSOUT=*
// DFSMSG    DD  SYSOUT=*
// SYMNAMES DD *
DIV1,+ 300000
DIV2,+ 600000
DIV3,+ 900000
DIV4,+ 1200000
DIV5,+ 1500000
DIV6,+ 1800000
DIV7,+ 2100000
DIV8,+ 2400000
DIV9,+ 2700000
// T2 DD DSN =&&T2,DISP=(OLD,PASS)
// 声压级1 DD DSN =&&S1,UNIT=SYSDA,SPACE=(TRK,(1,1)),DISP=(,PASS)
// SPL2 DD DSN =&&S2,UNIT=SYSDA,SPACE=(TRK,(1,1)),DISP=(,PASS)
// SPL3 DD DSN =&&S3,UNIT=SYSDA,SPACE=(TRK,(1,1)),DISP=(,PASS)
// SPL4 DD DSN =&&S4,UNIT=SYSDA,SPACE=(TRK,(1,1)),DISP=(,PASS)
// 声压级5 DD DSN =&&S5,UNIT=SYSDA,SPACE=(TRK,(1,1)),DISP=(,PASS)
// 声压级6 DD DSN =&&S6,UNIT=SYSDA,SPACE=(TRK,(1,1)),DISP=(,PASS)
// SPL7 DD DSN =&&S7,UNIT=SYSDA,SPACE=(TRK,(1,1)),DISP=(,PASS)
// 声压级8 DD DSN =&&S8,UNIT=SYSDA,SPACE=(TRK,(1,1)),DISP=(,PASS)
// 声压级9 DD DSN =&&S9,UNIT=SYSDA,SPACE=(TRK,(1,1)),DISP=(,PASS)
// TOOLIN   DD    *
从复制(T2) TO(SPL1) USING(CTL1)
从复制(T2) TO(SPL2) USING(CTL2)
从复制(T2) TO(SPL3) USING(CTL3)
从复制(T2) TO(SPL4) USING(CTL4)
从复制(T2) TO(SPL5) USING(CTL5)
从复制(T2) TO(SPL6) USING(CTL6)
从复制(T2) TO(SPL7) USING(CTL7)
从复制(T2) TO(SPL8) USING(CTL8)
从复制(T2) TO(SPL9) USING(CTL9)
// CTL1CNTL DD *
  INCLUDE COND=(1,8,ZD,GE,DIV1)
  OPTION STOPAFT=1
  OUTREC BUILD=(C'SPL1,+',1,8,80:X)
// CTL2CNTL DD *
  INCLUDE COND=(1,8,ZD,GE,DIV2)
  OPTION STOPAFT=1
  OUTREC BUILD=(C'SPL2,+',1,8,80:X)
// CTL3CNTL DD *
  INCLUDE COND=(1,8,ZD,GE,DIV3)
  OPTION STOPAFT=1
  OUTREC BUILD=(C'SPL3,+',1,8,80:X)
// CTL4CNTL DD *
  INCLUDE COND=(1,8,ZD,GE,DIV4)
  OPTION STOPAFT=1
  OUTREC BUILD=(C'SPL4,+',1,8,80:X)
// CTL5CNTL DD *
  INCLUDE COND=(1,8,ZD,GE,DIV5)
  OPTION STOPAFT=1
  OUTREC BUILD=(C'SPL5,+',1,8,80:X)
// CTL6CNTL DD *
  INCLUDE COND=(1,8,ZD,GE,DIV6)
  OPTION STOPAFT=1
  OUTREC BUILD=(C'SPL6,+',1,8,80:X)
// CTL7CNTL DD *
  INCLUDE COND=(1,8,ZD,GE,DIV7)
  OPTION STOPAFT=1
  OUTREC BUILD=(C'SPL7,+',1,8,80:X)
// CTL8CNTL DD *
  INCLUDE COND=(1,8,ZD,GE,DIV8)
  OPTION STOPAFT=1
  OUTREC BUILD=(C'SPL8,+',1,8,80:X)
// CTL9CNTL DD *
  INCLUDE COND=(1,8,ZD,GE,DIV9)
  OPTION STOPAFT=1
  OUTREC BUILD=(C'SPL9,+',1,8,80:X)
// S3  EXEC  PGM=ICEMAN
// SYSOUT    DD  SYSOUT=*
// SYMNAMES DD DSN =&&S1,DISP=(OLD,PASS)
//         DD DSN=&&S2,DISP=(OLD,PASS)
//         DD DSN=&&S3,DISP=(OLD,PASS)
//         DD DSN=&&S4,DISP=(OLD,PASS)
//         DD DSN=&&S5,DISP=(OLD,PASS)
//         DD DSN=&&S6,DISP=(OLD,PASS)
//         DD DSN=&&S7,DISP=(OLD,PASS)
//         DD DSN=&&S8,DISP=(OLD,PASS)
//         DD DSN=&&S9,DISP=(OLD,PASS)
// SORTIN DD DSN =&&T1,DISP=(OLD,PASS)
// OUT1 DD DSN = ...输出文件1(FB/5000)
// OUT2 DD DSN = ...输出file2(FB/5000)
// OUT3 DD DSN = ...输出file3(FB/5000)
// OUT4 DD DSN = ...输出文件4(FB/5000)
// OUT5 DD DSN = ...输出文件5(FB/5000)
// OUT6 DD DSN = ...输出文件6(FB/5000)
// OUT7 DD DSN = ...输出文件7(FB/5000)
// OUT8 DD DSN = ...输出文件8(FB/5000)
// OUT9 DD DSN = ...输出文件9(FB/5000)
// OUT10 DD DSN = ...输出文件10(FB/5000)
// SYSIN    DD    *
  OPTION COPY
  OUTFIL FNAMES=OUT1,
    INCLUDE=(5001,8,ZD,LE,SPL1),
    BUILD=(1,5000)
  OUTFIL FNAMES=OUT2,
    INCLUDE=(5001,8,ZD,GT,SPL1,AND,5001,8,ZD,LE,SPL2),
    BUILD=(1,5000)
  OUTFIL FNAMES=OUT3,
    INCLUDE=(5001,8,ZD,GT,SPL2,AND,5001,8,ZD,LE,SPL3),
    BUILD=(1,5000)
  OUTFIL FNAMES=OUT4,
    INCLUDE=(5001,8,ZD,GT,SPL3,AND,5001,8,ZD,LE,SPL4 ),
    BUILD=(1,5000)
  OUTFIL FNAMES=OUT5,
    INCLUDE=(5001,8,ZD,GT,SPL4,AND,5001,8,ZD,LE,SPL5),
    BUILD=(1,5000)
  OUTFIL FNAMES=OUT6,
    INCLUDE=(5001,8,ZD,GT,SPL5,AND,5001,8,ZD,LE,SPL6),
    BUILD=(1,5000)
  OUTFIL FNAMES=OUT7,
    INCLUDE=(5001,8,ZD,GT,SPL6,AND,5001,8,ZD,LE,SPL7),
    BUILD=(1,5000)
  OUTFIL FNAMES=OUT8,
    INCLUDE=(5001,8,ZD,GT,SPL7,AND,5001,8,ZD,LE,SPL8),
    BUILD=(1,5000)
  OUTFIL FNAMES=OUT9,
    INCLUDE=(5001,8,ZD,GT,SPL8,AND,5001,8,ZD,LE,SPL9),
    BUILD=(1,5000)
 OUTFIL FNAMES = OUT10,保存,
    BUILD=(1,5000)
回到顶部
查看用户资料 发送私信
查看上一个主题 :: :: 查看下一个主题  
发表新话题   回复主题 查看书签
所有时间均为格林尼治标准时间+ 6小时
论坛索引 -> JCL& VSAM

 


类似主题
话题 论坛 回覆
没有新帖 将匹配的记录写入输出文件 DFSORT / ICETOOL 9
没有新帖 建立排序键 DFSORT / ICETOOL 3
没有新帖 比较文件记录计数百分比... DFSORT / ICETOOL 4
没有新帖 比较两个文件以查找位置/日期... 同步排序 2
没有新帖 很大排序失败-寻求识别... DFSORT / ICETOOL 7
搜索我们的论坛:

回到顶部