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

时间:2015-02-27 02:43:30

标签: sorting cobol mainframe

我有两个文件FILE1& FILE2,并且假设两者都是30个字符的固定长度。我需要找到FILE1&的记录。 FILE2包含字符串'COBOL',其中此关键字的位置未知,并且每个记录都会更改。下面更清楚的是样本布局。

FILE1:

NVWGNLVKAKOIVCOBOLLKASVOIWSNVS           
SOSIVSNAVIS7780HLSVHSKSCOBOL56           
ZXCVBNMASDFGHJJKKLIIUYYTRREEWQ          
1234567890COBOL1234556FCVHJJHH           
COBOL1231231231231231341234334 

FILE2:

123456789012345678901234567890           
COBOL1231231231231231341234334          
GYKCHYYIIHHFTIUIHGJUGTUHGFUYHG         

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

输出FILE-OP1 :(包含来自file1& file2的所有COBOL关键字记录) NVWGNLVKAKOIVCOBOLLKASVOIWSNVS
    SOSIVSNAVIS7780HLSVHSKSCOBOL56
    1234567890COBOL1234556FCVHJJHH
    COBOL1231231231231231341234334
    COBOL1231231231231231341234334

输出文件-OP2(仅包含来自file1& file2的COBOL关键字的匹配记录)   COBOL1231231231231231341234334

3 个答案:

答案 0 :(得分:0)

一个例子,伪代码,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

对文件2重复,同一程序指向您的其他文件。

由于这听起来像是作业,我已经留下了一些你需要在该代码中修复的小怪癖,但你应该看到它爆炸或失败的地方,并能够合理地轻松解决这些问题。

如果您需要在两个文件之间进行某种匹配和删除,那么这是一种不同的动物,您需要获得它的规则。您是否尝试匹配位于相同位置的“COBOL”文件?你期待什么行为?

答案 1 :(得分:0)

对于您的FILE1,将其排序到整个输入数据上,仅包含包含COBOL的记录并附加序列号(以原始序列显示输出)。如果可能存在重复记录,请同时附加序列号的SORT。

类似于FILE2。

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

然后"匹配"这些文件,这里是布鲁斯·马丁的一些有用的伪代码:https://stackoverflow.com/a/22950005/1927206

在匹配之后,您需要在序列号上单独输出两个输出,然后删除序列号。

记住你只需要知道数据中是否存在COBOL,如果在前两个SORT中使用COBOL,你可以通过多种方式找到COBOL这个词(记住你只需要知道它是否在那里,不是它在哪里或它可能有多少次):正如Joe Zitzelberger所示,你可以使用一个字节的引用修改,但要注意不要超出你的PERFORM VARYING数据(如果你使用编译器选项SSRANGE)我不清楚我的意思);你可以使用INSPECT; UNSTRING;串;使用OCCURS定义数据,长度为5,并使用索引表示单字节表;使用OCCURS依赖;做它"一次一个字节&#34 ;;等

答案 2 :(得分:0)

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

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

步骤1.读取两个infiles,生成一个outfile OP-1

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

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

在这两个上运行joinkeys以查找匹配项。 ==> outfile OP-2

本质上,此策略用于消除连接中的非限定行。