49

如果我有一个字符串数组,例如

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

我想将元素输出到一个文件(例如.txt),每行一个。到目前为止,我有:

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

这给了我 test.txt 文件的一行上的数组。如何遍历数组,将每个值添加到文件的新行?

4

5 回答 5

118

要么用于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

从文档中:

如果使用数组参数调用,则将每个元素写入新行。

于 2013-09-19T16:53:08.073 回答
18

有一个非常简单的解决方案:

IO.write("file_name.txt", your_array.join("\n"))
于 2016-09-20T13:35:09.017 回答
7

作为替代方案,您可以简单地使用 "\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")}"}
于 2013-09-19T17:37:34.487 回答
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
于 2013-09-19T16:44:27.277 回答
2

另一个简单的解决方案:

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")) }
于 2017-03-16T10:54:08.567 回答