2

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

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 是固定的。准确地说是FBA。LRECL 170. 触发器可以是这条线的一部分,也可以是整条线。这并不重要,因为它在每个文件中始终是同一行,甚至前几个字符在整个文件中也是唯一的。意味着“开始”在文件中只出现一次。

4

2 回答 2

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 字段中)。

于 2015-01-05T10:34:15.343 回答
0

很抱歉没有发表评论,因为我没有足够的声誉,我正在回答这个问题。稍后将删除此

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

于 2015-01-05T09:07:36.073 回答