我有两个文件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
答案 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
本质上,此策略用于消除连接中的非限定行。