在JCL中的INCLUDE条件之后格式化输出文件

时间:2012-07-13 11:17:07

标签: jcl

我想根据输入文件中的以下INCLUDE条件创建3个outfiles。另外,我只想在下面3个BUILD的输出文件中记录部分记录。

我认为现在的问题是多个BUILD / OUTREC会出现重复错误。

在JCL中有没有其他方法可以实现相同的目标?

SORT  FIELDS=COPY                                              
OUTFIL FILES=01,                                               
   INCLUDE=(38,8,CH,EQ,C'AMSAM00'),                            
   BUILD=(1,4,5:366,8)                                         
OUTFIL FILES=02,                                               
   INCLUDE=(38,8,CH,EQ,C'AMSAM00',AND,390,1,CH,EQ,C'Y'),       
   BUILD=(1,4,5:382,8)                                         
OUTFIL FILES=03,                                               
   INCLUDE=(38,8,CH,EQ,C'AMSAM00',AND,545,4,CH,NE,C'0000'),    
   BUILD=(1,4,5:C'013,',9:545,4) 

2 个答案:

答案 0 :(得分:1)

随机戳了一下,所以......

Deuian我认为是在正确的界限上,但是留下了一些复杂因素,并且对于用户更改没有使用正确的位置或类型的输出文件,所以应该用太多的输入来应用这种情况...

OPTION COPY                                              
INCLUDE COND=(38,8,CH,EQ,C'AMSAM00')

OUTFIL FILES=02,                                               
  INCLUDE=(390,1,CH,EQ,C'Y'),       
  BUILD=(1,4,382,8)                                         

OUTFIL FILES=03,                                               
  INCLUDE=(545,4,CH,NE,C'0000',
          AND,390,1,CH,NE,C'Y'),    
  BUILD=(1,4,C'013,',545,4) 

OUTFIL FILES=01,SAVE,
  BUILD=(1,4,366,8)                                         

这假定不需要SORTOUT(它只是输入文件的副本)。

所有AMSAM00记录都包含在内,其他所有记录(对于OUTFILs都不需要)都会被忽略。

OUTFIL 02获得所有'Y'。

OUTFIL 03获取所有不是'Y'

的0000

OUTFIL 01,移动以便更容易理解,获取未在另一个OUTFIL上选择的所有记录(通过使用SAVE)。

通过INCLUDE的所有数据都将在三个OUTFIL中的一个上,而且只有一个。

为了清晰起见,我使用了OPTION COPY。 SORT FIELDS =(...在INCLUDE之后(无论你在哪里编码)逻辑上出现,并且通过使用OPTION COPY,它是清晰的,在前面,在逻辑位置,它是一个COPY操作。

我从BUILDs中取出了“列”(这些数字后跟冒号)。如果数据自动进入该列(即它),那么使用列只会创建工作,引入新的错误可能性,并使排序控制卡更难维护。

问题不明确,所以这只是对所需内容的猜测。

有提到OUTREC。

从上下文来看,这是OUTFIL上的OUTREC。有一个单独的OUTREC声明。为了避免混淆(由于OUTREC的“过载”),不要在OUTFIL上使用OUTREC,这是为了“向后兼容”,而是使用现代的BUILD,这完全等同。

BUILD在INREC,OUTREC和OUTFIL上单独存在,并作为IFTHEN的一部分。 OUTREC相当于BUILD只在OUTFIL上。

在INREC和OUTREC上,由于同样的原因,FIELDS也出现了“超载”(向后的事情)。

不要使用INREC FIELDS =,或OUTREC FIELDS =或OUTFIL OUTREC =,请使用BUILD代替它们。

答案 1 :(得分:0)

以下是我认为你要做的事情。包括1排除包括2和3将选择,同样包括2排除1和3将选择。 Include 3正在做同样的事情,除了1和2包括。

每个FILE DD只有以下1条记录,所有记录都被复制到分拣

//SORTIN  DD *
AMSAM00Y0000
AMSAM00N0001
AMSAM00Y0001
AMSAM00N0000
//SORTOUT DD SYSOUT=*
//SYSIN    DD *
  SORT  FIELDS=COPY
     OUTFIL FNAMES=FILE1,
        INCLUDE=(1,7,CH,EQ,C'AMSAM00',
                 AND,8,1,CH,NE,C'Y',AND,9,4,CH,EQ,C'0000'),
        BUILD=(1,12)
     OUTFIL FNAMES=FILE2,
        INCLUDE=(1,7,CH,EQ,C'AMSAM00',AND,
                 8,1,CH,EQ,C'Y',AND,
                 9,4,CH,EQ,C'0000'),
        BUILD=(1,12)
     OUTFIL FNAMES=FILE3,
        INCLUDE=(1,7,CH,EQ,C'AMSAM00',AND,
                 8,1,CH,NE,C'Y',AND,
                 9,4,CH,NE,C'0000'),
        BUILD=(1,12)


FIlE1
AMSAM00N0000

FILE2
AMSAM00Y0000

FILE3
AMSAM00N0001

SORTOUT
AMSAM00Y0000
AMSAM00N0001
AMSAM00Y0001
AMSAM00N0000