Reputation: 871
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?
Upvotes: 52
Views: 63103
Reputation: 111
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")) }
Upvotes: 3
Reputation: 341
There is a quite simpler solution :
IO.write("file_name.txt", your_array.join("\n"))
Upvotes: 24
Reputation: 26650
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")}"}
Upvotes: 10
Reputation: 114208
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.
Upvotes: 124
Reputation: 369194
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
Upvotes: 4