カンマ区切りのデータでカンマクォートを許す
たとえば次のような3つのリストデータがあるとき
aaa bbb ccc  | 
% join "aaa bbb ccc" , aaa,bbb,ccc  | 
% split [join "aaa b,bb ccc" ,] , aaa bb b ccc  | 
ところが,Tcl にはこの機能がないのです.
(※拡張パッケージが存在してました.下のリンクを参照下さい.ただし Tcl8.3 以上が必要のようです)
しゃーないので,CSV データとリスト間の変換プロシージャを書いてみました.csvsplit と csvjoin というコマンドです.プロシージャ名は下の am0250 から頂きました.
proc csvsplit {val} {
    regsub -all {""} $val "\3" val
    while {1} {
	if {[regsub {("[^",]+),([^"]+")} $val "\\1\5\\2" val]<=0} break
    }
    foreach x [split $val ,] {
	regsub -all "\3" $x {"} x
	regsub -all "\5" $x "," x
	regsub {^"(.*)"$} $x {\1} x
	lappend xx $x
    }
    return $xx
}
proc csvjoin {val} {
    if {[regsub -all {"} $val {""} val]<=0} break
    foreach x $val {
	if {[regexp "," $x]} {set x "\"$x\""}
	lappend xx $x
    }
    return [join $xx ,]
}
 | 
% set aaa {123,"123,521.2","Mary says ""Hello, I am Mary"""}
123,"123,521.2","Mary says ""Hello, I am Mary"""
% puts org:$aaa                      ;# 元データ
org:123,"123,521.2","Mary says ""Hello, I am Mary"""
% puts spl:[join [csvsplit $aaa] |]  ;# splitデータ
spl:123|123,521.2|Mary says "Hello, I am Mary"
% puts joi:[csvjoin [csvsplit $aaa]] ;# そのjoin
joi:123,"123,521.2","Mary says ""Hello, I am Mary"""
 |