Version 17 of join

Updated 2010-03-17 16:37:16 by lars_h

http://www.purl.org/tcl/home/man/tcl8.5/TclCmd/join.htm

Join converts a Tcl list into a string. It glues together the elements of a list using a supplied string as element separator. Default is a space. For example:

 % join {a b c} " and "
 a and b and c
 % join {a b c} ""
 abc

- thanks

RS A typical application is to process a text that consists of several lines:

 foreach line [split $input \n] {
    # do something with line, produce output
    lappend outlines $out
 }
 set result [join $outlines \n] 

Another is to flatten out one level of embedded lists:

 % join {1 {2 {3 4}} 5}
 1 2 {3 4} 5

Lars H: As of Tcl 8.5, a more kosher way of doing that would be

  concat {*}$nestedList

e.g. (yes, it looks silly)

  % concat {*}{1 {2 {3 4}} 5}
  1 2 {3 4} 5

The difference is that concat can return a list (something internally stored as a list), whereas join always returns a string, resulting in shimmering.


Matrices are a frequent application for nested lists. Here's a simple matrix summer that uses join twice: once for concatenating the rows; then for putting + signs in between so expr has something to parse:

 proc matsum matrix {expr [join [join $matrix] +]}

See also: split