查找匹配和不匹配的记录,关键字的位置未知

Find matched and unmatched records and position of key-word is unknown

我有两个文件 FILE1 和 FILE2,假设它们都是 30 个字符的固定长度。我需要从 FILE1 和 FILE2 中找到包含字符串 'COBOL' 的记录,其中该关键字的位置未知,并且每条记录都会发生变化。更清楚的是,下面是示例布局。

文件 1:

NVWGNLVKAKOIVCOBOLLKASVOIWSNVS           
SOSIVSNAVIS7780HLSVHSKSCOBOL56           
ZXCVBNMASDFGHJJKKLIIUYYTRREEWQ          
1234567890COBOL1234556FCVHJJHH           
COBOL1231231231231231341234334 

文件 2:

123456789012345678901234567890           
COBOL1231231231231231341234334          
GYKCHYYIIHHFTIUIHGJUGTUHGFUYHG         

任何人都可以向我解释如何使用 SORT 或 JOINKEYS 以及使用 COBOL 程序来做到这一点。 我需要两个输出文件。

输出 FILE-OP1 :(包含文件 1 和文件 2 中具有 COBOL 关键字的所有记录) NVWGNLVKAKOIVCOBOLLKASVOIWSNVS
SOSIVSNAVIS7780HLSVHSKSCOBOL56
1234567890COBOL1234556FCVHJJHH
COBOL1231231231231231341234334
COBOL1231231231231231341234334

输出文件-OP2(仅包含文件 1 和文件 2 中具有 COBOL 关键字的匹配记录) COBOL1231231231231231341234334

一个例子,伪代码,Cobol:

Open File1
Read File1 into The-Record
Perform until End-Of-File
  Perform varying II from 1 by 1
    until II > length of The-Record
    If The-Record (II:5) = 'COBOL'
      Display "Found COBOL at position " II
    End-If
  End-Perform
  Read File1 into The-Record
End-perform

使用指向您的其他文件的同一程序对 file2 重复。

因为这听起来像是家庭作业,所以我在代码中留下了一些你需要修复的小问题,但你应该看到它在哪里崩溃或失败,并且能够相当容易地解决这些问题。

如果您需要在两个文件之间进行某种匹配和删除,那是不同的动物,您需要为它制定规则。您是否试图匹配 "COBOL" 位于相同位置或其他位置的文件?您期望什么行为?

对于您的 FILE1,对整个输入数据进行排序,仅包括包含 COBOL 并附加序列号的记录(您以原始序列显示输出)。如果可能存在重复记录,也对您附加的序列号进行排序。

与 FILE2 类似。

每个程序的 SORT 可以是独立的(DFSORT 或 SyncSORT)或在 COBOL 程序中。

然后 "match" 文件,这是 Bruce Martin 提供的一段有用的伪代码:

从逻辑上讲,在匹配之后,您需要单独根据序列号对两个输出进行排序,然后删除序列号。

请记住,您只需要知道数据中是否存在 COBOL,如果对前两个 SORT 使用 COBOL,您可以通过多种方式找到 COBOL 一词(并记住您只需要知道它是否存在在那里,而不是它在哪里或它可能在那里多少次):正如 Joe Zitzelberger 所展示的,您可以使用一个字节的引用修改,但要注意不要使用 PERFORM VARYING 超出数据范围(使用编译器选项 SSRANGE如果你不清楚我的意思);你可以使用检查;解串;细绳;使用 OCCURS 定义数据,长度为 5,并使用索引为一个字节 table;使用 OCCURS 取决于;去做 "byte at a time";等等

这有点像自由格式数字处理。

您可以在 DFSORT 中使用 "SS" 来查找包含 cobol 的记录。

第一步,读取两个infile,生成一个outfile OP-1

INCLUDE COND=(1,30,SS,EQ,C'COBOL')

第二步。以与步骤 1 相同的方式生成工作文件。仅使用文件 1。 第三步。以与步骤 1 相同的方式生成工作文件。仅使用文件 2。

运行 这两个连接键以找到匹配项。 ==> 输出文件 OP-2

本质上,此策略用于从连接中消除不合格的行。