# Iterator method for parsing Genbank entries.
def each(hash_keys, hash_feats, hash_quals)
while @entry = get_entry do
+ $stderr.puts @entry.first
keys = get_keys(hash_keys)
seq = get_seq
features.each do |record|
keys.each_pair { |key,val| record[key] = val }
- loc = Locator.new(record[:LOCATOR], seq)
- record[:SEQ] = loc.subseq.seq
- record[:STRAND] = loc.strand
- record[:S_BEG] = loc.s_beg
- record[:S_END] = loc.s_end
+
+ loc = Locator.new(record[:LOCATOR], seq)
+ record[:SEQ] = loc.subseq.seq
+ record[:STRAND] = loc.strand
+ record[:S_BEG] = loc.s_beg
+ record[:S_END] = loc.s_end
yield record
end
# Method to get the DNA sequence from a Genbank entry and return
# this as a Seq object.
def get_seq
- seq = Seq.new
+ seq = Seq.new(nil, "", "dna")
i = @entry.size
- while @entry[i] !~ /^ORIGIN/
+ while @entry[i] and @entry[i] !~ /^ORIGIN/
+ if @entry[i] =~ /^\s{0,8}\d+(.+)/
+ seq.seq << $1.delete(" ")
+ end
+
i -= 1
end
-
- seq.seq = @entry[i + 1 .. @entry.size].join.delete( " 0123456789")
- seq.type = "dna"
seq
end
int_end = $2.to_i - 1
newseq = Seq.new(nil, @seq.seq[int_beg...int_end], "dna")
- newseq.revcomp if comp
- @subseq.seq << (order ? " " + newseq.seq : newseq.seq)
+ unless newseq.seq.nil?
+ newseq.revcomp if comp
+
+ @subseq.seq << (order ? " " + newseq.seq : newseq.seq)
+ end
when /^(\d+)$/
pos = $1.to_i - 1