2016-09-13 134 views
0

'_'のような不要な文字がある場合は、tclで2つの文字列を連結し、連結文字列をトリムする必要があります。文字列はtcl変数に格納されており、私が直面している問題は"$str1_$str2"のような2つの文字列を連結する必要があることです。基本的に2つの文字列を'_'で結合します。私はそれを以下のようにする方法を見つけました。tclの2つの文字列の連結

set str1 "mystring1"; #string 1 
    set str2 "mystring2"; #string 2. This string could be Empty String as well. 

    set outString [append outString "_" $str2]; 
    set outString [string trimright '_']; 

以下のように、これは私にoutStringの値を与える:私は私のタスクを達成するために、より最適化された方法を探しています

puts $outString; 
    mystring1_mystring2 #if $str2 is not empty 
    mystring1    #if $str2 is empty. 

。私は単に

set outString "$str1_$str2" 

のような2つの文字列を参加しようとしたが、アンダースコア「_」は、変数名の一部にすることができますので、私は「$ str1_としてはそのような変数」とエラーが出ます。

何か提案がありがとうございます。

答えて

4

変数を文字列に補間する場合は、中括弧を使用して変数名を保護できます。

set str1 "mystring1"; 
set str2 "mystring2"; 
set outString "${str1}_${str2}" 

(同じ構文はPerlで、おそらく他のスクリプト言語では、シェルスクリプトで動作します。)

しかし、私はこれがappendを呼び出すことを「より多くの最適化」された上でカウントされないだろう。 IMHOはこれを行うには十分な理由がありますが、測定するまではそれがより高速であるとは想定していません。

参照:http://www.tcl-lang.org/man/tcl8.6/TclCmd/Tcl.htm#M12

+1

どちらの中かっこは?それは[Tcl(n)](http://www.tcl-lang.org/man/tcl8.6/TclCmd/Tcl.htm#M12)です。 –

+0

@DonalFellows:ありがとう、更新されました。 –