在 SORT 中添加新列
Posted
技术标签:
【中文标题】在 SORT 中添加新列【英文标题】:Adding a new column in SORT 【发布时间】:2015-02-26 07:38:22 【问题描述】:我的输入数据是这样的:
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 添加到我的火车号。 如何做到这一点?
【问题讨论】:
我假设您所说的“JCL”是指您的 SORT 产品? 是的,按排序,我必须这样做我需要添加长度为 4 的新列(序列号列),我需要在我的火车号上加 1 怎么做? 对您之前的问题的一些回应会很好。您应该考虑对您认为有帮助的答案进行投票,并且在这里您应该接受对您最有帮助的答案,即使它是您的。这可以帮助将来搜索此类问题。 【参考方案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 个字节。如果您的输入保证有 12 个尾随空格(或您不需要的其他数据,即使用该文件的任何程序都不关心该丢失),那没关系,但我们无法从您的描述中看出。
尝试使您的 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是Record Descriptor Word,在创建新的当前记录时总是需要复制一个RDW。复制后,SORT 将确保前两个字节(记录长度)中包含的值是正确的。然后是新列,在示例中也是五个空白,然后是可变长度记录的其余部分,它通过使用起始位置(此处为五个,用于获取数据的第一个字节)简单地指定,并且隐含地继续到记录结束。
在您的实际 JCL 中(以上都不是 JCL,它是 SORT 控制卡),确保您没有为 SORTOUT 指定任何 DCB 信息。这意味着您不能对那个 DD 使用 LIKE,请记住添加数据会使新的 LRECL 有所不同。也不要在 JCL 中编码新的 LRECL。如果不指定,SORT 会插入正确的值,并且只需要维护一个地方。
【讨论】:
【参考方案2】:我试过这样,我做到了。
SORT FIELDS=COPY
OUTREC FIELDS=(1:SEQNUM,4,ZD,X,6:1,5,ZD,ADD,+1,EDIT=(TTTTT),
X,12:7,69)
我的文件是 80 条记录长度。
【讨论】:
以上是关于在 SORT 中添加新列的主要内容,如果未能解决你的问题,请参考以下文章