Here, some samples of jTableLib's usage:

set t to createNewTable() --> creates a new table object

t's addRow({"asdf"}) --> add a row using the provided data (a list of whatever)

asdf

t's addRow({"asdf2"}) --> add a new row with the provided data

asdf
asdf2

t's addRow({"asdf3"}) --> add a new row with the provided data

asdf
asdf2
asdf3

t's addColumn({"a", "b", "c"}) --> add a column with the provided data

asdfa
asdf2b
asdf3c

t's addColumn({})
--> if no data is provided, it is appended a column filled with "missing value"s (addRow works the same)
--> if you provided a single item list in this example, it will fill the first row and the rest will be missing values

asdfamissing value
asdf2bmissing value
asdf3cmissing value

t's addColumn({{a:1}, {b:2}, {c:3}}) --> add records

asdfamissing value{a:1} of Çscript fooÈ
asdf2bmissing value{b:2} of Çscript fooÈ
asdf3cmissing value{c:3} of Çscript fooÈ

t's addColumn({7, 15, 24}) --> add integers

asdfamissing value{a:1} of Çscript fooÈ7
asdf2bmissing value{b:2} of Çscript fooÈ15
asdf3cmissing value{c:3} of Çscript fooÈ24


t's getRows(1) --> {"asdf", "a", missing value, {a:1}, 7}
t's getColumns(2) --> {"a", "b", "c"}
t's getRows({1, 3}) --> {{"asdf", "a", missing value, {a:1}, 7}, {"asdf3", "c", missing value, {c:3}, 24}}
t's getColumns({1, 2}) --> {{"asdf", "asdf2", "asdf3"}, {"a", "b", "c"}}
t's getCell(2, 2) --> "b" (you provide two parameters: the first one is the row; the second one is the column)
t's search(missing value) --> true ("search" returns a boolean)
t's search({a:1}) --> true
t's locateCell({b:2}) --> {2,4} (first parameter is the row, second one the column)
t's sumColumn(5) --> 46 (sample function extends jTableLib)
t's averageColumn(5) --> 15.333333333333 (sample function extends jTableLib)
t's layout("plist") --> other accepted parameters are "html" and "tab-delimited", here is the output:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
ÊÊÊÊÊ<key>row1</key>
ÊÊÊÊÊ<array>
ÊÊÊÊÊÊÊÊÊÊ<string>asdf</string>
ÊÊÊÊÊÊÊÊÊÊ<string>a</string>
ÊÊÊÊÊÊÊÊÊÊ<string>missing value</string>
ÊÊÊÊÊÊÊÊÊÊ<string>{a:1} of Çscript fooÈ</string>
ÊÊÊÊÊÊÊÊÊÊ<string>7</string>
ÊÊÊÊÊ</array>
ÊÊÊÊÊ<key>row2</key>
ÊÊÊÊÊ<array>
ÊÊÊÊÊÊÊÊÊÊ<string>asdf2</string>
ÊÊÊÊÊÊÊÊÊÊ<string>b</string>
ÊÊÊÊÊÊÊÊÊÊ<string>missing value</string>
ÊÊÊÊÊÊÊÊÊÊ<string>{b:2} of Çscript fooÈ</string>
ÊÊÊÊÊÊÊÊÊÊ<string>15</string>
ÊÊÊÊÊ</array>
ÊÊÊÊÊ<key>row3</key>
ÊÊÊÊÊ<array>
ÊÊÊÊÊÊÊÊÊÊ<string>asdf3</string>
ÊÊÊÊÊÊÊÊÊÊ<string>c</string>
ÊÊÊÊÊÊÊÊÊÊ<string>missing value</string>
ÊÊÊÊÊÊÊÊÊÊ<string>{c:3} of Çscript fooÈ</string>
ÊÊÊÊÊÊÊÊÊÊ<string>24</string>
ÊÊÊÊÊ</array>
</dict>
</plist>


t's table

--> At any time, you can request the entire table:

{{"asdf", "a", missing value, {a:1}, 7}, {"asdf2", "b", missing value, {b:2}, 15}, {"asdf3", "c", missing value, {c:3}, 24}}

Let's beautify it:

{
ÊÊÊ{"asdf" Ê,Ê "a"Ê, Êmissing valueÊ, Ê{a:1}Ê, Ê7Ê},
ÊÊÊ{"asdf2"Ê, Ê"b"Ê, Êmissing valueÊ, Ê{b:2}Ê, 15Ê},
ÊÊÊ{"asdf3"Ê, Ê"c"Ê, Êmissing valueÊ, Ê{c:3}Ê, 24Ê}
}

Every list-member in the mail list is a "row". Every item within such list-members is a "cell", and composes "columns":

asdf a missing value {a:1} of Çscript fooÈ 7
asdf2 b missing value {b:2} of Çscript fooÈ 15
asdf3 c missing value {c:3} of Çscript fooÈ 24


You can EXTEND jTableLib easilly. For example, you can add a "sumRow" function if you need it (not difficult, true?). Or, if you are working with strings or numbers, you can add column-sort capabilities adding the following handler to jTableLib (the routine was adaptated from Kai Edwards' "sortLists" handler):

to sortLists from x by n --> credits to Kai Edwards
ÊÊÊif x's length < 2 then return
ÊÊÊset {l, h, {m, s}} to {{}, {}, x's {item 1, rest}}
ÊÊÊrepeat with r in s
ÊÊÊÊÊÊif m's item n > r's item n then
ÊÊÊÊÊÊÊÊÊset l's end to r's contents
ÊÊÊÊÊÊelse
ÊÊÊÊÊÊÊÊÊset h's end to r's contents
ÊÊÊÊÊÊend if
ÊÊÊend repeat
ÊÊÊif l's length > 1 then set l to sortLists from l by n
ÊÊÊif h's length > 1 then set h to sortLists from h by n
ÊÊÊset table to l & {m} & h
end sortLists

Then use it as follow:

set t to createNewTable()
t's addRow({"a", "z"})
t's addRow({"b", "y"})
t's addRow({"c", "x"})
t's table --> {{"a", "z"}, {"b", "y"}, {"c", "x"}}
sortLists of t from t's table by 2
t's table --> {{"c", "x"}, {"b", "y"}, {"a", "z"}}
sortLists of t from t's table by 1
t's table --> {{"a", "z"}, {"b", "y"}, {"c", "x"}}

Well, I finally added this sub-routine... But note that this is only an example, and it requires strings, numbers or dates in all the columns to be sorted.