2012-04-10 25 views
3
$arg=TEST #### Requested, NOT AVAILABLE psy #; 

#が動的に生成される場所の上に文字列があります。 文字列置換を行うにはtclの関数を使用する必要があります。 は基本的に私は上記の式を形成し、tcl文字列置換

PSY#

TEST ####要求AVAILABLEないようにそれを表示する(、)コンマを削除する必要がありますここに私がやったことだが、それは動作しません。問題は、あなたが引用されて http://www.tcl.tk/man/tcl8.5/TclCmd/regsub.htm

答えて

11

:私はから機能を参照する場所

regsub -all {"Requested,"} $arg {"Requested"} arg 

これ

です。あなたは実際に文字列 "Requested,"(引用符を含む)をチェックしていますが、それはあなたが望むものではありません。どちらか試してみてください曲がりくねっ-ブラケット( })または二重引用符( ")を取り払う:

set arg "TEST #### Requested, NOT AVAILABLE psy #;" 
regsub -all "Requested," $arg "Requested" arg 

あなたはを取り除くために必要なすべてがコンマであれば、あなたは(だけでそれを置き換えることを置き換える/検索することができます空の文字列""):コメンターが述べたよう

regsub -all "," $arg "" arg 

又は

regsub -all {,} $arg {} arg 

、後者は一般的な場合、SIに良いかもしれ正規表現には多くのバックスラッシュ(/)が含まれていて、{}の角括弧には、""の引用と同じように、大量の余分なバックスラッシュエスケープが必要ありません。あなたがグローバル削除をしたくない場合は正規表現は、[string map]

set arg [string map { , "" } $arg] 

ある

+1

私は(ほとんど)常にで正規表現を置くことをお勧めします中括弧;彼らは多くのバックスラッシュを含んでいる傾向があります(特に曖昧ではない場合は特に)。中括弧は書きやすくします。それらを引用符で囲むことは、バックスラッシュにつながります。 –

+0

@DonalFellows良い点。それを反映するように答えが更新されました。 –

8

別のオプション、あまりヘビー級:

set idx [string first , $arg] 
set arg [string replace $arg $idx [incr idx]] 
-2
set hfkf "555"; 
set arg "TEST #### Requested, NOT AVAILABLE psy #;" 
regsub -all "Requested," $arg "Requested" arg 
regsub -all {"Requested,"} $arg {"Requested"} arg 
+1

あなたの答えは有効かもしれませんが、可能な限り、コードのみの回答は避けるべきです。コードが何をし、どのようにOPの問題を解決するかについての説明を追加する方が常に良いです。ありがとう! – 2Dee