2

我负责将 1990 年代一位顾问开发的旧的基于 UNIX 的 COBOL 批处理应用程序转换为 Windows 环境,但仍使用 Microfocus(Eclipse 等)在 COBOL 中。

这是一个非常简单的任务,除了一个小故障。

旧应用程序从未在 COBOL 中进行任何显式文件处理。也就是说,COBOL 程序中没有 FD、OPEN、READ、WRITE 或 CLOSE 命令。相反,他们编写了一个 C 程序,该程序将根据传递给它的参数(包括但不限于文件名、rec 长度和所需的功能)执行这些不同的功能之一。

我想用 COBOL 重写该子例程,这需要对正在转换的 COBOL 主程序进行很少的修改。也就是说,它仍会调用该子例程,但它现在将在 COBOL 中而不是 C 中。

但挑战在于如何编写该子程序,以便它能够对大多数文件进行操作。我认为我必须走可变长度记录的路线,因为它们实际上可以是任何长度,直到要确定的最大大小,但似乎很容易出错(因为它试图打开不同类型的文件) .

有人对此有任何经验或对此类任务有任何想法吗?如果不是,我可能不得不采取直截了当的方式,用需要执行的特定 COBOL 命令(打开、读取等)替换每个调用语句到该子例程,显然每个文件的 FD 和 SELECT 都需要添加到主程序。

提前致谢。

4

1 回答 1

0

你也许可以

CALL "subprogram" USING fd-name

fd 名称在哪里

FD fd-name.
...

所以,是吗?也许?,你也许可以拉出一个可以接受通用 COBOL 文件的子程序。但是,然后你会进入匹配的记录布局和其他有趣的事情,所以要小心。这可能不适用于 COBOL 到 COBOL,但它确实适用于 COBOL 到 C 并返回,因为您最终传递了对文件控制块的引用。

您可能会更好地查看库存系统库。诸如此类的东西CBL_OPEN_FILE以及CBL_READ_FILE它们是否可用。这将使您与当前 C 子程序中假定的流式 IO 更加匹配。

或者,正如比尔在评论中所建议的那样,尝试找出使用 C 的原因,如果您不想要外来函数,只需深入研究并编写新的 COBOL 过程,因为这最终可能会更好读。

于 2016-04-15T21:08:02.310 回答