ibm-midrange - RPG编译错误

标签 ibm-midrange rpgle

当我编译 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/

相关文章:

c# - 一条SQL汇总不同的 'group by'级别

sql - DB2/400 中的 if-else 语句

db2 - AS400索引配置表

XML 和 iSeries RPGLE - 开发工具?

java - 如何声明和调用从 RPG 获取二维 bye 数组参数的 java 方法?

git - 将 RPGLE 从 GitHub 集成到 iSeries (IBM i)

C++ IBM i Access API 运行远程命令并获取输出

java - 如何使用 Java API(JTOPEN) 读取 QTEMP 文件中的 PF

ibm-midrange - 如何在 rpg 程序中定义一个可以在调用函数中访问的全局变量

ibm-midrange - 使用一行设置 %nullind rpg