2016-12-05 17 views
0

メモリと私のケースでファイルの行を以下のように置き換えようとしています。置換と範囲の置換出力

  1. 第1のケース;なぜ各実行の下のスクリプトは、最後のリスト文字列の後に空白行を追加するのですか?メモリなしの任意のオプション?

    set lines [split [read $fp] "\n"] 
    close $fp 
    lset lines 5 {TESTT} 
    set fp [open $flnm w] 
    puts $fp [join $lines \n] 
    close $fp 
    
  2. 第2の場合;範囲線で置き換える方法は?

答えて

0

データは最後に改行で始まります。 splitがそれをセパレータとして使用しているため、そのリストの最後に空の要素が生成されるためです。 次に、joinがファイルの内容を再作成します(追加した変更の影響を受けます)。putsが文書化されているため、putsは後で改行を追加します。

puts -nonewline $fp [join $lines \n] 

は、リストの要素の範囲(したがって、行の範囲を)置き換えるには:あなた自身改行の制御を取っているので、

おそらく-nonewlineオプションを使用したいですlreplaceコマンドを使用する必要があります。しかし、これはリストの値をとり、リストの値を返します。

set insertion [list "insert me #1" "insert me #2" "insert me #3" "insert me #4"] 
set lines [lreplace $lines 5 7 {*}$insertion] 
+0

のように、インプレース編集はしません。最初のケースは完全に動作します。多くのありがとう、ドナルド! – Andre

+0

@Andreでは、 'puts -nonewline'の代わりに' read -nonewline'を使うこともできます。データを取得するときに問題を処理するので、行のリストには最後の空の要素がありません。 –

関連する問題