私はtclに関する助けが必要です。ようにMain = 2
とMain = 1
との交換、例えば、私は、各項目に対して1により整数値をインクリメントする必要tclファイル内で見つけて置き換えます
Main = 1
Bgp = 0
Backup = 1
:私は、次の形式のテキストファイルを有します。
私はtclに関する助けが必要です。ようにMain = 2
とMain = 1
との交換、例えば、私は、各項目に対して1により整数値をインクリメントする必要tclファイル内で見つけて置き換えます
Main = 1
Bgp = 0
Backup = 1
:私は、次の形式のテキストファイルを有します。
(私の答えを変更しました:私は申し訳ありませんが、少しイライラした)
処理されるべきテキストがdata
という変数である場合は、1単語のリストにテキストをオンにし、それら3を通過することができますこのような時に:この場合
set result ""
foreach {keyword op value} [split [string trim $data]] {
append result "$keyword $op [incr value]\n"
}
、各キーワード(メイン、BGP、バックアップ、...)はループ変数keyword
内しまい、それぞれが等号(または第二には何でも位置)はループ変数op
の中で終わり、各値は完成したものがvalue
の内部に終わります。
(分割するとき、それは最初のテキストの最初と最後に空白をトリミングするために一般的に良い考えです:それ以外の場合は1が空に「ゴースト」の要素を取得することができますしたがって:split [string trim $data]
)を
我々は読むことができます私たちからの読み取りとファイルへの書き込みの両方できるようにr+
を使用
set f [open datafile r+]
set data [read $f]
注:このようなファイルからデータ「のデータ・ファイル」。
我々はデータを処理した後、我々はこのようなファイルの先頭にそれを書き戻すことができます。
seek $f 0
puts -nonewline $f $result
close $f
またはおそらくこのような、我々はr+
でファイルを開く必要はありませんでした意味:
close $f
set f [open datafile w]
puts -nonewline $f $result
close $f
は一緒にそれを置く:
set f [open datafile r+]
set data [read $f]
set result ""
foreach {keyword op value} [split [string trim $data]] {
append result "$keyword $op [incr value]\n"
}
seek $f 0
puts -nonewline $f $result
close $f
これ。手順reは、標準パッケージfileutil
を使用して少し簡素化することもできます。このパッケージは、私たちのファイルのオープン、クローズ、読み取り、書き込みの処理を行うことができます。
まず、我々は手順で処理を置く:
proc process data {
foreach {keyword = value} [split [string trim $data]] {
append result "$keyword ${=} [incr value]\n"
}
return $result
}
その後、我々はちょうどprocess
によって処理された新しい内容でファイルの内容を更新するupdateInPlace
を頼む頼むことができます。
package require fileutil
::fileutil::updateInPlace datafile process
これだけです。
ドキュメント: append、 close、 fileutil (package)、 foreach、 incr、 open、 package、 proc、 puts、 read、 return、 seek、 set、 split、 string
別のアプローチ:
# read the data
set f [open file]
set data [read -nonewline $f]
close $f
# increment the numbers
regsub -all {=\s*(\d+)\s*$} $data {= [expr {\1 + 1}]} new
set new [subst -novariables -nobacklashes $new]
# write the data
set f [open file w]
puts $f $new
close $f
コマンドをregsub Main = [expr {1 + 1}]
でMain = 1
を交換し、その後substコマンドは、実際に
新しい値を計算する式exprコマンドを呼び出し、あなたは何を試してみましたか?これは簡単なチュートリアルを通して作業しなければならないかなり基本的なプログラムです。 –