Cobol - 是否可以删除Sequential文件中的记录?

时间:2017-11-28 16:15:34

标签: cobol mainframe

我需要删除前x行,我需要通过Cobol来完成。 可能吗?似乎DELETE语句仅适用于VSAM文件?

3 个答案:

答案 0 :(得分:7)

你说你必须通过COBOL这样做,但没有提供理由。通常,这种类型的操作是通过您商店的SORT实用程序完成的。大型机SORT实用程序通常包括复杂的记录选择标准。

是的,可以使用COBOL执行此操作。您在默认声明中的说法是正确的,即DELETE仅适用于VSAM。对于顺序文件,您必须读取整个文件,忽略前x个记录,然后将其余内容写入新的输出文件。我建议您编写COBOL代码,使其接受一个参数,指示要忽略的记录数(在您的示例中为x),如果文件中的记录少于x,则使用特定的返回码退出。

如果需要,可以将C运行时例程(fopenfreadfwritefclose)用于文件I / O,以使您的程序具有通用性,不是特定于一个特定文件。 COBOL要求在编译时知道LRECL,C运行时例程可以通过语言环境(LE)的宽限直接从COBOL调用,删除此要求。

重申一下:这通常是通过您商店的SORT实用程序完成的。

答案 1 :(得分:2)

通常,在文件前面删除一些记录的最佳答案是使用安装排序实用程序。

但是,在通用模式意义上,您希望根据COBOL中实现的业务逻辑从文件中删除某些记录,最好的方法是读取原始输入文件,通过逻辑过滤它,然后编写新文件输出文件。

完成该作业步骤后,立即使用系统实用程序将新文件复制到旧文件中,或者,如果是在线可用性,则删除旧文件并将新文件重命名为旧文件名。 / p>

答案 2 :(得分:2)

使用COBOL,您可以限制基于条件表达式将前x行写入顺序文件。 在我最近的一项任务中,我们必须根据事务文件中的类型字段更新主文件。类型将具有一个字节值,可能的值为“A”(表示将记录添加到主文件中),“M”(表示修改主文件中的记录)和“D”(表示删除记录中的记录)主文件)。对于类型'D'事务,我们只是跳过记录而不将其写入新的主文件。