2009-07-27 11 views
5

私はファイルにアクセスしています。追加する前に、ファイルから最後の行を削除します。 Rubyでこれを行う効率的な方法はありますか?Rubyでファイルの最後の行を削除するには?

これは私がファイルにアクセスするために使用していますものです:

file = File.new("imcs2.xml", "a") 

答えて

4

filename = "imcs2.xml" 
content = File.open(filename, "rb") { |io| io.read } 
File.open(filename, "wb") { |io| 
    io.print content.chomp 
    io.print "yourstuff" # Your Stuff Goes Here 
} 

また、ちょうどio.seek()後方の最後の改行を超えるいずれかの場合Tファイルの全体の最後の行を削除するには、あなたが最後の行の先頭を探し、そこから書き込みを開始します。この方法で使用することができます:

last_line = 0 
file = File.open(filename, 'r+') 
file.each { last_line = file.pos unless file.eof? } 

file.seek(last_line, IO::SEEK_SET) 
#Write your own stuff here 
file.close 
+0

置換テキストがファイルの最後の行の元のテキストよりも長い場合は、これが機能します。短い場合は、挿入された行の後に新しい行にプッシュされます。 – Excalibur

+0

このコードでは、ファイルの最後の行は削除されません。 –

1

最も簡単な方法は、単に、ファイル全体を読んで最後に「\ n」を削除し、あなた自身でそれをすべてを書き換えることです内容:あなたはワンと仮定

filename = "imcs2.xml" 
File.open(filename, "a") { |io| 
    io.seek(-1, IO::SEEK_CUR) # -1 for Linux, -2 for Windows: \n or \r\n 
    io.print "yourstuff" # Your Stuff Goes Here 
} 
6

を私はつもりはないよあなたがしようとしているものを推測しようあなたがもっと子タグを追加できるように、XMLファイルのルート要素の終了タグを取り除こうとしている場合は、を次にクローズルートタグを再追加すると、私は想像することができますRubyモジュールは、XMLを書く/編集する作業を容易にします。言ってるだけ。

おそらくビルダー:

hpricotも動作するようです:

  • ​​
+0

あなたは霊魂として仕事を得なければなりません:)。それはまさに私がやろうとしていたものです。それは小さなハックの仕事なので、私はあまり研究をしませんでしたが、余分なマイルに行くことに感謝します! –

+0

問題ありません!申し訳ありませんが、私は決定的な回答を投稿しませんでしたが、私はほぼ確実にあなたのためにこれを行うツールがあります。私は約15分間周りを検索し、これらを見つけました。もちろん、私が提供したものが十分でない場合は、プロジェクトを終了する動機を持って、より多くの、おそらくより良い解決策を見つける必要があります。 –

関連する問題