当我编译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
的另一个程序时,它工作正常并且编译成功。所以我不明白为什么原始程序没有编译?
答案 0 :(得分:3)
我能够重现错误,并成功编译。您的断言是正确的,错误是由于两个文件中的字段定义不同。但是,当您仅使用文件定义和返回或*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;
答案 1 :(得分:1)
要防止RPG生成I和O规范,请将QUALIFIED关键字添加到文件中。这也将导致记录格式由文件名限定。因此,不要写入DA595FMT,而是写入DA595F.DA595FMT。
答案 2 :(得分:-1)
合法的方法更好地避免结构冲突并从不必要的数据结构声明中节省资源。