Table creation: Difference between revisions
Content added Content deleted
Thundergnat (talk | contribs) m (syntax highlighting fixup automation) |
(→{{header|Wren}}: Added a second version based on the new Wren-table module.) |
||
Line 1,149: | Line 1,149: | ||
=={{header|Wren}}== |
=={{header|Wren}}== |
||
===Version 1=== |
|||
{{libheader|Wren-dynamic}} |
{{libheader|Wren-dynamic}} |
||
{{libheader|Wren-fmt}} |
{{libheader|Wren-fmt}} |
||
Line 1,155: | Line 1,156: | ||
In practice, a binary search would be needed to find records quickly by key given that the records are being maintained in sorted order. However, for now we use a sequential search instead. |
In practice, a binary search would be needed to find records quickly by key given that the records are being maintained in sorted order. However, for now we use a sequential search instead. |
||
<syntaxhighlight lang="ecmascript">import "/dynamic" for Enum, Tuple |
<syntaxhighlight lang="ecmascript">import "./dynamic" for Enum, Tuple |
||
import "/fmt" for Fmt |
import "./fmt" for Fmt |
||
import "/sort" for Cmp, Sort |
import "./sort" for Cmp, Sort |
||
var FieldType = Enum.create("FieldType", ["text", "num", "int", "bool"]) |
var FieldType = Enum.create("FieldType", ["text", "num", "int", "bool"]) |
||
Line 1,299: | Line 1,300: | ||
2 2006-03-28 BUY IBM 1000 45.00 true |
2 2006-03-28 BUY IBM 1000 45.00 true |
||
4 2006-04-05 BUY MSOFT 1000 72.00 false |
4 2006-04-05 BUY MSOFT 1000 72.00 false |
||
</pre> |
|||
<br> |
|||
===Version 2=== |
|||
{{libheader|Wren-table}} |
|||
The above module provides a more generic way to create simple databases and was not available when the first version was written. |
|||
<syntaxhighlight lang="ecmascript">import "./table" for FieldInfo, Table, Records |
|||
var fields = [ |
|||
FieldInfo.new("id", Num), |
|||
FieldInfo.new("date", String), |
|||
FieldInfo.new("trans", String), |
|||
FieldInfo.new("sym", String), |
|||
FieldInfo.new("qty", Num), |
|||
FieldInfo.new("price", Num), |
|||
FieldInfo.new("settled", Bool) |
|||
] |
|||
// create table |
|||
var table = Table.new("Stock_transactions", fields) |
|||
// add records |
|||
table.add([3, "2006-04-06", "SELL", "IBM" , 500, 53.00, true ]) |
|||
table.add([1, "2006-01-05", "BUY" , "RHAT" , 100, 35.14, true ]) |
|||
table.add([4, "2006-04-05", "BUY" , "MSOFT", 1000, 72.00, false]) |
|||
table.add([2, "2006-03-28", "BUY" , "IBM" , 1000, 45.00, true ]) |
|||
var colWidths = [2, 10, 4, 5, 4, 5.2, 7] // for listings |
|||
// show the table's fields |
|||
table.listFields() |
|||
System.print() |
|||
// sort the records by 'id' and show them |
|||
var sortFn = Fn.new { |s, t| s[0] < t[0] } |
|||
var records = table.sortedRecords(sortFn) |
|||
Records.list(table.fields, records, "Records for %(table.name) table:\n", colWidths) |
|||
// find a record by key |
|||
System.print("\nThe record with an id of 2 is:") |
|||
System.print(table.find(2)) |
|||
// delete a record by key |
|||
table.remove(3) |
|||
System.print("\nThe record with an id of 3 will be deleted, leaving:\n") |
|||
records = table.sortedRecords(sortFn) |
|||
Records.list(table.fields, records, "Records for %(table.name) table:\n", colWidths)</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
Fields for Stock_transactions table: |
|||
name kind |
|||
------- ------ |
|||
id Num |
|||
date String |
|||
trans String |
|||
sym String |
|||
qty Num |
|||
price Num |
|||
settled Bool |
|||
Records for Stock_transactions table: |
|||
id date tran sym qty price settled |
|||
-- ---------- ---- ----- ---- ----- ------- |
|||
1 2006-01-05 BUY RHAT 100 35.14 true |
|||
2 2006-03-28 BUY IBM 1000 45.00 true |
|||
3 2006-04-06 SELL IBM 500 53.00 true |
|||
4 2006-04-05 BUY MSOFT 1000 72.00 false |
|||
The record with an id of 2 is: |
|||
[2, 2006-03-28, BUY, IBM, 1000, 45, true] |
|||
The record with an id of 3 will be deleted, leaving: |
|||
Records for Stock_transactions table: |
|||
id date tran sym qty price settled |
|||
-- ---------- ---- ----- ---- ----- ------- |
|||
1 2006-01-05 BUY RHAT 100 35.14 true |
|||
2 2006-03-28 BUY IBM 1000 45.00 true |
|||
4 2006-04-05 BUY MSOFT 1000 72.00 false |
|||
</pre> |
</pre> |