class MiGA::Cli::Action::TaxDist

def traverse_taxonomy(tab, dist)

def traverse_taxonomy(tab, dist)
  cli.say 'Traversing taxonomy'
  rank_i = 0
  Taxonomy.KNOWN_RANKS.each do |rank|
    next if rank == :ns
    rank_n = 0
    rank_i += 1
    in_rank = nil
    ds_name = []
    File.open(tab, 'r') do |fh|
      fh.each_line do |ln|
        if ln =~ /^ {0,#{(rank_i - 1) * 2}}\S+:\S+:/
          in_rank = nil
          ds_name = []
        elsif ln =~ /^ {#{rank_i * 2}}(#{rank}:(\S+)):/
          in_rank = $2 == '?' ? nil : $1
          ds_name = []
        elsif ln =~ /^ *# (\S+)/ && !in_rank.nil?
          ds_i = $1
          ds_name << ds_i
          ds_name.each do |ds_j|
            k = cannid(ds_i, ds_j)
            next if dist[k].nil?
            rank_n += 1
            dist[k][3] = rank_i
            dist[k][4].unshift in_rank
          end
        end
      end
    end
    cli.say "o #{rank}: #{rank_n} pairs of datasets"
  end
  dist
end