0

我想根据输入文件中的以下 INCLUDE 标准创建 3 个输出文件。此外,我只想要以下 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) 
4

2 回答 2

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 记录都已包含在内,其他所有内容(OUTFIL 不需要)都将被忽略。

OUTFIL 02 得到所有的'Y'。

OUTFIL 03 获取所有不是 'Y' 的非 0000

OUTFIL 01 移动以使其更易于跟踪,获取未在另一个 OUTFIL 上选择的所有记录(通过使用 SAVE)。

通过 INCLUDE 的所有数据都将位于三个 OUTFIL 之一上,并且只有一个。

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

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

这个问题还不清楚,所以这只是对想要什么的猜测。

提到了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 代替它们。

于 2013-04-06T01:49:10.823 回答
0

以下是我认为您正在尝试做的事情。Include 1 排除 Include 2 和 3 将选择的内容,同样 Include 2 排除 1 和 3 将选择的内容。除了排除 1 和 2 包含之外,包含 3 也在执行相同的操作。

每个 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
于 2012-07-15T18:49:12.107 回答