在Ruby中,如何将数组元素写入txt文件,以使每个元素都位于单独的行上?

时间:2018-11-13 01:54:25

标签: ruby file iteration each element

我很难将数组元素以每行1个元素的形式写入文本文件。在这种情况下,数组建立在句子(。)上。

请在下面的代码中查看注释:

puts "enter paragraph:"
para = gets.chomp.to_s
my_array = []

para.split('.').each { |p| my_array << p+ '.'; print "pushed #{p}.";puts}
new_text = File.new("new_text.txt", "w+")
p my_array
my_array.each { |m| new_text.write(m)} #clearly iterating over my_array.
#.each should be writing each element on a different line, no?  Where have I gone wrong?
new_text.seek(0)

#text file is still stored in new_text variable
#the read out shows elements are not written per line
line = 1
new_text.each do |n|
    puts "line #{line}: #{n}"
    line += 1
    end

1 个答案:

答案 0 :(得分:3)

.each should be writing each element on a different line? no

不,您是否要遍历某些东西并不重要。重要的是您如何写入文件。

当前您使用的是IO#write,它并没有说明添加换行符。如果将new_text.write更改为new_text.putsIO#puts),则将在数组中每个元素之后写入新行。

您可以直接直接使用$stdout来轻松查看它:

> a = %w(foo bar)
 => ["foo", "bar"] 
> a.each(&$stdout.method(:write)) # write -- no newlines
foobar => ["foo", "bar"] 
> a.each(&$stdout.method(:puts))  # puts  -- newlines
foo
bar
 => ["foo", "bar"]