Добавить каждый элемент массива в строки файла в рубине
Если у меня есть массив строк, например
a = ['a', 'b', 'c', 'd']
и я хочу вывести элементы в файл (например,.txt) по одному на строку. До сих пор я:
File.new("test.txt", "w+")
File.open("test.txt", "w+") do |i|
i.write(a)
end
Это дает мне массив в одной строке файла test.txt.
Как я могу перебирать массив, добавляя каждое значение в новую строку файла?
Ответы
Ответ 1
Используйте 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
Из документации:
Если вызывается с аргументом массива, он записывает каждый элемент в новую строку.
Ответ 2
В качестве альтернативы вы можете просто присоединить массив к "\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")}"}
Ответ 3
Существует довольно простое решение:
IO.write("file_name.txt", your_array.join("\n"))
Ответ 4
Используйте 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
Ответ 5
Еще одно простое решение:
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")) }