в Ruby, как мне записать элементы массива в текстовый файл, чтобы каждый элемент находился на отдельной строке? - PullRequest
0 голосов
/ 13 ноября 2018

У меня проблемы с записью элементов массива в текстовый файл в виде 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 голосов
/ 13 ноября 2018

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

Нет, неважно, перебираете ли вы что-либо. Важно то, как вы пишете в файл.

В настоящее время вы используете IO # write , которая ничего не говорит о добавлении новых строк. Если вы измените new_text.write на new_text.puts ( IO # устанавливает ), вы будете писать новую строку после каждого элемента в вашем массиве.

Вы можете легко увидеть это, используя $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"] 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...