Case insensitive DIM(FIND str$...)

Started by James Zukowski, June 14, 2019, 11:05:49 AM

Previous topic - Next topic

James Zukowski

Is there a way to modify DIM(FIND str$...) [Format 6] to allow case insensitivity? Many times, we'll know the word we're looking for, but not necessarily whether it will be UPPER, lower, or Mixed case. Perhaps adding an optional argument to the function call would permit this.
It might also be useful for DIM(FIND min/max...).
Thanks!
James Zukowski
Sr. Developer - J&E

BRAND>SAFWAY
Brand Industrial Services

Mike King

The issue would not be so much on the FIND but a potential issue if you had keys of "Mike", "MIKE" and "mike" -- which would the FIND return?

What you could do is spin through the array using the DIM(KEY array[index] ) to get the keys or use the FOR directive to walk through the elements as in:

0010 LET x$["John"]="Smith"
0020 LET x$["john"]="Jones"
0030 FOR n$ INDEX x${ALL}
0040 PRINT n$
0050 NEXT



Mike King
President - BBSysco Consulting
eMail: mike.king@bbsysco.com

James Zukowski

We're already doing the loop through to find what we want. I was just looking for a shorter method.

For the "potential issue": There could be several options:

  • 0 - Exact match required (default; optional; current operation)
  • 1 - Exact match preferred, else first occurrence any case
  • 2 - First occurrence any case

Consider this:
dim x$[1:6]
x$[1]="Dog",x$[2]="Cat",x$[3]="Pig",x$[4]="Ant",x$[5]="Pig",x$[6]="Zebra"
print dim(find x$="Pig")

currently returns 3, not 5, even though that is a valid response as well.

For this discussion, I've been referring to straightforward arrays, not an Associated or JSON array. How this would apply to those situations, I'm not sure.
James Zukowski
Sr. Developer - J&E

BRAND>SAFWAY
Brand Industrial Services

Mike King

Why not just use a memory file, it would allow you specify a case insensitive key.
Mike King
President - BBSysco Consulting
eMail: mike.king@bbsysco.com

James Zukowski

While that is certainly an alternative, and I have done that in the past as well, there are times when the sequence needs to be maintained (correspondence to a list box, for example).
James Zukowski
Sr. Developer - J&E

BRAND>SAFWAY
Brand Industrial Services

Mike King

So just write the data with a sequence number as in:

OPEN (1) "*memory*;keydef=[1:1:4:B],[2:1:10:C]"
WRITE (1) 1, "Dog"
WRITE (1) 2, "Cat"
WRITE (1) 3, "Pig"
WRITE (1) 4, "Ant"
WRITE (1) 5, "Pig"
WRITE (1) 6, "Zebra"

Now you can access by number (primary key) or by name (kno=1) plus you could add additional columns to the record if required.  You can access this as follows:

->print rcd(1,key=4)
4
Ant

->print rcd(1,key="pig",kno=1)
3
Pig

->
Mike King
President - BBSysco Consulting
eMail: mike.king@bbsysco.com