如果我有一个字符串数组,例如:
a = ['a', 'b', 'c', 'd']
我希望将元素输出到一个文件(例如 .txt 文件),每行一个元素。到目前为止,我的代码如下:
File.new("test.txt", "w+")
File.open("test.txt", "w+") do |i|
i.write(a)
end
这使我得到了test.txt文件中数组的一行。 如何迭代该数组,将每个值添加到文件的新行?
使用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
从文档中得知:
如果使用数组作为参数调用,每个元素将写在新的一行。
有一个更简单的解决方案:
IO.write("file_name.txt", your_array.join("\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")}"}
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
Enumerable
只是一个混入模块。它本身并没有定义each
方法。 - falsetrudirectory = "#{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")) }
puts
才能获得该行为。 - Stefan