class MgNu::Parser::Fasta

Attributes

file[R]
filename[R]

Public Class Methods

new(filename = nil, quality_file = false) click to toggle source

create a new Fasta parser

# File lib/mgnu/parser/fasta.rb, line 9
def initialize(filename = nil, quality_file = false)
  @quality_file = quality_file
  @filename = filename
  if filename
    if File.exists?(filename) and File.readable?(filename)
      @file = File.open(filename)
    else
      raise "\n\n -- No file by that name (#{filename}).  Exiting\n\n"
      exit(1)
      #@file = File.new(filename, "w")
    end
  else
    error("MgNu::Parser::Fasta.new(): need a filename or an existing file")
  end
end

Public Instance Methods

each() { |fasta(:header => shift, :sequence => join(" "))| ... } click to toggle source

override enumerables

# File lib/mgnu/parser/fasta.rb, line 26
def each
  @buffer = [] # temp storage
  @file.each_line do |line|
    line.chomp!
    if line =~ />(.*)/  # got a header line
      if @buffer.length > 0
        if @quality_file
          yield MgNu::Sequence::Fasta.new(:header => @buffer.shift,
                                            :sequence => @buffer.join(" "))
        else
          yield MgNu::Sequence::Fasta.new(:header => @buffer.shift,
                                            :sequence => @buffer.join(""))
        end
      end
      @buffer = []
      @buffer << $1
    else  # got a sequence line
      @buffer << line
    end
  end # end of file io
  @file.close

  # don't forget to yield the last one
  if @buffer.length > 0
    if @quality_file
      yield MgNu::Sequence::Fasta.new(:header   => @buffer.shift,
                                        :sequence => @buffer.join(" "))
    else
      yield MgNu::Sequence::Fasta.new(:header   => @buffer.shift,
                                        :sequence => @buffer.join(""))
    end
  end
end