当我编译 RPG 程序时,出现如下错误:
*RNF7408 30 1 The length of the input field does not match the definition of the field; specification is ignored.
作为此错误的一部分提到的字段是 EXITAX,其大小在 WR654F 中为 15.2,在 DA595F 中为 9.2。 我假设这是由于两个文件(WR654F 和 DA595F)具有一个具有相同名称(EXITAX)但在 F 规范中声明的大小不同的字段造成的:
FWR654F IF E DISK
FDA595F O A E K DISK
但是,当我创建另一个程序时,仅使用上述两个规范和 *inlr = *on
进行编译,它工作正常并成功编译。所以我不明白为什么原始程序无法编译?
最佳答案
我能够重现该错误,并成功编译。您的断言是正确的,错误是由于两个文件中的字段定义不同所致。但当您仅使用文件定义和返回或 *INLR = *ON
进行编译时,它不会出现。 RPG 编译器显然不会尝试为 DA595F 生成 O 规范,除非您实际写入该文件。因此,在您的测试中,您需要向输出记录添加一个write
操作。然后您将看到错误。
以防万一您的下一个问题是“我该如何修复它?”一种方法是读取和写入数据结构。像这样:
dcl-ds file1ds LikeRec(file1r: *input) Inz;
dcl-ds file2ds LikeRec(file2r: *output) Inz;
read file1 file1ds;
eval-corr file2ds = file1ds;
write file2r file2ds;
关于ibm-midrange - RPG编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41810892/