Search code examples
ibm-midrangerpgle

RPG compilation error


When I compile an RPG program, I get the error shown below :

*RNF7408 30      1 The length of the input field does not match the definition of the field; specification is ignored.

The field mentioned as part of this error was EXITAX which is of size 15.2 in WR654F and 9.2 in DA595F. I was under assumption that this is due to two files(WR654F and DA595F) having one field with the same name (EXITAX) but different sizes declared in the F specs:

FWR654F    IF   E             DISK
FDA595F    O  A E           K DISK

But when I created another program with just the above two specs and *inlr = *on for sake of compilation, it worked fine and compiled successfully. So I don't understand why the original program is not compiling?


Solution

  • I was able to reproduce the error, and the successful compile. You are correct in your assertion that the error is due to the field being defined differently in the two files. But it does not appear when you compile with just the file definitions and a return or *INLR = *ON. The RPG compiler apparently does not attempt to generate O specs for DA595F unless you actually write to the file. so in your test you need to add a write operation to the output record. Then you will see the error.

    Just in case your next question is, "How do I fix it?" One way would be to read into and write from a data structure. Like this:

       dcl-ds file1ds        LikeRec(file1r: *input) Inz;
       dcl-ds file2ds        LikeRec(file2r: *output) Inz;
    
       read file1 file1ds;
       eval-corr file2ds = file1ds;
       write file2r file2ds;