Hi All,
Here is a lightly-tested set of generalized array handlers:
The coordinates are now passed as a comma-delimited list, and the delimiters are passed & parsed character-by-character (so return, space, & comma can be used as delimiters). Note: NO bounds checking is done; so addressing an element outside the array WILL create new elements. Also, coordinates are assumed to be integers, and no integrity checking is done.
function getElement @theArray,theCoordinates,theDelimiters put item 1 of theCoordinates into coordinateNumber set the itemDelimiter to (char 1 of theDelimiters) get item coordinateNumber of theArray set the itemDelimiter to comma delete item 1 of theCoordinates delete char 1 of theDelimiters if theCoordinates is empty then return it if theDelimiters is empty then return "Coordinate--Delimiter Mismatch" return getElement(it,theCoordinates,theDelimiters) end getElement
(I tried to script putElement recursively; but couldn't come up with a design that didn't require duplicating the entire array with each iteration; so opted for a repeat that only duplicates the array elements affected.)
on putElement theElement,@theArray,theCoordinates,theDelimiters
put the number of items of theCoordinates into coordinateCount
put 0 into currentCoordinate
repeat
add 1 to currentCoordinate
if currentCoordinate = coordinateCount then exit repeat
put item currentCoordinate of theCoordinates into coordinateNumber
get char currentCoordinate of theDelimiters
if currentCoordinate = 1 then put getElement(theArray,coordinateNumber,it) into subArray[1]
else
put subArray[currentCoordinate-1] into tempArray
put getElement(tempArray,coordinateNumber,it) into subArray[currentCoordinate]
end if
end repeat
put item coordinateCount of theCoordinates into coordinateNumber
set the itemDelimiter to char coordinateCount of theDelimiters
if coordinateCount = 1 then -- 1 level "arrays"
put theElement into item coordinateNumber of theArray
exit putElement
else put theElement into item coordinateNumber of subArray[coordinateCount-1]
subtract 1 from currentCoordinate
repeat
set the itemDelimiter to comma
put item currentCoordinate of theCoordinates into coordinateNumber
get char currentCoordinate of theDelimiters
set the itemDelimiter to it
subtract 1 from currentCoordinate
if currentCoordinate = 0 then
put subArray[1] into item coordinateNumber of theArray
exit repeat
else
put subArray[currentCoordinate+1] into item coordinateNumber of subArray[currentCoordinate]
end if
end repeat
end putElement
Enjoy! (I have a simple stack I used for testing...if anyone wants a copy, write me privately.)
Rob Cozens CCW, Serendipity Software Company
"And I, which was two fooles, do so grow three; Who are a little wise, the best fooles bee."
from "The Triple Foole" by John Donne (1572-1631) _______________________________________________ use-revolution mailing list [EMAIL PROTECTED] http://lists.runrev.com/mailman/listinfo/use-revolution
