Simple database: Difference between revisions
Content added Content deleted
Thundergnat (talk | contribs) m (syntax highlighting fixup automation) |
(→{{header|Wren}}: Added a second version based on new Wren-table module.) |
||
Line 4,927: | Line 4,927: | ||
=={{header|Wren}}== |
=={{header|Wren}}== |
||
{{trans|Kotlin}} |
{{trans|Kotlin}} |
||
===Version 1=== |
|||
{{libheader|Wren-ioutil}} |
{{libheader|Wren-ioutil}} |
||
{{libheader|Wren-trait}} |
{{libheader|Wren-trait}} |
||
Line 5,073: | Line 5,074: | ||
item4, 2021-06-01, cat3 |
item4, 2021-06-01, cat3 |
||
item5, 2021-07-01, cat3 |
item5, 2021-07-01, cat3 |
||
</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 "os" for Process |
|||
import "./table" for Table, FieldInfo, File |
|||
import "./str" for Str |
|||
var printUsage = Fn.new { |
|||
System.print(""" |
|||
Usage: |
|||
wren simdb.wren cmd [categoryName] |
|||
add add item name and date, followed by optional category |
|||
latest print item with latest date, followed by optional category |
|||
all print all |
|||
For instance: add "some item name", "some item date", "some category name" |
|||
Dates should be in format: yyyy-mm-dd |
|||
""") |
|||
} |
|||
var printLatest = Fn.new { |table, a| |
|||
if (table.isEmpty) { |
|||
System.print("No entries in table.") |
|||
return |
|||
} |
|||
var records = table.records |
|||
records.sort { |s, t| Str.lt(s[1], t[1]) } // sort by ascending date |
|||
if (a.count == 1) { |
|||
var found = false |
|||
for (record in records[-1..0]) { |
|||
if (record[2] == a[0]) { |
|||
System.print(record) |
|||
found = true |
|||
break |
|||
} |
|||
} |
|||
if (!found) System.print("There are no records for category '%(a[0])'.") |
|||
} else System.print(records[-1]) |
|||
} |
|||
var args = Process.arguments |
|||
if (!(1..4).contains(args.count)) { |
|||
printUsage.call() |
|||
return |
|||
} |
|||
// create a new Table object |
|||
var tableName = "simdb" |
|||
var table |
|||
if (Table.fileExists(tableName)) { |
|||
table = Table.load(tableName) |
|||
} else { |
|||
var fis = [ |
|||
FieldInfo.new("name", String), |
|||
FieldInfo.new("date", String), |
|||
FieldInfo.new("category", String) |
|||
] |
|||
table = Table.new(tableName, fis) |
|||
} |
|||
var cmd = Str.lower(args[0]) |
|||
if (cmd == "add") { |
|||
if (args.count < 4) args.add("none") |
|||
table.add(args[1..-1]) |
|||
table.save() |
|||
} else if (cmd == "latest") { |
|||
printLatest.call(table, args[1..-1]) |
|||
} else if (cmd == "all") { |
|||
table.list() |
|||
} else { |
|||
printUsage.call() |
|||
}</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
$ wren simdb.wren add item1 2021-03-01 |
|||
$ wren simdb.wren add item2 2021-04-01 |
|||
$ wren simdb.wren add item3 2021-05-01 cat3 |
|||
$ wren simdb.wren add item4 2021-06-01 cat3 |
|||
$ wren simdb.wren add item5 2021-07-01 cat3 |
|||
$ wren simdb.wren latest |
|||
[item5, 2021-07-01, cat3] |
|||
$ wren simdb.wren latest none |
|||
[item2, 2021-04-01, none] |
|||
$ wren simdb.wren latest cat4 |
|||
There are no records for category 'cat4'. |
|||
$ wren simdb.wren all |
|||
Records in 'simdb' table: |
|||
name date category |
|||
----- ---------- -------- |
|||
item1 2021-03-01 none |
|||
item2 2021-04-01 none |
|||
item3 2021-05-01 cat3 |
|||
item4 2021-06-01 cat3 |
|||
item5 2021-07-01 cat3 |
|||
</pre> |
</pre> |