2017-09-28 13 views
0

これは私を逃げ出しています。ブロックを含むファイルに書き込むと、改行が機能しません

この最初の方法は、私がそれを望む方法を正確に見ています。私はそれをファイルに書きたいだけです。

def write_dir_two 
    Dir.chdir("/vagrant/TestRails/Music") 
    Dir.glob('*') do |file| 
    if File.ftype(file) == "directory" 
     puts Dir.entries(file) 
    end 
    end 
end 

私は改行を動作させることができません。私は補間を試して、 "セパレータ"変数、すなわちseparator = "\n"を作成しました。とても簡単な仕事で、他の状況でもやっているようです。私はすべての私の仕事以外のソリューションを残しましたが、基本的に私はこのような何かをしようとしています - music.write(Dir.entries("#{file}\n"))。つまり、各ファイルにはそれぞれ独自の行があります。私もfile + "\n"を試しましたが、これも失敗しました。

def write_dir_one 
    music = File.new("music_2", 'w') 
    Dir.chdir("/vagrant/TestRails/Music") 
    Dir.glob('*') do |file| 
     if File.ftype(file) == "directory" 
     music.write(Dir.entries(file)) 
     end 
    end 
end 

putsだけ画面にそれをフォーマットする素晴らしい仕事をしていません。

編集:file.writeの代わりにfile.putsを使用することができませんでした。これはうまくいきますが、他の誰かが違う、より良い方法を持っていれば、当分の間それを開いたままにしておきます。

+2

を 'file.puts'がより良い方法です。また、「それは失敗しました」というひどい問題の記述です。 __how__に失敗しましたか? –

+0

新しい行がちょうど間違った場所にあるように聞こえます。 '' music.write( "#{Dir.entries(file)} \ n") ' – Puhlze

+0

@sergioについて - 正しいですが、問題の記述子が正しくありません。構文エラーで失敗していました。 – stuartambient

答えて

1

Dir#entriesは、指定されたディレクトリ内のすべてのファイルの配列を返します。その結果、Dir.entries("#{file}\n")はその名前の末尾に改行を持つディレクトリがないため失敗します。それは、具体的

を述べているので、配列引数で呼び出された場合、それは単にそれぞれを書き込み、それとFile#puts作品を出力する前に文字列に変換する文字列以外にto_sを呼び出すためFile#writeが動作しない理由は、あります要素を改行します。

あなたがputsを使用せずにこれをやってみたかったのであれば、あなただけ呼び出すことができます。

music.write(Dir.entries(file).join("\n")) 
+0

その説明をありがとうございます。私が混乱したのは、改行と配列を使用していましたが、それぞれのメソッドで繰り返していました。 'each'とシャベル演算子を使ってファイルに' array'を書き出すことをテストしました。そして、 'def write_dir_three [" abc "、" def "、" ghi "]。 @music << "#{letters} \ n" end end' – stuartambient

関連する問題