Array Confusion [was: Re: Does 'exists' work on arrays?]
Graham Samuel
livfoss at mac.com
Sun Mar 15 15:27:50 EDT 2015
Thanks Peter, it seems to work very well. I tried it on my XML-derived test file, which I put (as an array) into a global, gGeneralArray.
Hoping you’ll excuse the bandwidth, I’ll show you the first few lines of text from your function's output, as I would like to ask a question about it:
gpx
@attributes
creator: Geolives
schemaLocation: http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd
version: 1.1
xmlns: http://www.topografix.com/GPX/1/1
metadata:
trk
trkseg
trkpt[1000]
@attributes
lat: 43.099438
lon: 2.075522
ele: 392.6022
time: 2015-03-12T10:34:43Z
trkpt[1001]
@attributes
lat: 43.099384
lon: 2.0755
ele: 392.6022
time: 2015-03-12T10:34:47Z
trkpt[1002]
@attributes
lat: 43.099335
lon: 2.075483
ele: 393.96625
time: 2015-03-12T10:34:51Z
This seems to me to show a multidimensional array, but perhaps it doesn’t, because when I do this in the Message Box
put the keys of gGeneralArray
I just get
gpx
But I can see all the other keys (can’t I?) in above display and in the IDE - they derive from different levels of angle brackets in the XML. Perhaps I’m simply going crazy.
Just going back to my model of LC arrays - can someone tell me if this is reasonable:
An array is a kind of group, or a physical analogy would be a box. This group (box) contains elements which can be actual objects (numbers for example) or other groups (boxes). This nesting can go on as deep as you like. So a reference like
myArray[“aa”][“bb”]
means ‘get me out the box or object labelled “bb” from the box labelled “aa”. We only find out if it’s a box (i.e. another array) or a real object when we go to fetch it.
I’m using this model to get as far away as possible from the numerically indexed arrays I was brought up with. Is it wrong?
TIA
Graham
> On 15 Mar 2015, at 19:32, Peter M. Brigham <pmbrig at gmail.com> wrote:
>
> Not a utility, but here's a way of displaying a multilevel array so you can see its structure.
>
> -- Peter
>
> Peter M. Brigham
> pmbrig at gmail.com
> http://home.comcast.net/~pmbrig
>
> -------
>
> function displayArray @pArray, pFullData, _pDimension
> -- by Peter M. Brigham, pmbrig at gmail.com — freeware
> -- adapted from a handler by Trevor DeVore
> -- displays an array as an outline-style list
> -- most useful for multidimensional arrays, to see the structure
> -- if an element of the array contains more than one line,
> -- the first line only will be displayed (less confusing to look at)
> -- if you want to see the full data then pass pFullData = true
> -- _pDimension is an internally used parameter
> -- pArray is referenced to avoid duplicating large arrays in memory,
> -- but the array is not altered by this function
>
> -- call it like this: put displayArray(tArray) into fld "peruse"
>
> -- requires makestring()
>
> if _pDimension is empty then put 0 into _pDimension
> if pFullData = empty then put false into pFullData
> put ": " into divString
> put the keys of pArray into theKeys
> if line 1 of theKeys is a number then
> sort theKeys numeric
> else
> sort theKeys
> end if
> repeat for each line theKey in theKeys
> if pArray[theKey] is an array then
> put makeString(space,_pDimension*3) & theKey & cr after theText
> put pArray[theKey] into theTempArray
> put displayArray(theTempArray, pFullData, _pDimension + 1) after theText
> else
> if pFullData then
> put makeString(space,_pDimension*3) & theKey & ":" \
> && pArray[theKey] & cr after theText
> else
> put pArray[theKey] into tElement
> put empty into tTrailer
> if the number of lines of tElement > 1 then
> put " ..." into tTrailer
> end if
> put makeString(space,_pDimension*3) & theKey & divString \
> & (line 1 of tElement) & tTrailer & cr after theText
> end if
> end if
> end repeat
> return theText
> end displayArray
>
> function makeString pChar, n
> -- returns a string of n characters (pChar)
> -- no repeat loop!
> -- by Peter M. Brigham, pmbrig at gmail.com — freeware
> -- improved by Richard Gaskin
> set the linedel to pChar
> put pChar into line n of temp
> return temp
> end makeString
>
>
> On Mar 15, 2015, at 2:19 PM, Mike Bonner wrote:
>
>> If you are just trying to get a handle on the structure, and how to pull
>> out specific chunks, you can declare it global, and use the message box to
>> poke around.
>>
>> If its global, in the multiline msg box declare it too, and "put the keys
>> of... "
>> Then adjust it to look at subkey contents, poking around till you figure
>> out where things are.
>>
>> And now i'm wondering if anyone has built an array browser utility?
>>
>> On Sun, Mar 15, 2015 at 11:56 AM, Scott Rossi <scott at tactilemedia.com>
>> wrote:
>>
>>> Try: if myArray is an array
>>>
>>>
>>> Regards,
>>>
>>> Scott Rossi
>>> Creative Director
>>> Tactile Media, UX/UI Design
>>>
>>>
>>>
>>>
>>> On 3/15/15, 9:50 AM, "Graham Samuel" <livfoss at mac.com> wrote:
>>>
>>>> Still struggling with arrays: no results, no error messages, no dataŠ
>>>> will get there no doubt. While trying to get there, I tried
>>>>
>>>> put exists(myArray[³gpx²])
>>>>
>>>> I got Œfalse¹, but the IDE seems to say that the top key in this
>>>> multidimensional array is ³gpx², so why isn¹t it true?
>>>>
>>>> Puzzled on a wet Sunday afternoonŠ
>>>>
>>>> Graham
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> use-livecode mailing list
>>>> use-livecode at 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 at 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 at 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 at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode
More information about the use-livecode
mailing list