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/.