Sometimes you want to read a file but a field on that file is giving you problems because the name conflicts with something that already exists in your program. There are a few scenarios for this head scratching problem, but luckily it also has several solutions. So lets look at some basic problems:
FFileName IF E K DISK f PREFIX(A_)
This will prefix all fields for this file with “A_”
Define an externally described data structure and rename fields inside that data structure.
D Wrk_Rcd E DS EXTNAME(FileName) D Wrk_Field1 E EXTFLD(Field1) D Wrk_Field2 E EXTFLD(Field2)
In this example Field1 and Field2 are respectively renamed Wrk_Field1 and Wrk_Field2. Other fields are unaltered.
However I think that you’d be better off using the PREFIX keyword instead to get rid of that EXTFLD so RPGIII style.
D Wrk_Rcd E DS EXTNAME(MyFile) D PREFIX(Wrk_) /free Read MyFile Wrk_Rcd;
The PREFIX keyword is used to partially rename the fields in an externally described file. The character string or character literal specified is prefixed to the names of all fields defined in all records of the file specified in positions 7-16. In addition, you can optionally specify a numeric value to indicate the number of characters, if any, in the existing name to be replaced. If the ’nbr_of_char_replaced’ is not specified, then the string is attached to the beginning of the name.
If the ’nbr_of_char_replaced’ is specified, it must be a numeric constant containing a value between 0 and 9 with no decimal places. For example, the specification PREFIX(YE:3) would change the field name ’YTDTOTAL’ to ’YEARTOTAL’. Specifying a value of zero is the same as not specifying ’nbr_of_char_replaced’ at all.
You can explicitly rename a field on an input specification, even when the PREFIX keyword is specified for a file. The compiler will recognize (and require) the name which is first USED in your program. For example, if you specify the prefixed name on an input specification to associate the field with an indicator, and you then try to rename the field referencing the unprefixed name, you will get an error. Conversely, if you first rename the field to something other than the prefixed name, and you then use the prefixed name on a specification, you will get an error at compile-time.
The total length of the name after applying the prefix must not exceed the maximum length of an RPG field name.
The number of characters in the name to be prefixed must not be less than or equal to the value represented by the ’nbr_of_char_replaced’ parameter. That is, after applying the prefix, the resulting name must not be the same as the prefix string.
IBM i Software Developer, Digital Dad, AS400 Anarchist, RPG Modernizer, Alpha Nerd and Passionate Eater of Cheese and Biscuits. Nick Litten Dot Com is a mixture of blog posts that can be sometimes serious, frequently playful and probably down-right pointless all in the space of a day. Enjoy your stay, feel free to comment and in the words of the most interesting man in the world: Stay thirsty my friend.
Turnover Pre-Run and Post-Run Promotion Form Commands
Funny Spam mail from Grill Insider
ILEditor connection problem with PUB400
IBM Rational Developer Ports
Upload a SAVF using IFS and IBM i Access Client Solutions (no FTP)
Using RPGLE to extract invoice numbers from an alpha string
How do we Check for Batch or Interactive in CLLE
Second Look: IBM RDi Extract Procedure Refactoring feature
Rational Developer for IBM i 9.6 Fixpack 7 is pretty pretty good