向现有COBOL数据文件添加字段

向现有COBOL数据文件添加字段,cobol,Cobol,我有一个现有的MF COBOL 4.0程序,在ISAM文件中有多年的数据,但我需要在现有文件中添加一个新字段。该记录目前有1208个字符,我需要再添加10个字符 如果我只是将额外的PIC X(10)字段放在我的copybook中,它会给我一个错误。更改copybook时,您只是在更改程序中使用的数据的表示形式。您是否也应该重新构造数据源(即ISAM文件) 您需要修改基础数据文件以匹配COBOL中的文件定义。这样做的一种方法是定义一行输出,与您的数据行现在的样子完全相同,但在其末尾有一个额外的pi

我有一个现有的MF COBOL 4.0程序,在ISAM文件中有多年的数据,但我需要在现有文件中添加一个新字段。该记录目前有1208个字符,我需要再添加10个字符


如果我只是将额外的PIC X(10)字段放在我的copybook中,它会给我一个错误。

更改copybook时,您只是在更改程序中使用的数据的表示形式。您是否也应该重新构造数据源(即ISAM文件)

您需要修改基础数据文件以匹配COBOL中的文件定义。这样做的一种方法是定义一行输出,与您的数据行现在的样子完全相同,但在其末尾有一个额外的picx(10)。然后,您将逐行读取数据,并将其输出到一个新位置,该位置的末尾有10个额外的空格。这样,您的数据长了10个字符,您可以返回并将额外的picx(10)添加到主程序中。在那之后应该可以用了。

迟来的回答,但我想你可能会感兴趣

我在Cobol系统上工作了20多年,我们已经多次遇到这个问题

我们的索引文件结构的变化是我们认为的“主要版本”。这些需要特定的转换程序,这些程序:

  • 重命名物理文件,将其移至“旧”文件
  • 打开文件的“旧”版本(使用更改前的副本版本)
  • 打开(创建)文件的“新”版本
  • 将每个“旧”记录的内容移动到“新”记录并写入
  • 当然,这些转换要求系统处于“关闭”状态,因此它们被视为主要版本


    如果您的文件将来可能会添加字段,则可以在索引文件的末尾添加额外的填充符,以便处理添加的新字段。我们倾向于添加50或100的填充物。当然,如果您更改了一个现有字段,甚至更改了任何键的结构,这对您没有帮助。

    对于文件错误,您需要随时准备一个列表。我建议从你在网上找到的列表开始,任何时候当你遇到一个5秒钟内无法解决的错误时,添加一个关于解决方案的详细解释,以便下次发生时你能在笔记中看到它。以下是一些不错的列表

    在我的列表中,文件状态39为:

    • OPEN-CONFLICT-FILE-ATR-由于在程序中为该文件指定的固定文件属性之间检测到冲突,“OPEN”语句未成功。这些属性包括文件的组织(顺序、相对或索引)、主记录键、备用记录键、代码集、最大记录大小和记录类型(固定或可变)
    这是来自个性化注释:检查JCL中分配给ddname的文件。特别是长度分配。在您的情况下,您知道长度不匹配,因为您刚刚更改了程序


    有一些工具可以重新格式化数据集,特别是SYNCSORT。当然,您也可以自己编写。

    您会遇到什么样的错误?是编译时错误还是运行时错误?正如彼得所要求的,给我们更多的细节。特定的消息编号/文本将非常有用。它会给我一个错误39。您没有指出,但我猜您在运行时会得到“错误39”。文件状态39表示实际文件结构与您在程序中如何定义文件结构之间存在冲突。此错误发生在您的OPEN语句上。如果是这种情况,下面由avisser提供的答案是正确的,那么您需要重新构造文件以匹配程序中修订的记录定义。现在你正试图用一个只知道“橙子”的程序来阅读一张“苹果”唱片(也许是一个糟糕的类比——但我现在感觉不是很有创意)。