我需要拆分顺序大型机文件。好吧,确切地说,我需要从特定关键字开始将此文件中的内容复制到另一个文件。例如:
line1
line2
line3
start line4
line5
line6
在这种情况下,我需要搜索" start"并使用REXX或SORT将从line4开始的所有内容复制到另一个文件。有什么建议?
编辑:我在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已修复。 FBA准确无误。 LRECL 170.触发器可以是该线路的一部分或整条线路。这并不重要,因为它在每个文件中始终是相同的行,甚至前几个字符在整个文件中也是唯一的。意味着&#34;开始&#34;只在文件中出现一次。
答案 0 :(得分:4)
对于触发器的固定位置启动:
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
是字段类型,允许进行子字符串搜索。
然后在OMIT=
上OMIT COND=
(类似于OUTFIL
但在控制卡处理完文件之后)从标志中进行实际选择(自动扩展记录不包括来自PUSH的值将被设置为空白)和BUILD将丢弃额外的字节。
需要额外的字节,因为SORT没有定义的“程序存储” - 额外的字段必须在记录上(或者,仅在当前记录的持续时间内,在PARSEd字段中)。
答案 1 :(得分:0)
很抱歉没有评论,因为我没有足够的声誉,我正在写这个答案。将在以后删除
您可以通过两种方法实现这一点,即通过REXX或JCL。 请告诉我们您到目前为止所尝试的内容,以便我们了解要改进的内容。