Contents
Articles
Behaviors
Books
Director News
Director Web Sites
FAQ
Games
Mailing Lists
News Groups
Project Examples
Reviews
Software
Tools
Useful Web Sites
Utilities
Xtras

Don't miss these
FlashMaster
Table
Audio cutting off early
EzeeAlert
ResourceXObject
Help and Manual
Resolution Xtra 2.0
Amara Flash News Ticker
OpenDBC
Lingo Paradise Tutorials
 

 

 

Behavior Compress integer list

Added on 8/10/2000

 

Compatibilities:
D7 D8 Mac PC Script Shockwave

This item has not yet been rated

Author: BrentMoseley

converts a list like this: [1, 1, 1, 1, 4, 4, 4, 1, 2] to this ["4 1", "3 4", 1, 2] or vice-versa, all without using globals. useful if you want to send a lot of integers across a mulit-user connection. to compress into a new list: "newlist = complist(somelist)" to decompress into a new list: "newlist = decomplist(compressedlist)"

--Created by Brent Moseley  brentmoseley@yahoo.com
--8/8/2000

--to compress into a new list:   "newlist = complist(somelist)"
--to decompress into a new list: "newlist = decomplist(compressedlist)"



on complist a, b, c, d
  if b = void then b = 1
  if c = void then c = 1
  if d = void then d = []
  --^sets up the variables on first time run.

  --reference:
  --a: orig list to pull from.
  --b: number of redundant items in a row.
  --c: current item number it"s checking.
  --d: compressed output list.


  repeat with x = 1 to count(a)
    if the ilk of a[x] <> #integer then
      alert "ERROR" & return & "Cannot compress non-integers"
      return
    end if
  end repeat
  --^makes sure any non-integers don"t slip through.


  if c < count(a) then  --checks if it"s through the list yet.

    --if two items in a row are the same it adds to the redundant count.
    if a[c] = a[c+1] then
      b = b + 1
    else
      --if the redudnant count is 3 or more it adds the compressed value to the final list.
      if b > 2 then
        add d, string(b) && a[c]
      else if b > 1 then
        add d, a[c]
        add d, a[c]
      else
        add d, a[c]
      end if

      b = 1--reset the redundant count.
    end if


    c = c + 1
    return complist(a,b,c,d)
    --^moves on to the next item and re-runs the function.


  else  --if it"s done running through the list add any remaining items and return final list.
    if b > 1 then
      add d, string(b) && a[c]
    else
      add d, a[c]
    end if
    return d
  end if
end



on decomplist a
  mydecomplist=[]
  repeat with x = 1 to count(a)
    --if the current item is a compressed string then decompress it and add it to the list.
    if the ilk of a[x] = #string then
      repeat with y = 1 to the value of word 1 of a[x]
        add mydecomplist, the value of word 2 of a[x]
      end repeat

    else
      add mydecomplist, a[x]
    end if
  end repeat
  return mydecomplist
end

 


Contact

MMI
36 South Court Sq
Suite 300
Newnan, GA 30263
USA

Send e-mail