REXX / SORT拆分顺序文件

时间:2015-01-05 08:43:51

标签: mainframe rexx syncsort

我需要拆分顺序大型机文件。好吧,确切地说,我需要从特定关键字开始将此文件中的内容复制到另一个文件。例如:

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;只在文件中出现一次。

2 个答案:

答案 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。 请告诉我们您到目前为止所尝试的内容,以便我们了解要改进的内容。