Searches of a list and other tricks using [ ] notation and eval() or evalf() for performance

Doug Easterbrook doug at artsman.com
Wed Jan 4 14:53:23 UTC 2023


hi Alan.

thats good to know….    an unannounced subtle change in functionality.

I’m going to go through my code and test enhance it.   I just read the help and it does explicitly say binary fields..     


thanks for letting me know.

Doug Easterbrook
Arts Management Systems Ltd.
mailto:doug at artsman.com
http://www.artsman.com
Phone (403) 650-1978

> On Jan 4, 2023, at 5:20 AM, Alan Davey <david.a.davey at gmail.com> wrote:
> 
> Hi Doug,
> 
> We found out last year (Studio 10.2), and confirmed by Studio Support, that
> evalf() no longer tokenizes a string in a character variable.  Only a
> binary variable (with your text string) will get tokenized.  The character
> variable will still work, but you will no longer get the speed improvement
> unless you switch to using a binary variable.
> 
> Alan
> 
> On Tue, Jan 3, 2023 at 11:12 AM Doug Easterbrook via omnisdev-en <
> omnisdev-en at lists.omnis-dev.com> wrote:
> 
>> in addition to what kelly mentions, if you can make a statement, you can
>> put that in an eval() and do just about anything.  so the trick has wide
>> applicabliltiy
>> 
>> eg
>> 
>> calculate text as ‘list.$sort($ref.Field,1)’
>> do eval(text)
>> 
>> or
>> 
>> calculate fieldNameString as ‘Myfield1,Myfield2,MyFleid3’
>> calculate text as con(‘max(‘,fieldnamestring,’)’)
>> do eval(text)
>> 
>> or
>> 
>> calculate text as con(‘list.$search(',mySearchString,')’)
>> do eval(text)
>> 
>> or
>> 
>> calculate fieldNameString as ‘Myfield1,Myfield2,MyFleid3’
>> calculate text as con(‘list.$loadcols(‘,fieldnamestring,’)’)
>> do eval(text)
>> 
>> it really doesn’t matter how you get omnis to evaluate the command that yo
>> build into a text string,  it can be using eval() or proper use of square
>> bracket notation
>> 
>> 
>> one advantage of using eval().   is that you can just as easlily use
>> evalf() which tokenizes the text string to speed up oerformance
>> 
>> eg
>> 
>> 
>> calculate fieldNameString as ‘Myfield1,Myfield2,MyFleid3’
>> calculate text as con(‘list.$loadcols(‘,fieldnamestring,’)’)
>> 
>> for list.$line from 1 to list.$linecount
>>  do EVALF(text)
>> 
>> end for
>> 
>> 
>> the EVALF is tokenized the first time in the loop… then it gets much
>> faster for second and subsequent uses.    WE’ve done things like this to
>> speed up loading certain columns from a list (but not all) when we need to
>> do it.
>> 
>> 
>> anyway..   food for thought.    a very handy use of omnis to make  a
>> dynamic statement inline withour writing something to build a procedure
>> line.
>> 
>> 
>> 
>> 
>> 
>> Doug Easterbrook
>> Arts Management Systems Ltd.
>> mailto:doug at artsman.com
>> http://www.artsman.com
>> Phone (403) 650-1978
>> 
>>> On Jan 2, 2023, at 10:30 PM, Kelly Burgess <kellyb at montana.com> wrote:
>>> 
>>> Das wrote:
>>>> From Kelly I received the thing that really made it work, that is, how
>> to square bracket the search.
>>>> 
>>>> Instead of
>>>> 
>>>> myList.$search([mySearchString])
>>>> 
>>>> Use instead
>>>> 
>>>> Calculate myString as con('$Search.',mySearchString)
>>>> Do myList.[myString]
>>>> 
>>>> It’s just a twist on how you do the square bracket, but it WORKED and
>> that’s what matters.
>>> 
>>> That was slightly misquoted.  The Calculate myString con() is wrong.  It
>> should be:
>>> 
>>> Calculate myString as con('$search(',mySearchString,')')
>>> 
>>> The point is to wrap the search string with $search().  It's the same
>> 'trick' that I use to define a list with a user-selected set of columns.  I
>> found that
>>> 
>>> Do list.$define([colString])
>>> 
>>> does not work, but the same approach of wrapping the columns string with
>> $define() does work.
>>> 
>>> Calculate define as con('$define(',colString,')')
>>> Do list.[define]
>>> 
>>> It's just something about the way the Omnis parser works.
>>> 
>>> Kelly
>>> _____________________________________________________________
>>> Manage your list subscriptions at https://lists.omnis-dev.com
>>> Start a new message -> mailto:omnisdev-en at lists.omnis-dev.com
>> 
>> _____________________________________________________________
>> Manage your list subscriptions at https://lists.omnis-dev.com
>> Start a new message -> mailto:omnisdev-en at lists.omnis-dev.com
>> 
> _____________________________________________________________
> Manage your list subscriptions at https://lists.omnis-dev.com
> Start a new message -> mailto:omnisdev-en at lists.omnis-dev.com 



More information about the omnisdev-en mailing list