Simple database: Difference between revisions

→‎{{header|Wren}}: Added a second version based on new Wren-table module.
m (syntax highlighting fixup automation)
(→‎{{header|Wren}}: Added a second version based on new Wren-table module.)
Line 4,927:
=={{header|Wren}}==
{{trans|Kotlin}}
===Version 1===
{{libheader|Wren-ioutil}}
{{libheader|Wren-trait}}
Line 5,073 ⟶ 5,074:
item4, 2021-06-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>
9,476

edits