Lol, I did point out that this is a hack...
I understand the verbose code argument, to a point. Well named fields and procedures, qualified DS, free-format code, indenting, inline commenting, and so forth, are great! In this case, I think it is very easy to identify a list of values that is being searched. A technical note in your standards guide could expose your developers to the technique and syntax.
The real obfuscation I suppose is in the logical test "> 0", which simply means that chk1 contained a value that matched something in the list. Testing "= 0" is similar to NOT IN functions.
-Eric
-----Original Message-----
From: rpg400-l-bounces@xxxxxxxxxxxx [mailto:rpg400-l-bounces@xxxxxxxxxxxx] On Behalf Of Koester, Michael
Sent: Wednesday, November 02, 2011 11:41 AM
To: RPG programming on the IBM i / System i
Subject: RE: Nested IF, OR and AND in /free
Eric,
From the perspective of one who has to maintain as well as develop, I must say that I've become a big fan of "explicit" code over "efficient" code. I suspect your technique has its place, but at a glance, my humble brain can resolve a stack of "if this or if that", a lot faster than it can figure out what's going on in the %scan.
I find myself writing code that I puzzle over later, and have to smack myself for having been so clever.
(my t'pence)
-Michael
-----Original Message-----
From: rpg400-l-bounces@xxxxxxxxxxxx [mailto:rpg400-l-bounces@xxxxxxxxxxxx] On Behalf Of DeLong, Eric
Sent: Wednesday, November 02, 2011 11:54 AM
To: RPG programming on the IBM i / System i
Subject: RE: Nested IF, OR and AND in /free
While not EXACTLY an "in list" function, for the example below, there is a hack...
If ( %scan(chk1 : '1|7|8|9') > 0 ) and chk6 <> ' '
Caveat: I used a pipe symbol to separate my listed values, so that the technique works for fields of different lengths. If chk1 were two bytes long, then each of the elements in the list should be two bytes, separated by some character that is never expected to be in the source field. This helps to ensure that scan will only match on string patterns between the separation character.
-Eric DeLong
-----Original Message-----
From: rpg400-l-bounces@xxxxxxxxxxxx [mailto:rpg400-l-bounces@xxxxxxxxxxxx] On Behalf Of Alan Campin
Sent: Tuesday, October 25, 2011 4:37 PM
To: RPG programming on the IBM i / System i
Subject: Re: Nested IF, OR and AND in /free
You can't use a list on RPG Free
/free
if (chk1 = '7' or
chk1 = '8' or
chk1 = '9' or
chk1 = '1') and
chk6 <> ' ';
/end-free
On Tue, Oct 25, 2011 at 2:53 PM, <Nick_Radich@xxxxxxxxxxxxxx> wrote:
Hello everyone,
We are at V5R4.
I am trying to get more into using /free, after 30 years of programming.
I have included the following snippet of code that will not compile. I
get error RNF7421 on the compile listing.
I have also tried entering this using WDSC.
Can I do this code at V5R4?
/free
if chk1 = ('7' or '8' or '9')
or chk1 = '1'
and chk6 <> ' ';
/end-free
Any help or pointers will be greatly appreciated.
Thanx,
Nick
Nick Radich
Sr. Programmer/Analyst
EPC Molding, Inc.
Direct (320) 679-6683
Toll free (800) 388-2155 ext. 6683
Fax (320) 679-4516
nick_radich@xxxxxxxxxxxxxx
--
--
This is the RPG programming on the IBM i / System i (RPG400-L) mailing list
To post a message email: RPG400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit:
http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at
http://archive.midrange.com/rpg400-l.
As an Amazon Associate we earn from qualifying purchases.