What Wol & George Smith said.
MATCH's raison d'etre is _PATTERN_ matching.
(a) MATCH is relatively expensive to use for comparing simple literals.
(b) For MATCH, you need to enclose the pattern's literals in embedded
quotes to ensure that it is not interpreted as a pattern.
Per Wol's "M6AWT" example: M6AWT needs to be "'MCAWT'" or MATCH will
reinterpret it as "'M'6A'WT'", a 3-piece pattern.
Remember, every time MATCH is going to examine the 2nd argument to
figure out what pattern you're talking about this time, which brings us
back to point (a).
(c) MATCH will be confusing to the next maint pgmr: he'll think you're
talking about PATTERN matching, not simple literals.
George's INDEX() gets it right for shear efficiency,
On 10/31/2011 2:17 PM, George Smith wrote:
If you are trying to look for an arbitrary delimited string, I think
the safest thing to do is something like IF INDEX(',':X.STRING:',',
',':X.CODE:',',1)=0 THEN X.STRING=X.STRING:',':X.CODE
Efficiency matters if you do many iterations.
The LOCATE suggestions are arguably more readable if the rookie pgmr
following you is not familiar with the INDEX() technique (yet).
You may be surprised if you compare INDEX() performance to functionally
equivalent constructs using LOCATE, COUNT, MATCH, FINDSTR, etc..
If you're building X.STRING as you go, you might want to do something like:
X.STRING = ','
... get X.CODE ...
IF INDEX( X.STRING, (',':X.CODE:','), 1 )ELSE X.STRING:= X.CODE:','
X.STRING = [ 2, LEN( X.STRING)-2 ] ; * drop leading & trailing comma
Caveat: All the answers on this thread assume strings of a "reasonable"
size. Today maybe a few, several KB?? Tomorrow???
On 10/31/2011 6:20 PM, Wols Lists wrote:
I notice nobody seems to have pointed out a MAJOR gotcha in using
MATCH. If your code is as described, you'll avoid it, but what
validation have you got in place on X.CODE? Is it possible that
numbers could accidentally get into it? We did something like this
years ago with a line something like IF TEXT MATCH USER THEN where
USER was the department code followed by the user's initials. And
while most departments were alphas, there were a couple of
alphanumerics. All went well until Albert from M6 ran the code ...
USER = "M6AWT" Who can see the landmine just waiting to explode ... ?
U2-Users mailing list