2016-06-30 7 views
0

最後に{を取得した場合、提供されるすべての行の末尾に '\ n'を付けようとしています。 無効なbarewordエラーを取得する

ので、私は、コマンド

set fp [open "test.tcl" r] 
set new_file [open "final.tcl" w+] 
while {![eof $fp]} { 
    get $fp line 
    if $line {$'{'} { 
    puts $new_file '\n' 
    } 
} 

が、そのが動作していない、時にはそれがエラー「無効な裸の単語」を与えるを書きました。 私を助けてもらえますか?

+0

あなたはおそらく意味コマンドはマングルされており、テキスト行を印刷していない場合は、代わりに取得を取得します。また、変更が表示される前にファイルをフラッシュまたはクローズする必要があります。 –

+0

あなたのコードは、(おそらく)各行を式として評価しようとしています。これがあなたが望むものであるとは思われません。 –

答えて

1

どの程度

set fp [open test.tcl] 
set new_file [open final.tcl w+] 
while {[gets $fp line] >= 0} { 
    if {[regexp {\{$} $line]} { 
     puts $new_file $line\n 
    } else { 
     puts $new_file $line 
    } 
} 
close $fp 
close $new_file 

ドキュメント:closegetsopenputsSyntax of Tcl regular expressionsregexpsetwhile

+0

作品。ありがとう、私が '}'を得ない限り、今後のすべての行に\ tを入れたいのであればどうしますか?もう一度私を助けてくれることを願っています。 –

+0

@DhruvPaul:申し訳ありませんが、いいえ。 Prettyprintingは見た目よりも難しく、かなりイライラすることがあります。まず、正規表現は長い目で見ても大した助けにはならないでしょう:あなたは、文字ごとにソースコードを調べ、さまざまな種類のブレースの使い方を区別する方法を検討する必要があります。事前印刷を試してみることで多くのことを学ぶことができますが、これは氷山の最先端に過ぎず、このままではこの答えは長いチュートリアルに変わります。あなたがそれらを掲示すれば私はさらなる質問に答えるかもしれないが、私はそれを通って歩かないだろう。もう一度、申し訳ありません。 –

関連する問題