On Sep 12, 2008, at 12:37 PM, Mark Wieder wrote:

But I'm sorry to say that I can't think of a situation in which
chronological order would be helpful. Obviously you've got a scenario
where this works - could you enlighten me?

I can try :-) Let's look at a few examples.

I will start with a simple example that mostly affects syntax. You provided an example of using integers in order to access your array values in a logical order. That is a simple enough repeat loop as we can use the extents property:

======
repeat with i = 1 to item 2 of the extents of theLessonsA
        ...
end repeat
======

If Rev remembered the order you added the keys (assuming you added sequentially starting at 1) your code would look like this:

======
repeat for each key theIndex in theLessonsA
        ...
end repeat
======

I prefer the later code myself.



As a second example let's look at keys that aren't numeric but whose order is important. If you are converting XML to an array you may just want to use the XPATH syntax for storing arrays of children nodes. Something like this:

[1]["step[1]"]
[1]["step[2]"]

If I want to iterate through the keys of ["lessons"] in the correct order I have to extract the keys, sort and then iterate:

======
put the keys of theLessonsA[1] into theKeys
set the itemdelimiter to "["
sort theKeys numeric by the last item of each -- 1], 2], 3], etc.
repeat for each line theKey in theKeys
    ...
end repeat
======

If Rev remembered the order that the keys were added then the code would be:

======
repeat for each key theIndex in theLessonsA
        ...
end repeat
======

Much cleaner.



To finish with, let's look at another XML example I grabbed from one of the w3schools samples.

<breakfast_menu>
        <food>
                <name>Belgian Waffles</name>
                <price>$5.95</price>
<description>two of our famous Belgian Waffles with plenty of real maple syrup</description>
                <calories>650</calories>
        </food>
        ...
</breakfast_menu>

If I convert the XML to an array it might look like this:

["breakfast_menu"]["food"]["1"]["name"]
["breakfast_menu"]["food"]["1"]["price"]
["breakfast_menu"]["food"]["1"]["description"]
["breakfast_menu"]["food"]["1"]["calories"]

["breakfast_menu"]["food"]["2"]["name"]
["breakfast_menu"]["food"]["2"]["price"]
["breakfast_menu"]["food"]["2"]["description"]
["breakfast_menu"]["food"]["2"]["calories"]

What if I want to display the array in a field in Revolution?

======
repeat with i = 1 to item 2 of the extents of theArray["breakfast_menu"]["food"]
    put "Food item:" && i & cr after theText
    repeat for each key theKey in theArray["breakfast_menu"]["food"][i]
put theKey & ":" && theArray["breakfast_menu"]["food"][i] [theKey] & cr after theText
    end repeat
end repeat

set the text of field 1 to theText
======

But wait, there is a problem here. Since the order of keys of Revolution is undefined I am not guaranteed that the list of food properties will print in the same order for each food item. That means I have to enforce the order myself:

Predefined:
repeat for each item theKey in "name,price,description,colories"

Sort:
put the keys of theArray["breakfast_menu"]["food"][i] into theKeys
sort theKeys

There would be no need to go through these extra steps if the array always spit out keys in the order they were added.

Regards,

--
Trevor DeVore
Blue Mango Learning Systems
ScreenSteps: http://www.screensteps.com
Developer Resources: http://revolution.bluemangolearning.com
_______________________________________________
use-revolution mailing list
[email protected]
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution

Reply via email to