RPG编译错误

RPG compilation error

当我编译 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 为了编译,它运行良好并编译成功。所以我不明白为什么原来的程序编译不通过?

我能够重现错误,并成功编译。您断言错误是由于两个文件中的字段定义不同所致,您的断言是正确的。但是,当您仅使用文件定义和 return 或 *INLR = *ON 进行编译时,它不会出现。除非您实际写入文件,否则 RPG 编译器显然不会尝试为 DA595F 生成 O 规范。所以在你的测试中你需要向输出记录添加一个 write 操作。然后你会看到错误。

以防万一您的下一个问题是,"How do I fix it?"一种方法是从数据结构中读取和写入。像这样:

   dcl-ds file1ds        LikeRec(file1r: *input) Inz;
   dcl-ds file2ds        LikeRec(file2r: *output) Inz;

   read file1 file1ds;
   eval-corr file2ds = file1ds;
   write file2r file2ds;

要防止 RPG 生成 I 和 O 规范,请将 QUALIFIED 关键字添加到文件中。这也将导致记录格式由文件名限定。因此,与其写入 DA595FMT,不如写入 DA595F.DA595FMT。

QUALIFIED 方法可以更好地避免结构冲突并从不必要的数据结构声明中节省资源。