1

我的输入数据是这样的:

trainnumber name   station     price  coach seats

16001 CHN-CENTRAL PALANI      400.00 AC  02 

16002 PALANI      CHN-CENTRAL 410.00 ORD 76 

16003 CHN-CENTRAL NAGARKOIL   425.00 AC  30 

16004 NAGARKOIL   CHN-CENTRAL 439.00 SLP 37 

16005 THANJAVUR   CHN-EGMORE  395.00 ORD 60 

16006 CHN-EGMORE  THANJAVUR   375.00 SLP 10

我想在火车号之前添加一个新列,其中包含一个四位数的序列号,后跟一个空格,并将 1 添加到我的火车号。这个怎么做?

4

2 回答 2

1

你有:

SORT FIELDS=COPY                                      
OUTREC FIELDS=(1:SEQNUM,4,ZD,X,6:1,5,ZD,ADD,+1,EDIT=(TTTTT),
  X,12:7,69)

简化:

OPTION COPY                                      
INREC BUILD=(SEQNUM,4,ZD,
             X,
             1,5,ZD,
              ADD,+1,
               EDIT=(TTTTT),
             X,
             7,69)

OUTREC 在 SORT/MERGE 之后运行。INREC 在 SORT/MERGE 之前运行。由于您没有执行 SORT 或 MERGE(您正在执行 COPY),这并不重要,但 INREC 是更合乎逻辑的选择。

FIELDS 过载(请查阅文档以确认),并且由于 BUILD 的存在,INREC 或 OUTREC 上不需要 FIELDS(OUTFIL 上不需要 OUTREC),因为 BUILD 执行相同的工作但不会造成混淆(BUILD 是同义词对于 INREC 和 OUTREC 上的 FIELDS 以及 OUTFIL 上的 OUTREC - 已经很复杂了,不考虑 SUM 上的 FIELDS,REFORMAT...)。

如果位置只是自然排列,则不要指定列位置(如 1:)。你只是在维护。

BUILD(甚至丑陋的 FIELDS)的默认起点是 1:。下一个字段的默认值紧跟在当前字段之后。您已使用 X 作为列间距,因此所有数据都与之前的数据相邻。使用列只会使它复杂化。

注意:你有 X,7,69。您可以考虑将其更改为仅 6,69,因为您输入的位置 6 为空白。

注意:您“丢失”了 80 字节记录中的 6 个字节。如果您的输入保证有十二个尾随空格(或您不需要的其他数据,即使用该文件的任何程序都不关心该丢失),那没关系,但我们无法从您的描述中看出。

尝试使您的 SORT 控制卡更易于阅读(尝试使所有内容更易于阅读)。它将节省时间并减少错误。这意味着更便宜。时间就是金钱。


假设您的意思是 SORT,并且您的“列”不适用于 DB2....

对于固定长度的记录:

OPTION COPY
INREC BUILD=(5X,1,your-lrecel)

BUILD 将创建一个新的当前记录,替换原来的记录。它将以五个空白(5X)开始,但您可以将任何您喜欢的任何尺寸放在那里(在产品的限制范围内,它们很大)。将 your-lrecl 更改为实际的 LRECL 值。

对于可变长度记录:

OPTION COPY
INREC BUILD=(1,4,5X,5)

1,4是记录描述符字,在创建新的当前记录时总是需要复制一个RDW。复制后,SORT 将确保前两个字节(记录长度)中包含的值是正确的。然后是新列,在示例中也是五个空白,然后是可变长度记录的其余部分,它通过使用起始位置(此处为五个,用于获取数据的第一个字节)简单地指定,并且隐含地继续到记录结束。

在您的实际 JCL 中(以上都不是 JCL,它是 SORT 控制卡),确保您没有为 SORTOUT 指定任何 DCB 信息。这意味着您不能对那个 DD 使用 LIKE,请记住添加数据会使新的 LRECL 有所不同。也不要在 JCL 中编码新的 LRECL。如果不指定,SORT 将插入正确的值,并且只有一个位置来维护它。

于 2015-02-26T08:59:41.657 回答
0

我试过这样,我做到了。

  SORT FIELDS=COPY                                      
  OUTREC FIELDS=(1:SEQNUM,4,ZD,X,6:1,5,ZD,ADD,+1,EDIT=(TTTTT),
    X,12:7,69) 

我的文件是 80 条记录长度。

于 2015-02-27T05:30:32.890 回答