我很难将数组元素以每行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
答案 0 :(得分:3)
.each should be writing each element on a different line? no
不,您是否要遍历某些东西并不重要。重要的是您如何写入文件。
当前您使用的是IO#write,它并没有说明添加换行符。如果将new_text.write
更改为new_text.puts
(IO#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"]