Как получить доступ к плоскому файлу и управлять им?

#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]