REXX/SORT 拆分顺序文件

REXX/SORT split sequential file

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

line1
line2
line3
start line4
line5
line6

在这种情况下,我需要搜索 "start" 并使用 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. 触发器可以是该行的一部分,也可以是整行。这并不重要,因为它在每个文件中始终是同一行,甚至前几个字符在整个文件中都是唯一的。表示 "start" 在文件中只出现一次。

抱歉没有发表评论,因为我没有足够的声誉,我正在写这篇回答。稍后将删除它

您可以通过两种方法实现此目的,即通过 REXX 或 JCL。 请向我们展示您到目前为止所做的尝试,以便我们找出需要改进的地方。

对于触发器的固定位置启动:

  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) , 到组中所有记录(包括当前记录)的那个位置。在这种情况下,"group" 是文件的其余部分。

SS 是允许子字符串搜索的字段类型。

然后 OMIT=(类似于 OMIT COND=,但在文件已被控制卡处理后)在 OUTFIL 上从标志(自动扩展记录)中进行实际选择不具有来自 PUSH 的值将被设置为空白)和 BUILD 以丢弃额外的字节。

需要额外的字节,因为 SORT 没有 "program storage" 定义 - 额外的字段必须在记录中(或者,仅在当前记录的持续时间内,在 PARSEd 字段中)。