web-dev-qa-db-ja.com

rubyのファイルの行に各配列要素を追加します

文字列の配列がある場合.

a = ['a', 'b', 'c', 'd']

そして、要素を1行に1ファイル(.txtなど)に出力したいと思います。これまでのところ:

File.new("test.txt", "w+")
File.open("test.txt", "w+") do |i|
    i.write(a)
end

これにより、test.txtファイルの1行に配列が表示されます。配列を反復処理して、各値をファイルの新しい行に追加するにはどうすればよいですか?

37
edc505

Array#each 配列を反復処理して IO#puts は、各要素をファイルに書き込みます(putsはレコード区切り文字、通常は改行文字を追加します):

File.open("test.txt", "w+") do |f|
  a.each { |element| f.puts(element) }
end

または、配列全体をputsに渡します。

File.open("test.txt", "w+") do |f|
  f.puts(a)
end

ドキュメントから:

配列引数で呼び出された場合、各要素を新しい行に書き込みます。

92
Stefan

非常に簡単な解決策があります:

IO.write("file_name.txt", your_array.join("\n"))
12

別の方法として、次のように各要素が新しい行にあるように、単純に配列を「\ n」で結合することができます。

a = %w(a b c d)

File.open('test.txt', 'w') {|f| f.write a.join("\n")}

テキストファイルに既にある値を上書きしたくない場合は、新しい情報を最後に追加するだけです。これを行うことができます。

a = %w(a b c d)

File.open('test.txt', 'a') {|f| f << "\n#{a.join("\n")}"}
5
tigeravatar

つかいます - Array#each 各要素を反復します。ファイルに書き込むときは、必ず改行(\n)、またはコンテンツとしてabcdを含むファイルを取得します:

a = ['a', 'b', 'c', 'd']
File.open('test.txt', 'w') do |f|
  a.each do |ch|
    f.write("#{ch}\n")
  end
end
3
falsetru

別の簡単なソリューション:

directory = "#{Rails.root}/public/your_directory" #create your_directory before
file_name = "your_file.txt"
path = File.join(directory, file_name)
File.open(path, "wb") { |f| f.write(your_array.join("\n")) }
2
andriy