Re: Why you shouldn't be afraid to use VARCHAR in RPGLE

Infodorado InfoDorado via RPG400-L <[email protected]>
Newsgroups gmane.comp.lang.as400.rpg
Message-ID <[email protected]>
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 <[email protected]> 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 <[email protected]>:
> > > 
> > > 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
> > > [email protected]
> > > 
> > > 
> > > 
> > >> On Dec 5, 2025, at 6:08 PM, Charles Wilt <[email protected]> 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 <
> > >>> [email protected]> 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: [email protected]
> > >>> To subscribe, unsubscribe, or change list options,
> > >>> visit: https://lists.midrange.com/mailman/listinfo/rpg400-l
> > >>> or email: [email protected]
> > >>> Before posting, please take a moment to review the archives
> > >>> at https://archive.midrange.com/rpg400-l.
> > >>> 
> > >>> Please contact [email protected] for any subscription related
> > >>> questions.
> > >>> 
> > >>> 
> > >> --
> > >> This is the RPG programming on IBM i (RPG400-L) mailing list
> > >> To post a message email: [email protected]
> > >> To subscribe, unsubscribe, or change list options,
> > >> visit: https://lists.midrange.com/mailman/listinfo/rpg400-l
> > >> or email: [email protected]
> > >> Before posting, please take a moment to review the archives
> > >> at https://archive.midrange.com/rpg400-l.
> > >> 
> > >> Please contact [email protected] for any subscription related questions.
> > >> 
> > > 
> > > --
> > > This is the RPG programming on IBM i (RPG400-L) mailing list
> > > To post a message email: [email protected]
> > > To subscribe, unsubscribe, or change list options,
> > > visit: https://lists.midrange.com/mailman/listinfo/rpg400-l
> > > or email: [email protected]
> > > Before posting, please take a moment to review the archives
> > > at https://archive.midrange.com/rpg400-l.
> > > 
> > > Please contact [email protected] for any subscription related questions.
> > > 
> > -- 
> > This is the RPG programming on IBM i (RPG400-L) mailing list
> > To post a message email: [email protected]
> > To subscribe, unsubscribe, or change list options,
> > visit: https://lists.midrange.com/mailman/listinfo/rpg400-l
> > or email: [email protected]
> > Before posting, please take a moment to review the archives
> > at https://archive.midrange.com/rpg400-l.
> > 
> > Please contact [email protected] for any subscription related questions.
> -- 
> This is the RPG programming on IBM i (RPG400-L) mailing list
> To post a message email: [email protected]
> To subscribe, unsubscribe, or change list options,
> visit: https://lists.midrange.com/mailman/listinfo/rpg400-l
> or email: [email protected]
> Before posting, please take a moment to review the archives
> at https://archive.midrange.com/rpg400-l.
> 
> Please contact [email protected] for any subscription related questions.
-- 
This is the RPG programming on IBM i (RPG400-L) mailing list
To post a message email: [email protected]
To subscribe, unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/rpg400-l
or email: [email protected]
Before posting, please take a moment to review the archives
at https://archive.midrange.com/rpg400-l.

Please contact [email protected] for any subscription related questions.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.