Я использую taglib-ruby, чтобы узнать, сколько раз вы можете слушать песню в день. Я получил его, чтобы работать на отдельные песни, но теперь я пытаюсь исправить это, чтобы он мог прокручивать каталог и выплюнуть, сколько времени каждая песня и сколько раз в день вы можете ее слушать. Он не выдает ошибки при запуске, но также ничего не выводит. Я не думаю, что он видел файлы по какой-то причине. Я пытался использовать Еогеасп и продолжал получать сообщение об ошибке сказав это:Невозможно получить Ruby foreach или glob для работы с ARGV ... или вообще
$ ruby songtime.rb /media/ab/storage/Music/Between\ the\ Buried\ and\ Me/[2007]\ Colors/
songtime.rb:9:in `block (2 levels) in <main>': undefined method `length' for nil:NilClass (NoMethodError)
from /home/ab/.rbenv/versions/2.1.3/lib/ruby/gems/2.1.0/gems/taglib-ruby-0.7.0/lib/taglib/base.rb:8:in `open'
from songtime.rb:7:in `block in <main>'
from songtime.rb:4:in `foreach'
from songtime.rb:4:in `<main>'
же проблема возникнет, если я просто жёстко имя каталога в программе, которая была что-то вроде:
#!/usr/bin/ruby
require "taglib"
Dir.foreach(ARGV[0]) do |songfile|
next if songfile == '.' or songfile == '..'
TagLib::FileRef.open(songfile) do |mp3|
properties = mp3.audio_properties
songLength = properties.length
puts "Song length is #{songLength}"
puts "You can listen to this song #{(24*60*60/songLength * 1000).floor/1000.0} times per day."
end
end
Так что я попытался переключение на глобус:
#!/usr/bin/ruby
require "taglib"
Dir.glob("#{ARGV[0]}*.mp3") do |songfile|
TagLib::FileRef.open(songfile) do |mp3|
properties = mp3.audio_properties
songLength = properties.length
puts "Song length is #{songLength}"
puts "You can listen to this song #{(24*60*60/songLength * 1000).floor/1000.0} times per day."
end
end
Что не работает. Сообщения об ошибках отсутствуют, но ничего не печатается. Он также не работает, если я положил
#!/usr/bin/ruby
require "taglib"
Dir.glob("/media/ab/storage/Music/Between the Buried and Me/[2007] Colors/*.mp3") do |songfile|
TagLib::FileRef.open(songfile) do |mp3|
properties = mp3.audio_properties
songLength = properties.length
puts "Song length is #{songLength}"
puts "You can listen to this song #{24*60*60/songLength} times per day."
end
end
Суп с этим? Извините за ноу-хау.
1) И он делает это 2) Он не перебирает массив, [проверьте документацию по методу '.glob'] (http://ruby-doc.org//core-2.2.0/ Dir.html # способ-с-Глоб). '.glob' с блоком используется для обработки результатов, вам не нужно' .each' там –
ahh, справа. Я забыл, что вы можете использовать его таким образом, хороший звонок. – Kwanasolis