Cool function Bob, I always love a good recursive handler.

It might be broken when an array element contains more than one word. (Limited 
testing tho.)

Eric

On May 4, 2015, at 2:14 PM, Bob Sneidar <bobsnei...@iotecdigital.com> wrote:

> I wrote a couple functions that “flatten” an array into a string in such a 
> way that it can be converted back into an array again when done. Here they 
> are:
> 
> function altPrintKeys @pArray, theKeyList, pFullData 
>    put numtochar(11) into vertTab
>    put numtochar(30) into altCr
>    put the keys of pArray into theKeys
>    sort theKeys numeric
> 
>    repeat FOR each line theKey in theKeys
>        put "[" & theKey & "] " after theKeyList
>        if theKey is not a number then
>              replace "[" & theKey & "]" WITH "[" & quote & theKey & quote & 
> "]" in theKeyList
>        end if
>        if pArray[theKey] is an array then
>            put pArray[theKey] into theTempArray
>            put altPrintKeys(theTempArray, theKeyList, pFullData) after theText
>            put empty into the last word of theKeyList
>            delete the last char of theKeyList
>            put cr into the last char of theText
>        else
>            put "pArray " & the last word of theKeyList into theKeyName
>            -- put "put " & theKeyName & " into theValue" into theCommand
>            -- do theCommand
>            put value(theKeyName) into theValue
>            replace tab WITH vertTab in theValue
>            replace return WITH altCr in theValue
>            put theKeyList & tab & theValue & comma after theText
>            put empty into the last word of theKeyList
>            delete the last char of theKeyList
>        end if
>    end repeat
> 
>    return theText
> end altPrintKeys
> 
> function altKeysToArray theText
>    put numtochar(11) into vertTab
>    put numtochar(30) into altCr
>    repeat FOR each line theRecord in theText
>        repeat FOR each item theKeyData in theRecord
>            put the itemdelimiter into theOldDelim
>            set the itemdelimiter to tab
>            put item 1 of theKeyData into theKeyList
>            put item 2 of theKeyData into theValue
>            replace vertTab WITH tab in theValue
>            replace altCr WITH return in theValue
>            set the itemdelimiter to theOldDelim
>            put "put " & quote & theValue & quote & " into theArrayA " & 
> theKeyList into theCommand
>            do theCommand
>        end repeat
>    end repeat
>    return theArrayA
> end altKeysToArray
> 
> 
> They work together, one for converting an array to text and the other for 
> converting back again. This is handy when you need to eliminate keys using 
> the filter command and then converting back to an array again. But it can be 
> useful for finding an array key or element. Try it on a multidimensional 
> array and view the results. You can see that if you find a line, you will be 
> able to discern the actual array key. 
> 
> Bob S
> 
> 
>> On Apr 22, 2015, at 14:44 , Mike Bonner <bonnm...@gmail.com> wrote:
>> 
>> I wonder how easy it would be to add an option to arrayencode.  It already
>> flattens an array nicely, but not in a searchable way. It would be cool to
>> add an optional argument that still flattens, but doesn't encode.  The code
>> to traverse the array is already there, with an option to leave the data
>> and keys readable, it would then make an interesting batch of searchable
>> text. Just glancing at an encoded array, it looks relatively
>> comprehensible.
>> 
>> One issue would be the unordered way arrays are stored. (making
>> arrayencoded arrays come out different despite identical data, as per the
>> dictionary page)
>> 
>> On Wed, Apr 22, 2015 at 2:26 PM, Phil Davis <rev...@pdslabs.net> wrote:
>> 
>>> Hi Tiemo,
>>> 
>>> How many levels deep are the array elements you want to search?
>>> 
>>> How many words might each of the searchable array elements contain?
>>> 
>>> How is the array keyed - by sequential number, a preassigned numeric ID, a
>>> content description, ...?
>>> 
>>> Would it be worth your time when loading the primary array to build a
>>> second array that indexes the primary keys by word? (i.e. make an alternate
>>> index) Then finding which words are in which primary array elements would
>>> be easy.
>>> 
>>> But if your array is "flat" enough, I like Geoff's idea of combining and
>>> filtering it. But you haven't told us much about its structure.
>>> 
>>> Thanks -
>>> Phil Davis
>>> 
>>> 
>>> On 4/22/15 6:20 AM, Tiemo Hollmann TB wrote:
>>> 
>>>> Hello,
>>>> 
>>>> I have an array with 20000 records, where I want to extract all records,
>>>> which either "begins with" or "contains" a search string.
>>>> 
>>>> Up to now I just loop thru the whole array, do the compare and extract the
>>>> result records. I wonder, if there is a way to speed up this search? E.g.,
>>>> does it makes a difference, if I compare the string in the key or the data
>>>> of the array while looping thru? I mean, would it make a difference, if I
>>>> would create an "associative" array, where my search looks up in the keys
>>>> of
>>>> the array, either by looping thru the array, or by extracting first the
>>>> keys
>>>> of the array into a separate variable, instead in the data of the original
>>>> array?
>>>> 
>>>> Would it make a difference looping thru a variable, which just contains
>>>> the
>>>> keys of the array, instead of looping thru the complete array, because of
>>>> the smaller "footprint" in the memory?
>>>> 
>>>> Or shouldn't I care about these differences and just let LC makes its job?
>>>> 
>>>> Any experiences welcome,
>>>> 
>>>> Tiemo
>>>> 
>>>> 
>>>> 
>>>> 
>>>> _______________________________________________
>>>> use-livecode mailing list
>>>> use-livecode@lists.runrev.com
>>>> Please visit this url to subscribe, unsubscribe and manage your
>>>> subscription preferences:
>>>> http://lists.runrev.com/mailman/listinfo/use-livecode
>>>> 
>>>> 
>>> --
>>> Phil Davis
>>> 
>>> 
>>> 
>>> _______________________________________________
>>> use-livecode mailing list
>>> use-livecode@lists.runrev.com
>>> Please visit this url to subscribe, unsubscribe and manage your
>>> subscription preferences:
>>> http://lists.runrev.com/mailman/listinfo/use-livecode
>>> 
>> _______________________________________________
>> use-livecode mailing list
>> use-livecode@lists.runrev.com
>> Please visit this url to subscribe, unsubscribe and manage your subscription 
>> preferences:
>> http://lists.runrev.com/mailman/listinfo/use-livecode
> 
> _______________________________________________
> use-livecode mailing list
> use-livecode@lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your subscription 
> preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode


_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode

Reply via email to