Help save net neutrality! Learn more.
Close

#626 Extend parray

open
5
2012-07-20
2012-07-20
Talvo
No

parray is useful for quickly checking values set in an array. However, it has a limitation: It can only do glob matching of array keys.

I'd like to suggest a very minor modification to parray to make it a lot more useful: Allow the match-type flags that [array names] accepts (-glob, -regexp, -exact). The change is minor and totally backwards-compatible, since currently parray only accepts 1 or 2 arguments. Example code:

proc parray {a args} {

set nargs [llength $args]
if { $nargs > 2 } {
return -code error "Wrong # of arguments. Should be parray array ?type? ?pattern?"
}
upvar 1 $a array
if { ![array exists array] } {
error "\"$a\" isn't an array"
}
set maxl 0
set names [lsort [array names array {*}$args]]
foreach name $names {
if { [string length $name] > $maxl } {
set maxl [string length $name]
}
}
set maxl [expr {$maxl + [string length $a] + 2}]
foreach name $names {
set nameString [format %s(%s) $a $name]
puts stdout [format "%-*s = %s" $maxl $nameString $array($name)]
}

}

Discussion