Here is my simple solution. The main work horse of the whole thing is 
the Tab class. Which I will display first.

--BEGIN CODE--

#!/usr/local/bin/ruby -w

class Tab

  attr_reader :file, :music

  def initialize( file )
    @file = file
  end

  def parse( file = @file )
    @music = Array.new
    tab = Hash.new { |hash, key| hash[key] = Array.new }

    File.open(file).read.each do |line|
      next unless line =~ /^[EADGBe]/
      bar = line.chomp.split(//)
      bar.each do |note|
        next if note =~ /[EADGBe|]/
        tab[bar[0]] << note
      end
    end

    ['E', 'A', 'D', 'G', 'B', 'e'].each do |string|
      tab[string].each_index do |i|
        @music[i] = '' unless @music[i]
        @music[i] += tab[string][i]
      end
    end

    @music
  end

end

if __FILE__ == $0
    tab = Tab.new('tabs/Em.tab')
    print "\"#{tab.parse.join('", "')}\"\n\n"
end

--END CODE--

Next we have the tabplayer program, which uses the Tab and Guitar 
classes to create some music.

--BEGIN CODE--

#!/usr/local/bin/ruby -w

require 'lib/guitar'
require 'lib/tab'

Tab.new(ARGV[0]).parse

axe = Guitar.new
Tab.new(ARGV[0]).parse.each do |notes|
  axe.play(notes)
end
print axe.dump

--END CODE--

I have some test code that I used while developing the Tab class.

--BEGIN CODE--

#!/usr/local/bin/ruby -w

require 'test/unit'

require 'lib/tab'

class TC_Tab < Test::Unit::TestCase

  def setup
    test_construction
  end

  def test_construction
    @tab = Tab.new('tabs/Em.tab')

    assert_not_nil(@tab)
    assert_instance_of(Tab, @tab)
    assert_equal('tabs/Em.tab', @tab.file)
    assert_nil(@tab.music)
  end

  def test_read
    @tab.parse
    assert_equal( [ '------', '0-----', '------', '-2----', '------',
                    '--2---', '------', '---0--', '------', '----0-',
                    '------', '-----0'
                  ], @tab.music )

    @tab.parse('tabs/AmStrum.tab')
    assert_equal( [ '------', '-0----', '------', '--2---', '------',
                    '---2--', '------', '----1-', '------', '-----0',
                    '------', '------', '------', '-02210', '------',
                    '------', '------', '------', '------', '------',
                    '------', '------', '------', '------'
                  ], @tab.music )
  end

end

--END CODE--

Since I cannot attach a zip file from the Ruby Forum, I will just type 
the directory structure. If you would like a zipfile of the code along 
with the tabs, etc. just let me know. Thanks for an interesting quiz.

tab_player(folder)
|
|-tabplayer.rb
|
|-lib
| |-guitar.rb
| |-tab.rb
|
|-tabs
| |-*.tab files
|
|-test
  |-tc_tab.rb

-- 
Posted via http://www.ruby-forum.com/.