- parray arrayName
- parray arrayName ?pattern?
parray prints an array's keys and values, in key alphabetic order and formatted to the longest key name, to stdout. RS
Sometimes, a developer erroneously tries to do something like this:
HE 2010-02-02: I use the following procedures to save/load an array in/from a file:
Sometimes, a developer erroneously tries to do something like this:
set str [parray env]or some other array. parray only produces output to stdout. Just copy /installdir/tcl/lib/tcl8.4/parray.tcl and modify to accumulate a string rather than calling puts . Call the proc something else, though, or you may unintentionally impact some other tool.LES on 10-18-2008: I just don't get it. A command/proc that returns data can be used in two ways: returning the data or printing it to stdout - because printing the output of a command that returns data is trivial. But a command/proc that will adamantly output to stdout only is half as useful (or even less than half). It can't simply return the data or feed it to a variable as in the set str [parray env] example above. What is the point of limiting parray like that? Imagine if all commands had that limitation, how much harder life would be.DKF: The parray command prints an array, just as puts prints a string. The equivalent for scripted processing is array get.[Maria] - 2010-06-11 08:33:15yes, DFK, but puts, unlike parray, can take a channelId argument to instruct it to print to a specific channel.[LIV] - 2010-02-01 17:19:35puts $var can be redirected to a file, but parray can't. The format from [array get ARRAYNAME] does not look good when write them to a file.LV: LIV makes a good argument. I recommend you submit a feature request at http://tcl.sf.net/ requesting that parray support an optional channel.Lars H: You may also take a look at exhibit.
HE 2010-02-02: I use the following procedures to save/load an array in/from a file:
proc sarray {filename arrayname} {
upvar $arrayname name
set fid [open $filename w]
foreach index [lsort [array names name]] {
regsub -all -- {\n} [list $index $name($index)] {\n} tmp
puts $fid $tmp
}
close $fid
return
}
proc larray {filename arrayname} {
upvar $arrayname name
set fid [open $filename r]
while {![eof $fid]} {
gets $fid zeile
if {$zeile eq {}} {
continue
}
regsub -all -- {\\n} $zeile "\n" tmp
array set name $tmp
}
close $fid
return
}