49 lines
1.1 KiB
Tcl
49 lines
1.1 KiB
Tcl
package require Tcl 8.6
|
|
namespace import tcl::mathfunc::min
|
|
namespace import tcl::mathfunc::max
|
|
|
|
proc {#} args {}
|
|
|
|
proc llen {lst} { return [llength $lst] }
|
|
proc slen {str} { return [string length $str] }
|
|
proc trim args { return [uplevel [concat string trim $args]] }
|
|
proc replace {str a b} { return [string map [list $a $b] $str] }
|
|
|
|
proc ladd {list} {
|
|
set t 0
|
|
foreach x $list { incr t $x }
|
|
return $t
|
|
}
|
|
|
|
proc lmul {list} {
|
|
set p 1
|
|
foreach x $list { set p [expr {$p * $x}] }
|
|
return $p
|
|
}
|
|
|
|
# split s on a substring
|
|
proc splitstr {s sep} {
|
|
# replace $sep with ascii char 30, aka "record separator"
|
|
return [split [replace $s $sep "\x1E"] "\x1E"]
|
|
}
|
|
|
|
proc must_regexp args {
|
|
if {! [uplevel [concat regexp $args]]} {
|
|
error "regexp failed"
|
|
}
|
|
}
|
|
|
|
# transpose an array of strings
|
|
proc transpose strings {
|
|
set out {}
|
|
set C [slen [lindex $strings 0]]
|
|
for {set i 0} {$i < $C} {incr i} {
|
|
set column {}
|
|
foreach row $strings {
|
|
lappend column [string index $row $i]
|
|
}
|
|
lappend out [join $column ""]
|
|
}
|
|
return $out
|
|
}
|