Tcl の文字列変数から、空白、ハイフンなどを含むすべての特殊文字をアンダースコアに置き換えようとしています。
例
input: Stack Overflow helps%me(a lot output: Stack_Overflow_helps_me_a_lot
以下のコードを書きましたが、動作していないようです。
set varname $origVar
puts "Variable Name :>> $varname"
if {$varname != ""} {
regsub -all {[\s-\]\[$^?+*()|\\%&#]} $varname "_" $newVar
}
puts "New Variable :>> $newVar"
1 つの問題は、$varname の文字列を置き換える代わりに、$varname ではなく $origVar 内で最初に検出されたスペースの後にデータを削除することです。また、$newVar に格納される値はありません。理由がわかりません。また、tclの本のサンプルコード(適切な構文について)を読みましたが、それによると、このようなものになるはずです
regsub -all {[\s-][$^?+*()|\\%&#]} $varname "_" newVar
そのため、同じ構文を使用しましたが、機能せず、必要な $varname 値の代わりに $origVar を変更した場合と同じ結果になりました。