Andreas Schwarz wrote:
> I'd throw it all into one big ugly regex:
> s.match(/Query= 
> (.+?\|.+?)\|.+?\(bits\)\s+Value\s+(.+?)\s+/m).to_a[1..2].join(' ')
> => "gi|23510597 At2g21510"

Thanks for the suggestion! However, if someone has a suggestion 
regarding the following code and how to fix it, I'd be happy...its 
almost working and I just need to understand why it is behaving a bit 
odd. So here is the code.

def stripname line
  s = line.gsub(/Query=/, '')
  u = s.gsub(/\|emb.*/, '')
end


count = 0
gene = nil
store = Array.new

ARGF.each do |l|

  store.push(l) unless count.zero?
  count = [0, count-1].max

  if l.match(/^Query=/)
    gene = stripname l

  elsif l.match(/^Sequences/)
    count = 2
    puts "#{gene.strip} #{store.last.to_s.strip}"
  else

  end
end



Problem:

Reads: If line is found that starts with "Query=", use the method 
stripname on it and store it in the variable "gene". Go further, and if 
you find a line that starts with "Sequence", use the above specified 
procedure "count". Now this is the problem right now. After I wasnt able 
to figure out to get the formatting right, I decided to stick to the 
skip-line approach and instead of having it printed, to store it in an 
array. From there I simply read the last entry.

BUT: instead of printing every stored hit to the corresponding "gene", 
it shifts the whole thing 1 line. So that each "gene" is associated with 
the "best hit" of the previous match to "Query=".

gi|23510597
gi|23510599 At2g21510
gi|23510600 At5g14980

Now, I could solve that easily with a capable text editor, but I think 
there must be an easy solution to this...right?

Cheers,
Marc

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