当我编译一个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创建另一个程序时,它工作得很好,并且编译成功。所以我不明白为什么原始程序不能编译?
发布于 2017-01-24 00:50:35
我能够重现错误,并成功编译。您的断言是正确的,即错误是由于字段在两个文件中的定义不同而引起的。但是,当您仅使用文件定义和return或*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;发布于 2017-01-24 22:59:22
要防止RPG生成I和O规范,请将QUALIFIED关键字添加到文件中。这也会导致记录格式被文件名限定。因此,您可以写入DA595F.DA595FMT,而不是写入DA595FMT。
发布于 2017-01-26 00:20:34
限定方法更好地避免了结构冲突,并从不必要的数据结构声明中节省了资源。
https://stackoverflow.com/questions/41810892
复制相似问题