'Flattening'/storing arrays

Jan Schenkel janschenkel at yahoo.com
Mon Dec 16 17:16:01 EST 2002


Hi Jim and Dar,

Appearently I left a bit of an error in my quick&dirty
array-to-xml scheme (I forgot to 'enquote' the keys).
Here's a better version of the serialiation function:

function serialisedArray @pArray
  put "<array>" & return into tSerialisedArray
  put the keys of pArray into tKeys
  repeat for each line tKey in tKeys
    put "<element key=" & quote & tKey & quote & \
    ">" & pArray[tKey] & "</element>" & return \
    after tSerialisedArray
  end repeat
  put "</array>" after tSerialisedArray
  return tSerialisedArray
end serialisedArray

And to boot, here's a function to de-serialise the
string into an array.

function deSerialiseArray pString
  if line 1 of pString is not "<array>" or \
      line -1 of pString is not "</array>" then
    return "Error: invalid string"
  end if
  put 0 into tStart
  get offset("<element key=" & quote, pString, tStart)
  repeat until it = 0
    -- first retrieve the key for the element
    put tStart + it + 14 into tKStart
    put offset(quote & ">", pString, tKStart) \
        into tKEnd
    if tKEnd = 0 then return "Error: invalid string"
    put char tKStart to (tKStart + tKEnd - 1) \
        of pString into tKey
    -- then retrieve the data for the element
    put tKStart + tKEnd + 2 into tDStart
    put offset("</element>", pString, tDStart) \
        into tDEnd
    if tDEnd = 0 then return "Error: invalid string"
    put char tDStart to (tDStart + tDEnd - 1) \
        of pString into tData
    -- store the data in the element with the key
    put tData into tArray[tKey]
    -- and get ready for the next retrieve cycle
    put tDStart + tDEnd + 10 into tStart
    get offset("<element key=" & quote, pString, \
       tStart)
  end repeat
  -- pString has now been de-serialised into tArray
  return tArray
end deSerialiseArray

However, as Dar pointed out, if the data is 'polluted'
in any way (as in: contains data that might mess up
the XML-structure) then this is not a good method,
though it's arguable that you'll have trouble storing
and retrieving the data outside of custom properties
in such cases anyway.

Hope this helped,

Jan Schenkel.

=====
"As we grow older, we grow both wiser and more foolish at the same time."  (La Rochefoucauld)

__________________________________________________
Do you Yahoo!?
Yahoo! Mail Plus - Powerful. Affordable. Sign up now.
http://mailplus.yahoo.com



More information about the use-livecode mailing list