Re: Why you shouldn't be afraid to use VARCHAR in RPGLE
Daniel Gross <[email protected]>
| Newsgroups | gmane.comp.lang.as400.rpg |
|---|---|
| Message-ID | <[email protected]> |
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.