REXX/SORT 拆分顺序文件

Posted

技术标签:

【中文标题】REXX/SORT 拆分顺序文件【英文标题】:REXX/SORT split sequential file 【发布时间】:2015-01-05 08:43:50 【问题描述】:

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

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

【问题讨论】:

好的。您现在可以删除所有 cmets。将鼠标悬停在您添加的评论上,您将看到行尾出现一个 x。点击那个。现在所有信息都在您的问题中,所以这里是短暂的 cmets 可以走了。 【参考方案1】:

对于触发器的固定位置开始:

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于REXX/SORT 拆分顺序文件的主要内容,如果未能解决你的问题,请参考以下文章

PHP:将数据数组拆分为字母顺序

以递增的顺序将列表拆分为多个列表

是否可以使用 scikit-learn 指定决策树中的拆分顺序?

JSFL 命令将文本字段拆分为单词 - Flash 数组顺序错误

如何将 NSArray 拆分为按字母顺序排列的部分以与索引表视图一起使用

在 Oracle 中使用 regexp_substr 按顺序拆分字符串