Hi Alan,

if you mean, that a D-spec %LEN should get the actual length of the contents of a VARCHAR at runtime? Then NO - this isn't possible.

If you use %LEN in a D-spec with a VARCHAR field, it will return the same result als %LEN(...:*MAX) would return for that VARCHAR field at runtime - the maximum length of the VARCHAR contents according to the D-spec where the VARCHAR was defined. The %LEN in a D-spec must be resolved at compile time.

So again - NO you can't define a field at compile time based on the length of another fields contents at runtime.

HTH
Daniel


Am 06.12.2025 um 14:59 schrieb Infodorado InfoDorado <infodorado@xxxxxxxxxxx>:

Sorry the previous message "sent itself" before I finished.

Isn't there a bif or technique that can be used in the D-specs to get the size of the %len() part of the VARCHAR, or get to the actual data of the variable?

--Alan Cassidy


On 12/05/2025 10:12 PM EST Daniel Gross <daniel@xxxxxxxx> 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.
--
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.