我需要拆分一个顺序的大型机文件。好吧,准确地说,我需要从特定关键字开始将内容从此文件复制到另一个文件。例:
line1
line2
line3
start line4
line5
line6
在这种情况下,我需要搜索"开始"并使用 REXX 或 SORT 将从第 4 行开始的所有内容复制到另一个文件。有什么建议吗?
编辑:我在REXX中想到但不满意的内容
"EXECIO * DISKR INPUT (STEM INPUT. FINIS)"
LINEINPUT = 1
LINEOUTPUT = 1
FOUND = 0 /*working like a boolean?
DO WHILE LINEINPUT <= INPUT.0
IF INPUT.LINEINPUT = start line4 THEN DO
FOUND = 1
END
IF FOUND = 1 THEN DO
INPUT.LINEINPUT = OUTPUT.LINEOUTPUT
LINEOUTPUT = LINEOUTPUT + 1
END
LINEINPUT = LINEINPUT + 1
END
也许是这样的事情,但这意味着我需要逐行浏览所有这些文件。也许JCL有更好的方法?也许Syncsort可以做这样的事情?
RECFM是固定的。准确地说是亚马逊物流。LRECL 170.触发器可以是此行的一部分,也可以是整行。这并不重要,因为它在每个文件中始终是同一行,甚至前几个字符在整个文件中也是唯一的。表示"开始"在文件中只出现一次。
对于触发器的固定位置启动:
OPTION COPY
INREC IFTHEN=(WHEN=GROUP,
BEGIN=(1,5,CH,EQ,C'start'),
PUSH=(171:ID=1))
OUTFIL OMIT=(171,1,CH,EQ,C' '),
BUILD=(1,170)
对于可变位置的唯一触发器:
OPTION COPY
INREC IFTHEN=(WHEN=GROUP,
BEGIN=(1,170,SS,EQ,C'start'),
PUSH=(171:ID=1))
OUTFIL OMIT=(171,1,CH,EQ,C' '),
BUILD=(1,170)
WHEN=GROUP
为您提供PUSH
,它将当前记录中的数据,或组号(ID
)或组内的数字(SEQ
)放到组中所有记录(包括当前记录)的该位置。在这种情况下,"组"是文件的其余部分。
SS
是字段类型,允许子字符串搜索。
然后,OUTFIL
上的OMIT=
(类似于OMIT COND=
,但在文件由控制卡处理后)从标志中实际选择(没有来自 PUSH 的值的自动扩展记录将设置为空白)和 BUILD 以删除额外的字节。
需要额外的字节,因为 SORT 没有用于定义的"程序存储" - 额外的字段必须在记录上(或者,仅在当前记录的持续时间内,在 PARSEd 字段中)。
抱歉没有发表评论,因为我没有足够的声誉,我正在回答这个问题。稍后将删除此内容
您可以通过两种方法实现这一点,即通过REXX或JCL。请向我们展示您到目前为止尝试过的内容,以便我们找出需要改进的地方。