2010-07-21 116 views
0

首先,这里的全部源代码: http://pastebin.com/5teGNrPC所有的怪异COBOL错误

我得到一个奇怪的COBOL错误,我无法找到这意味着什么。 它说,打开错误(请参见下面的截图: Screenshot http://img251.imageshack.us/img251/623/screenshotyj.png ) (在http://img251.imageshack.us/img251/623/screenshotyj.png全尺寸)

它不会发生,如果我第一次使用“新文件”,之后添加一条记录。

这里的应用程序二进制文件,以及一些日志文件它产生: http://www.mediafire.com/?5enhwqcvid9djnr

非常感谢,

伊凡

PS:这是富士通的NetCOBOL方言。

回答

1

我想多了解一些有关文件I/O问题的信息,您是 。如果再次并立即

    启动程序

    • 创建新的文件
    • 添加记录
    • 退出

    然后:如果我理解正确的话,你可以做没有问题如下

  • 添加记录

程序炸弹带有“奇怪的错误”。

是否可以读取 并显示您在初次运行中写入的记录?我想知道以前的 写入是否成功,这反过来引起对文件完整性的质疑。

我建议探索OPTIONAL关键字为SELECT和 加入FILE STATUS条款了。每次I/O操作(打开,关闭,写入,读取等)后,应检查文件状态 。与FILE STATUS相关联的变量中包含的值 需要您花费很长的时间来解决问题。以下table 描述了FILE STATUS值。

您可能还想查看tutorial的 处理COBOL中的索引文件。

我可能不知道你的文件I/O问题是什么,但我确实看到 以后会导致麻烦的东西!

您已经使用下面的结构:

PERFORM Some-Paragraph 
... 
Some-Paragraph. 
... 
IF Some-Condition 
    PERFORM Some-Paragraph 
END-IF 
. 

最后PERFORM Some-Paragraph是 段落本身的范围之内。 COBOL编译器可能不会将此标记为错误,但 行为未定义。 COBOL PERFORM不符合您从 其他语言可能熟悉的CALL/RETURN语义 。你在这里编码通常被称为 作为'逻辑炸弹'。我所指的内容的详细说明可以发现 here

+0

我可以读取和显示在初始运行中写入的记录,但是如果我退出应用程序,数据将被写入(我可以用十六进制编辑器查看它),但无法再读取它。 但是我将重新构造程序,并重新编写它。 感谢您的帮助! 伊万 – friedkiwi 2010-07-25 14:32:46

1

也许程序试图在创建文件之前访问该文件。 '新文件'选项可能会使用OPEN OUTPUT语句创建数据文件,并且添加记录会成功。

+0

如果首先创建一个新文件,并且之后将记录添加到新文件,它确实有效。但是,如果我退出应用程序,并尝试重新打开该文件并添加新记录,则它会与上述消息一起崩溃。 – friedkiwi 2010-07-22 07:57:19

1

第一个错误可能是文件状态错误35,打开一个不存在的文件。 你应该重构你的代码。在数据录入程序中,您只需要每次执行一次OPEN和CLOSE 语句。 在这个程序中,OPEN语句应该尽可能靠近源代码的开始(在开始时执行一次,以及为了可读性),CLOSE应该在STOP RUN之前。