Как сделать новую строку в выводе

Как заставить \n действительно работать в моем выводе? На данный момент он просто записывает все это в 1 длинный блок. Спасибо за любую помощь

Dir.chdir 'C:/Users/name/Music'
music = Dir['C:/Users/name/Music/*.{mp3, MP3}']
puts 'what would you like to call the playlist?'
@new = ''
playlist_name = gets.chomp + '.m3u'

music.each do |z|
  @new += z + '\n'
end

File.open playlist_name, 'w' do |f|
  f.write @new
end

person babyrats    schedule 13.01.2010    source источник


Ответы (4)


Используйте "\n" вместо '\n'

person kjagiello    schedule 13.01.2010
comment
Спасибо за ответ, я выгляжу дураком, но по крайней мере теперь я знаю - person babyrats; 14.01.2010
comment
не будьте так строги к себе: единственный способ учиться — это задавать вопросы. - person glenn jackman; 14.01.2010
comment
@babyrats - ты не один такой :) - person Ninad; 14.09.2011
comment
Я не знаю, почему должна быть разница! я предполагаю, что '\n' будет строковым литералом - person Jonathan Lin; 12.01.2013
comment
Кажется, что и Ruby, и PHP не расширяют escape-последовательности в строках с одинарными кавычками. - person kjagiello; 31.12.2013
comment
Хорошим способом запомнить это является то, что он ведет себя точно так же, как интерполяция строк. {my_var} работает, а "{my_var}" не работает. - person aaron-coding; 17.03.2015
comment
Хорошо, но зачем это нужно? - person nuzzolilo; 10.09.2015
comment
@Nuzzolilo Потому что иногда вы хотите вывести неэкранированную форму строки (например, потому что она уже экранирована). - person mahemoff; 19.10.2015
comment
@mahemoff, значит, двойные кавычки выполняют escape-последовательности, а одинарные — нет? - person nuzzolilo; 20.10.2015
comment
\n — это новая строка, '\n\ — буквально обратная косая черта, а n. - person mahemoff; 20.10.2015
comment
«Одинарные кавычки» трактуют свое содержание буквально, что делает их быстрее и, следовательно, рекомендуется везде, где это возможно. Двойные кавычки позволяют интерполировать и экранировать определенные символы. - person ohaleck; 28.08.2017

Все это можно сделать в блоке File.open:

Dir.chdir 'C:/Users/name/Music'
music = Dir['C:/Users/name/Music/*.{mp3, MP3}']
puts 'what would you like to call the playlist?'
playlist_name = gets.chomp + '.m3u'

File.open playlist_name, 'w' do |f|
  music.each do |z|
    f.puts z
  end
end
person Ben    schedule 13.01.2010
comment
Я предполагаю, что одна интересная и полезная вещь, которую можно извлечь из этого, заключается в том, что puts выводит строку и автоматически завершает разрыв строки; это удобнее, чем добавлять его в код. - person Carl Smotricz; 14.01.2010
comment
+1 за это и хороший, автоматически закрывающийся, идиоматический способ обработки файла. - person Carl Smotricz; 14.01.2010

Я хотел бы поделиться своим опытом с \n
Я заметил, что "\n" работает как-

puts "\n\n" // to provide 2 new lines

но нет

p "\n\n"

также ставит '\n\n'
Не работает.

Надежда будет работать для вас!

person S.Yadav    schedule 18.01.2019

На самом деле вам даже не нужен блок:

  Dir.chdir 'C:/Users/name/Music'
  music = Dir['C:/Users/name/Music/*.{mp3, MP3}']
  puts 'what would you like to call the playlist?'
  playlist_name = gets.chomp + '.m3u'

  File.open(playlist_name, 'w').puts(music)
person Tim Breitkreutz    schedule 25.05.2013