Arjen Markus (13 january 2003) I have been experimenting with Metakit as a convenient package to store measurement data (of course this was the original design goal of Metakit, as Jean-Claude Wippler has told me), but still getting some feeling for working with such a database package is worthwhile.
The script below (slightly adapted from the original) creates a database from a simple data file and does some basic statistical analysis.
The performance is quite acceptable to me:
The platform:
Intel Pentium II, 350 MHz Windows 98 tclkit, downloaded 3 july 2002
The data file:
Simple text file, 1.7 MB 44000 lines each containing 9 integers
The results:
11 seconds for reading the data file and creating the database 11 seconds for retrieving 4 columns of 44000 data each and determining basic statistical properties resulting database is 0.9 MB about 80 lines of code
# testdata.tcl -- # # Create a Metakit database and perform some simple statistical # tests # # version 0.1: initial implementation, january 2003 package require Mk4tcl source statistics.tcl # fillDatabase # Fill the database with the contents of a tabular file # # Arguments: # db Opened database # input Name of the input file # # Result: # Name of table (view) that was created # proc fillDatabase { db input } { set table [mk::view layout $db.table \ {date a:F b:F c:F d:F}] set infile [open $input "r"] # Skip header gets $infile line while { [gets $infile line] > -1 } { foreach {dummy yy mm dd hh a b c d} $line {break} set date [format "19%2.2d%2.2d%2.2d%2.2d" $yy $mm $dd $hh] mk::row append $table date $date a $a \ b $b c $c d $d } close $infile mk::file commit $db return $table } # getColumn -- # Return a list consisting of the given column # # Arguments: # table Table or view to retrieve # colname Name of the column # # Results: # List of values # proc getColumn { table colname } { set result {} mk::loop c $table { lappend result [mk::get $c $colname] } return $result } # main -- # Main code # console show mk::file open db "mydata.tkd" set table [fillDatabase db [file join .. "myfile.dat"]] set table "db.table" foreach col {a b c d} { set result [getColumn $table $col] puts "$col: [::math::statistics::basicStats $result]" } mk::file close db