Подтвердить что ты не робот

Добавить каждый элемент массива в строки файла в рубине

Если у меня есть массив строк, например

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

и я хочу вывести элементы в файл (например,.txt) по одному на строку. До сих пор я:

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

Это дает мне массив в одной строке файла test.txt. Как я могу перебирать массив, добавляя каждое значение в новую строку файла?

4b9b3361

Ответ 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")) }