2016-08-09 10 views
0

テキストファイルに新しい行を追加しています。ここでRuby:新しい行の問題を追加する

はコードです:

def save_line_o_a(date, name, amount) 
    open("accounts.txt","a+") do |account_file| 
     account_file.write "#{date};#{name};#{amount};#{amount}; " 
    end 
end 

問題は各#{amount}後、私は新しい行を持って、それは同じ行に書かれていないということです。

Exemple:

2016-08-09 15:26:16 +0200;Original amount;450 
;450 
; 

編集(押されすぎて入力しすぎた...) 誰かが私にこの理由を説明できますか?

+4

パラメータの 'amount'は、改行を含む文字列です。それを生成するコードを修正してください。 –

+0

また、いくつかの簡単なテクニックを学ぶことで、自分でエラーを修正することができます。デバッグ印刷もその一つです。ラインデバッガは別のものです。 –

+0

完全に忘れてしまった。しかし、私はそれの中のすべてのパラメータを持つ文字列を "chomp"しようとしましたが、最後の\ n(この場合)のためだけにchosが動作しますか? – Andromelus

答えて

1

コメントで特定されているように、フィールド値に改行文字があることが問題です。最良の解決策は、そのデータがどこから来ているのかにかかわらず、それらを削除することです(または最初に作成しないでください)。

あなたには、いくつかの理由 - とのためにあなたがそのコードを共有していなかったので、私たち、ここでは事実の後にそれを行うための簡単な方法だということができない場合は、次の

def save_line_o_a(date, name, amount) 
    open("accounts.txt","a+") do |account_file| 
    new_line = "#{date};#{name};#{amount};#{amount}; ".tr("\n", " ") 
    account_file.write(new_line) 
    end 
end 

これは交換するString#trを使用していますすべての改行(\n)文字列内にスペースを入れてください。完全に削除するには、" "の代わりに""(空の文字列)を使用します。

+0

実際には、 'amount'は呼び出し側で修正する必要があります。それは明らかに数字のようなものであることを意味する。 –

+0

@SergioTulentsevその旨のメモを追加しました。 –

関連する問題