Add each array element to the lines of a file in ruby

RubyArraysFileLineOutput

Ruby Problem Overview


If I have an array of strings e.g.

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

and I want to output the elements, to a file (e.g. .txt) one per line. So far I have:

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

This gives me the array on one line of the test.txt file. How can I iterate over the array, adding each value to a new line of the file?

Ruby Solutions


Solution 1 - Ruby

Either use Array#each to iterate over your array and call IO#puts to write each element to the file (puts adds a record separator, typically a newline character):

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

Or pass the whole array to puts:

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

From the documentation:

> If called with an array argument, writes each element on a new line.

Solution 2 - Ruby

There is a quite simpler solution :

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

Solution 3 - Ruby

As an alternate, you could simply join the array with "\n" so that each element is on a new line, like this:

a = %w(a b c d)

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

If you don't want to override the values already in the text file so that you're simply adding new information to the bottom, you can do this:

a = %w(a b c d)

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

Solution 4 - Ruby

Use Array#each to iterate each element. When writing to the file, make sure you append newline(\n), or you will get a file with abcd as content:

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

Solution 5 - Ruby

Another simple solution:

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")) }

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionedc505View Question on Stackoverflow
Solution 1 - RubyStefanView Answer on Stackoverflow
Solution 2 - RubyJosip ĐurakovićView Answer on Stackoverflow
Solution 3 - RubytigeravatarView Answer on Stackoverflow
Solution 4 - RubyfalsetruView Answer on Stackoverflow
Solution 5 - RubyandriyView Answer on Stackoverflow