Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
101
Task/Simple-database/Tcl/simple-database-1.tcl
Normal file
101
Task/Simple-database/Tcl/simple-database-1.tcl
Normal file
|
|
@ -0,0 +1,101 @@
|
|||
#!/usr/bin/env tclsh8.6
|
||||
package require Tcl 8.6
|
||||
namespace eval udb {
|
||||
variable db {}
|
||||
|
||||
proc Load {filename} {
|
||||
variable db
|
||||
if {[catch {set f [open $filename]}]} {
|
||||
set db {}
|
||||
return
|
||||
}
|
||||
set db [read $f]
|
||||
close $f
|
||||
}
|
||||
proc Store {filename} {
|
||||
variable db
|
||||
if {[catch {set f [open $filename w]}]} return
|
||||
dict for {nm inf} $db {
|
||||
puts $f [list $nm $inf]
|
||||
}
|
||||
close $f
|
||||
}
|
||||
|
||||
proc add {title category {date "now"} args} {
|
||||
variable db
|
||||
if {$date eq "now"} {
|
||||
set date [clock seconds]
|
||||
} else {
|
||||
set date [clock scan $date]
|
||||
}
|
||||
dict set db $title [list $category $date $args]
|
||||
return
|
||||
}
|
||||
proc Rec {nm cat date xtra} {
|
||||
dict create description $nm category $cat date [clock format $date] \
|
||||
{*}$xtra _names [dict keys $xtra]
|
||||
}
|
||||
proc latest {{category ""}} {
|
||||
variable db
|
||||
if {$category eq ""} {
|
||||
set d [lsort -stride 2 -index {1 1} -integer -decreasing $db]
|
||||
dict for {nm inf} $d break
|
||||
return [list [Rec $nm {*}$inf]]
|
||||
}
|
||||
set latestbycat {}
|
||||
dict for {nm inf} [lsort -stride 2 -index {1 1} -integer $db] {
|
||||
dict set latestbycat [lindex $inf 0] [list $nm {*}$inf]
|
||||
}
|
||||
return [list [Rec {*}[dict get $latestbycat $category]]]
|
||||
}
|
||||
proc latestpercategory {} {
|
||||
variable db
|
||||
set latestbycat {}
|
||||
dict for {nm inf} [lsort -stride 2 -index {1 1} -integer $db] {
|
||||
dict set latestbycat [lindex $inf 0] [list $nm {*}$inf]
|
||||
}
|
||||
set result {}
|
||||
dict for {- inf} $latestbycat {
|
||||
lappend result [Rec {*}$inf]
|
||||
}
|
||||
return $result
|
||||
}
|
||||
proc bydate {} {
|
||||
variable db
|
||||
set result {}
|
||||
dict for {nm inf} [lsort -stride 2 -index {1 1} -integer $db] {
|
||||
lappend result [Rec $nm {*}$inf]
|
||||
}
|
||||
return $result
|
||||
}
|
||||
|
||||
namespace export add latest latestpercategory bydate
|
||||
namespace ensemble create
|
||||
}
|
||||
|
||||
if {$argc < 2} {
|
||||
puts stderr "wrong # args: should be \"$argv0 dbfile subcommand ?args...?\""
|
||||
exit 1
|
||||
}
|
||||
udb::Load [lindex $argv 0]
|
||||
set separator ""
|
||||
if {[catch {udb {*}[lrange $argv 1 end]} msg]} {
|
||||
puts stderr [regsub "\"udb " $msg "\"$argv0 dbfile "]
|
||||
exit 1
|
||||
}
|
||||
foreach row $msg {
|
||||
puts -nonewline $separator
|
||||
apply {row {
|
||||
dict with row {
|
||||
puts "Title: $description"
|
||||
puts "Category: $category"
|
||||
puts "Date: $date"
|
||||
foreach v $_names {
|
||||
puts "${v}: [dict get $row $v]"
|
||||
}
|
||||
}
|
||||
}} $row
|
||||
set separator [string repeat - 70]\n
|
||||
}
|
||||
|
||||
udb::Store [lindex $argv 0]
|
||||
91
Task/Simple-database/Tcl/simple-database-2.tcl
Normal file
91
Task/Simple-database/Tcl/simple-database-2.tcl
Normal file
|
|
@ -0,0 +1,91 @@
|
|||
bash$ udb.tcl db
|
||||
wrong # args: should be "udb.tcl dbfile subcommand ?args...?"
|
||||
bash$ udb.tcl db ?
|
||||
unknown or ambiguous subcommand "?": must be add, bydate, latest, or latestpercategory
|
||||
bash$ udb.tcl db add
|
||||
wrong # args: should be "udb.tcl dbfile add title category ?date? ?arg ...?"
|
||||
bash$ udb.tcl db add "Title 1" foo
|
||||
bash$ udb.tcl db add "Title 2" foo
|
||||
bash$ udb.tcl db add "Title 3" bar
|
||||
bash$ udb.tcl db bydate
|
||||
Title: Title 1
|
||||
Category: foo
|
||||
Date: Tue Nov 15 18:11:58 GMT 2011
|
||||
----------------------------------------------------------------------
|
||||
Title: Title 2
|
||||
Category: foo
|
||||
Date: Tue Nov 15 18:12:01 GMT 2011
|
||||
----------------------------------------------------------------------
|
||||
Title: Title 3
|
||||
Category: bar
|
||||
Date: Tue Nov 15 18:12:07 GMT 2011
|
||||
bash$ udb.tcl db latest
|
||||
Title: Title 3
|
||||
Category: bar
|
||||
Date: Tue Nov 15 18:12:07 GMT 2011
|
||||
bash$ udb.tcl db latest foo
|
||||
Title: Title 2
|
||||
Category: foo
|
||||
Date: Tue Nov 15 18:12:01 GMT 2011
|
||||
bash$ udb.tcl db latest bar
|
||||
Title: Title 3
|
||||
Category: bar
|
||||
Date: Tue Nov 15 18:12:07 GMT 2011
|
||||
bash$ udb.tcl db latestpercategory
|
||||
Title: Title 2
|
||||
Category: foo
|
||||
Date: Tue Nov 15 18:12:01 GMT 2011
|
||||
----------------------------------------------------------------------
|
||||
Title: Title 3
|
||||
Category: bar
|
||||
Date: Tue Nov 15 18:12:07 GMT 2011
|
||||
bash$ udb.tcl db add "Title 4" bar "12:00 Monday last week"
|
||||
bash$ udb.tcl db bydate
|
||||
Title: Title 4
|
||||
Category: bar
|
||||
Date: Mon Nov 14 12:00:00 GMT 2011
|
||||
----------------------------------------------------------------------
|
||||
Title: Title 1
|
||||
Category: foo
|
||||
Date: Tue Nov 15 18:11:58 GMT 2011
|
||||
----------------------------------------------------------------------
|
||||
Title: Title 2
|
||||
Category: foo
|
||||
Date: Tue Nov 15 18:12:01 GMT 2011
|
||||
----------------------------------------------------------------------
|
||||
Title: Title 3
|
||||
Category: bar
|
||||
Date: Tue Nov 15 18:12:07 GMT 2011
|
||||
bash$ cat db
|
||||
{Title 1} {foo 1321380718 {}}
|
||||
{Title 2} {foo 1321380721 {}}
|
||||
{Title 3} {bar 1321380727 {}}
|
||||
{Title 4} {bar 1321272000 {}}
|
||||
bash$ udb.tcl db add "Title 5" foo "12:00 Monday last week" Comment 'Wholly excellent!'
|
||||
bash$ cat db
|
||||
{Title 1} {foo 1321380718 {}}
|
||||
{Title 2} {foo 1321380721 {}}
|
||||
{Title 3} {bar 1321380727 {}}
|
||||
{Title 4} {bar 1321272000 {}}
|
||||
{Title 5} {foo 1321272000 {Comment {Wholly excellent!}}}
|
||||
bash$ udb.tcl db bydate
|
||||
Title: Title 4
|
||||
Category: bar
|
||||
Date: Mon Nov 14 12:00:00 GMT 2011
|
||||
----------------------------------------------------------------------
|
||||
Title: Title 5
|
||||
Category: foo
|
||||
Date: Mon Nov 14 12:00:00 GMT 2011
|
||||
Comment: Wholly excellent!
|
||||
----------------------------------------------------------------------
|
||||
Title: Title 1
|
||||
Category: foo
|
||||
Date: Tue Nov 15 18:11:58 GMT 2011
|
||||
----------------------------------------------------------------------
|
||||
Title: Title 2
|
||||
Category: foo
|
||||
Date: Tue Nov 15 18:12:01 GMT 2011
|
||||
----------------------------------------------------------------------
|
||||
Title: Title 3
|
||||
Category: bar
|
||||
Date: Tue Nov 15 18:12:07 GMT 2011
|
||||
Loading…
Add table
Add a link
Reference in a new issue