2016-06-01 14 views
0

私はExpectのちょっとした初心者ですが、私が書いているログ監視スクリプトで問題を乗り越えることはできません。Expect String連結のタブ

私はこの仕事を得ることができない理由でグーグルの時間を費やしてきた:

puts $redirect [concat "${time}\t" "${context}\t" "$id\t" "${eventtype}" "${eventstatus}\t" "${eventcontext}" ] 

\トン charが(それも他の\文字では動作しません)表示されません。どんなにどこで、私はそれを置く、私は別のものを試したしました:

puts $redirect [concat "${time}" "\t" "${context}" [...] ] 
puts $redirect [concat "${time}\t" "${context}" [...] ] 
puts $redirect [concat "${time}" "\t${context}" [...] ] 
puts $redirect [concat "${time}" \t "${context}" [...] ] 

*リダイレクトが[...]と同じで、私は連結してる他の文字列、あるset redirect [open $logfile a]

*です方法。 http://tcl.tk/man/tcl8.5/TclCmd/Tcl.htm#M10

[5]引数膨張から

。 単語が文字列 "{}"で始まり、その後に空白以外の文字が含まれている場合、先頭の "{}"が削除され、単語の残りの部分が解析され、他の単語として置換されます。 の置換後、その単語はリスト(コマンドまたは 変数の置換なし)として解析され、リストの場合は のようにバックスラッシュの置換が行われ、個々の内部単語は中くらいまたは半角で囲まれた で囲まれます。置換されたコマンド に単語が追加されます。たとえば、 "cmd a {} {b [c]} d {} {$ e f" g h "}"は、 "cmd a b {[c]} d {$ e} f" g h ""と同等です。

[6]ブレース。 単語の最初の文字が開いている中かっこ( "{")で、ルール[5]が適用されない場合、単語は一致する閉じる 中かっこ( "}")で終了します。単語内に中括弧があります:追加のそれぞれの開くために ブレースが追加されていなければなりません(ただし、 単語内の中かっこまたは小括弧が円記号で引用されている場合は ) )。 以下のバックスラッシュ改行を除いて、中括弧 の間の文字は置換されません。また、 セミコロン、改行、閉じ括弧、または空白のいずれも特殊な解釈を受け取りません。単語は、外側の中括弧の間にある 文字で構成され、中括弧 は含まれません。私はTAB、それが動作する前に文字を入れる場合は

puts $redirect [concat "${time}\n" "-\t${context}" [...] ] 

が、私はそれを使用することはできません。

皮肉なことに、私はこの仕事を得ることができます。

例出力:2016-06-01 15:43:12 - macro

募集出力:2016-06-01 15:43:12 macro

私はappendで文字列を構築する上で試してみたが、それが原因最大バッファ文字に文字列の部分を食べているように、それはだ、それは可能ですか?

何か不足していますか? アドバイスありがとうございます。

+0

を使用することであるコードへの代替方法はありますか? $ {time} \ t $ {context} \ t $ id \ t $ {eventtype} $ {eventstatus}という文字列リテラルの代わりに 'concat'を使用する理由はありますか? } \ t $ {eventcontext} '? –

+0

'append'の出力例は、 2016-06HANGUPNAVomain-1JUniqueId = JustSrvDomain-1464793190.747&HangupCause = 16e = Hangup&SphereGroup =&NextSphereName = hangup 2016-06-01 17:00:0058ledNum = 13666 2016-06-01 16:59 :55 最後に時間を置く、文脈がどこにもない、 "omain-1"は$ idの一部であり、..上に私があなたに与えた文字列を使った。 – Ticcio

+0

出力(端末への)が上書きされている(またはtclに類似している)ように、値にキャリッジリターン文字( '\ r')があるようです。あなたは文字列があなたが期待する値を正確に含んでいると確信していますか? –

答えて

2

これは、concatの機能です。それは空白を食べる。ドキュメントから

concatのために:

このコマンドは、それらのそれぞれから先頭と末尾の空白をトリミングした後にスペースと一緒にその引数のそれぞれを結合します。すべての引数がリストである場合、これを単一のリストに連結するのと同じ効果があります。任意の数の引数を許可します。 argsが指定されない場合、結果は空文字列になります。

0

@エタンはなぜあなたにとって役に立たないのか教えてくれました。

`append`失敗しているどのようにformat

puts $redirect [format "%s\t%s\t%s\t%s%s\t%s" $time $context $id $eventtype $eventstatus $eventcontext] 
関連する問題