2016-09-13 1 views
0

J'ai besoin de concaténer deux chaînes dans tcl, puis de couper la chaîne concaténée s'il y a un caractère indésirable comme '_'. Les chaînes sont stockées dans des variables tcl et le problème auquel je fais face est que j'ai besoin de concaténer ces deux chaînes comme "$str1_$str2". Fondamentalement joindre deux chaînes avec un '_' entre eux. J'ai trouvé le moyen de le faire comme ci-dessous.Concaténation de deux chaînes en tcl

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 '_']; 

Cela me donne la valeur de outString comme ci-dessous:

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

Je cherche une façon plus optimisée pour atteindre ma tâche. J'ai essayé de joindre simplement les deux chaînes comme

set outString "$str1_$str2" 

Mais je reçois l'erreur « No such variable str1_ $ », car « _ » underscore peut faire partie du nom de la variable.

Toutes les suggestions seraient appréciées.

Répondre

4

Lors de l'interpolation d'une variable dans une chaîne, vous pouvez utiliser des accolades pour protéger le nom de la variable.

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

(La même syntaxe fonctionne dans les scripts shell, en Perl, et probablement dans d'autres langages de script.)

Mais je ne compterais pas sur celle-ci étant « plus optimisé » que l'appel append. C'est plus facile à lire, ce qui est une bonne raison de le faire à mon humble avis, mais ne supposez pas que c'est plus rapide jusqu'à ce que vous l'ayez mesuré.

Référence: http://www.tcl-lang.org/man/tcl8.6/TclCmd/Tcl.htm#M12

+1

Quels sont les accolades? C'est dans [Tcl (n)] (http://www.tcl-lang.org/man/tcl8.6/TclCmd/Tcl.htm#M12). –

+0

@DonalFellows: Merci, mis à jour. –