#ruby #file #nomethoderror #nameerror #flat
#ruby #файл #nomethoderror #ошибка имени #плоский
Вопрос:
В этом упражнении Ruby мне нужно получить доступ к плоскому файлу с тремя песнями, содержащими название песни, исполнителя, продолжительность в минутах и секундах и имя файла. В упражнении предлагается выполнить следующее:
- разбейте строку на поля,
- преобразуйте время выполнения из mm: ss в секунды и
- удалите лишние пробелы из имени исполнителя.
Я пошел дальше, скопировал и вставил следующее в обычный текстовый файл и сохранил его как «songFile»:
/jazz/j00132.mp3 | 3:45 | Fats Waller | Ain't Misbehavin'
/jazz/j00319.mp3 | 2:58 | Louis Armstrong | Wonderful World
/bgrass/bg0732.mp3| 4:09 | Strength in Numbers | Texas Red
: : : :
Чтобы разбить строки песен на поля, я поместил это в терминал:
songs = SongList.new
songFile.each do |line|
file, length, name, title = line.chomp.split(/s*|s*/)
songs.append Song.new(title, name, length)
end
puts songs[1]
а затем получил эти два сообщения об ошибках:
NameError: undefined local variable or method `songFile' for main:Object
NoMethodError: undefined method `[]' for nil:NilClass
Комментарии:
1. Rails — это не волшебство, вы не можете просто назвать переменную так же, как ваш файл, и заставить Rails знать, что вы собираетесь прочитать файл. Посмотрите на
File.open
Ответ №1:
Откройте файл и выполните необходимые действия. Что-то вроде этого
...
File.open("songFile") do |sf|
sf.each do |line|
...
end
end
...
Ответ №2:
Учитывая, что у вас есть текстовый файл в том же каталоге, что и скрипт, тогда
songs = SongList.new
File.readlines('./songFile').each do |song|
file, length, name, title = line.chomp.split(/s*|s*/)
songs.append Song.new(title, name, length)
end
puts songs[1]