2016-12-19 11 views
0

問題は、ファイルにいくつかの値を保存するたびに、後で空白を各行に追加するということです。例えばRails:末尾の空白でファイルがいっぱいになる

私はinitaialコンテンツを操作してしまったファイルを読み込む:

:ここ

"cv" =>"cv\r\n"

"cv\r\nvd" =>"cv\r\n\r\nvd\r\n"

は、私は私のファイルを作成する方法であります

File.open(path, "w+") do |f| 
    f.truncate(0) 
    f.puts value 
end 

ありがとうそれぞれの助け!

答えて

1

理論

valueは改行がvalueからではなく、putsから来ていないので、value.chompは何も変わりません、改行を持っていない場合:

は、レコードセパレータを書き込みます(通常、改行)は、 の改行文字列で終わっていないものの後になります。

IO#writeあなたが探している方法です。

「W +」読み書き、ゼロ長 に既存のファイルを切り捨てたり、読み書きのための新しいファイルを作成します:ためw+スタンドので

最後に、f.truncate(0)は必要ありません。

path = "test.txt" 
value = 2 

File.open(path, "w+") do |f| 
    f.write value 
end 

p File.read(path) 

リターン:putsの代わりwrite

"2" 

、それが返されます。

"2\n" 

改行を文字列の中?

何らかの理由で値が内部に改行を含む文字列の場合、chompwriteは役に立ちません。一つだけで複数の改行を置き換えるためにgsubを使用します。

f.write value.gsub(/\R+/," ") 
+0

HM:

path = "test.txt" value = "Hello\r\n\r\nWorld\n\nLine #3\r\rLine #4" File.open(path, "w+") do |f| f.write value.gsub(/\R+/,"\n") end p File.read(path) #=> "Hello\nWorld\nLine #3\nLine #4" 

あなたの代わりに改行のスペースが必要な場合。 'f.write value'はファイルに何も追加しません。 'f.write(value)'はファイルに値を追加しますが、後ろに空白が付きます。 – jonhue

+0

これは予想外です。 'p value'は何を返しますか?値はメソッドか変数か? 'f.write value'だけが行にありますか? –

+0

'value'は変数で、例えば' gt \ r \ nki'を返します。'gt \ r \ nnki' – jonhue

関連する問題