Hi Brian,

Marco is absolutely right - of course I-specs are compiled AFTER D-specs - so if the %LEN in a D-spec is referencing an I-spec, it could not work.

I finally had the time to try all this on PUB400 - so this will work:

dcl-f myFile disk usage(*input); // the original file
dcl-ds myType likerec(myFileR) template; // a template from the record format
dcl-s vc varchar(%len(myType.field)) inz; // a field length derieved from the template

Of course you can also create the template directly with EXTNAME(...).

The template data structure doesn't use any Space in your program - it only defines a "type" that can be referenced to define other fields or data structures.

Sorry for causing some irritation - in fact I haven't thought about the compile sequence of the specifications. Our team also tends to have a "typeTableName" data structure template for nearly every database table, and we use those intensively.

HTH
Daniel


Am 06.12.2025 um 16:27 schrieb Brian Parkins <goodprophet.bp@xxxxxxxxx>:
You might like to test it your examples, Daniel. I cannot get them to compile unless I code:

dcl-c #LEN Const(200);
dcl-s w_address1 varchar(#LEN) inz;

- which doesn't satisfy Doug's request. (The wording in the manual is misleading.)

Brian.

On 06/12/2025 03:12, Daniel Gross wrote:
AFAIK - I might have to test it - this should be possible:

dcl-s w_address1 varchar(%len(phaddress1)) inz;

At least it should be possible to define a constant and use this to define your varchar variable:

dcl-c #LEN %len(phaddress1);
dcl-s w_address1 varchar(#LEN) inz;

As long as the expression value is resolvable at compile time. But I'm pretty sure, that also the first form should work.

-> https://www.ibm.com/docs/en/i/7.6.0?topic=length-len-used-its-value

And you can also use %LEN to get the maximum size of a VARCHAR variable, simply use:

%len(varchar_variable:*max)

-> https://www.ibm.com/docs/en/i/7.6.0?topic=lgsl-len-used-get-maximum-length-varying-length-expressions

But when %LEN is used in definition statement, it always returns the maximum length of variable length fields like VARCHAR. So it should also work the other way around:

dcl-s x_address1 char(%len(w_address1)) inz;

HTH
Daniel


Am 06.12.2025 um 03:41 schrieb Jon Paris <jon.paris@xxxxxxxxxxxxxx>:
Not quite, Charles. $SIZE returns the storage required to hold the field - it's capacity will be 2 or 4 less than that due to the storage used by the length.
So:
Dcl-S myVarLen Varchar(200) Inz; // %Len = 0, %Size = 202 bytes.
Jon Paris
Jon.Paris@xxxxxxxxxxxxxx
On Dec 5, 2025, at 6:08 PM, Charles Wilt <charles.wilt@xxxxxxxxx> wrote:
LIKE should pick up the both the type and size...
dcl-s w_address1 like(phaddress1);
note: %len() on a varchar is always the length of the current value. The
max size is retrieved using %size().
HTH,
Charles
On Fri, Dec 5, 2025 at 3:28 PM DEnglander--- via RPG400-L <
rpg400-l@xxxxxxxxxxxxxxxxxx> wrote:
Does anyone know how to do something like this:
I would like to define a %TRIMmed disk field that is CHAR(200)
[PHADDRESS1] as a VARCHAR and eliminate the %TRIMs.
So as not to hardcode the size of the VARCHAR, can I define it as VARCHAR
but based on the length of the CHAR(200) field? Something like:
dcl-s w_address1 varchar(%len(phaddress1));
Can that be done?
Thank you,
Doug
"CONFIDENTIALITY NOTICE: This e-mail transmission (and/or the attachments
accompanying it) contain confidential information belonging to the sender.
The information is intended only for the use of the intended recipient. If
you are not the intended recipient, you are hereby notified that any
disclosure, copying, distribution or the taking of any action in reliance
on the contents of the information is strictly prohibited. Any
unauthorized interception of this transmission is illegal under the law.
If you have received this transmission in error, please promptly notify the
sender by reply e-mail, and then destroy all copies of the transmission."
--
This is the RPG programming on IBM i (RPG400-L) mailing list
To post a message email: RPG400-L@xxxxxxxxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxxxxxxxx
Before posting, please take a moment to review the archives
at https://archive.midrange.com/rpg400-l.
Please contact support@xxxxxxxxxxxxxxxxxxxx for any subscription related
questions.
--
This is the RPG programming on IBM i (RPG400-L) mailing list
To post a message email: RPG400-L@xxxxxxxxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxxxxxxxx
Before posting, please take a moment to review the archives
at https://archive.midrange.com/rpg400-l.
Please contact support@xxxxxxxxxxxxxxxxxxxx for any subscription related questions.
--
This is the RPG programming on IBM i (RPG400-L) mailing list
To post a message email: RPG400-L@xxxxxxxxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxxxxxxxx
Before posting, please take a moment to review the archives
at https://archive.midrange.com/rpg400-l.
Please contact support@xxxxxxxxxxxxxxxxxxxx for any subscription related questions.

--
This is the RPG programming on IBM i (RPG400-L) mailing list
To post a message email: RPG400-L@xxxxxxxxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxxxxxxxx
Before posting, please take a moment to review the archives
at https://archive.midrange.com/rpg400-l.

Please contact support@xxxxxxxxxxxxxxxxxxxx for any subscription related questions.

As an Amazon Associate we earn from qualifying purchases.

This thread ...

Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2025 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.