将每个数组元素添加到ruby中的文件行中

edc*_*505 38 ruby arrays file line output

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

a = ['a', 'b', 'c', 'd']
Run Code Online (Sandbox Code Playgroud)

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

File.new("test.txt", "w+")
File.open("test.txt", "w+") do |i|
    i.write(a)
end
Run Code Online (Sandbox Code Playgroud)

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

Ste*_*fan 95

要么Array#each迭代遍历数组并调用IO#puts将每个元素写入文件(puts添加记录分隔符,通常是换行符):

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

或者将整个数组传递给puts:

File.open("test.txt", "w+") do |f|
  f.puts(a)
end
Run Code Online (Sandbox Code Playgroud)

从文档:

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


小智 13

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

IO.write("file_name.txt", your_array.join("\n"))
Run Code Online (Sandbox Code Playgroud)


tig*_*tar 5

作为替代方案,您可以简单地使用"\n"连接数组,以便每个元素都在一个新行上,如下所示:

a = %w(a b c d)

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

如果您不想覆盖文本文件中已有的值,以便只是将新信息添加到底部,则可以执行以下操作:

a = %w(a b c d)

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