Cobol 如何从一个位置具有相同值的文件中删除记录?

Cobol 如何从一个位置具有相同值的文件中删除记录?,cobol,mainframe,jcl,Cobol,Mainframe,Jcl,我有一个顺序文件,记录长度为11。从第9位到第11位之间有一个字段,属于图9(03)。我想删除在上述指定位置具有相同数据的所有记录。这只需要使用JCL来完成。可以使用任何实用程序,但应支持microfocus cobol。请参见下面的示例: 示例文件: Rob ,d,012 Mike ,h,013 Kim ,g,014 Bob ,k,014 Wiz ,t,015 在上面的示例中,我想删除Kim和Mike的行,因为它具有相同的位置值,即014,最终输出应为: Rob ,d,012 Mi

我有一个顺序文件,记录长度为11。从第9位到第11位之间有一个字段,属于图9(03)。我想删除在上述指定位置具有相同数据的所有记录。这只需要使用JCL来完成。可以使用任何实用程序,但应支持microfocus cobol。请参见下面的示例:

示例文件:

Rob  ,d,012
Mike ,h,013
Kim  ,g,014
Bob  ,k,014
Wiz  ,t,015
在上面的示例中,我想删除Kim和Mike的行,因为它具有相同的位置值,即014,最终输出应为:

Rob  ,d,012
Mike ,h,013
Wiz  ,t,015

请在DFSORT实用程序的SYSIN DD中尝试这些语句

SORT FIELDS=COPY
OMIT COND=(9,3,ZD,EQ,014)
Microfocus使用mfsort实用程序,它模拟IBM DFSORT产品的所有主要功能

mfsort option copy
  use input-file [record definition]
      [org organization] [key structure]
  give output-file [record definition]
      [org organization] [key structure]
  omit cond (9,3,nu,eq,014)

有关mfsort的更多详细信息,请参见

。现在也可以精确地同步排序。这些是cots实用程序,可以删除重复记录。

按名称排序,并按名称累加记录数

使用OUTFIL命令删除包含多条记录的记录:

RECORD TYPE=F,LENGTH=11
INREC FIELDS=(1,11,C'0001')  * Include a dummy field to sum up
SORT FIELDS=(9,3,BI,A)       * Sort by the "id"
SUM FIELDS=(12,4,ZD)         * Count the number of records by "id"
OUTFIL FILES=OUT,BUILD=(1,11),OMIT=(12,4,NE,C'0001')  * Get rid of duplicated records
END

这应该适用于DFSORT或SYNCSORT,但不确定MFSORT。

排序实用程序将执行此操作(使用排序字段9-11和sum选项)。谷歌dfsort。我不知道这是否是microfocus选项。您能建议我如何通过SYSIN将命令传递到DFSORT中吗?谢谢您建议的代码,但它似乎不能完全满足我的要求。给定位置的值不会固定。值可以是任何值。。我只想删除那些在那个位置有重复值的行。最后的输出应该是一个文件,在该文件中,在该特定位置没有超过1行具有相同值。您可以尝试
mfsort排序字段(9,3,nu,a)sum fields=none
。这将删除重复的值并仅保留一行。