Class | Bio::Blast::RPSBlast::RPSBlastSplitter |
In: |
lib/bio/appl/blast/rpsblast.rb
|
Parent: | Bio::FlatFile::Splitter::Template |
Flatfile splitter for RPS-BLAST reports. It is internally used when reading RPS-BLAST report. Normally, users do not need to use it directly.
Note for Windows: RPS-BLAST results generated in Microsoft Windows may not be parsed correctly due to the line feed code problem. For a workaroud, convert line feed codes from Windows(DOS) to UNIX.
ReportHead | = | /\A\n*(RPS\-BLAST|Query\=)/ | Separator used to distinguish start of each report | |
Delimiter | = | "\n\n" | Delimiter used for IO#gets |
gets an entry
# File lib/bio/appl/blast/rpsblast.rb, line 72 72: def get_entry 73: p0 = stream_pos() 74: pieces = [] 75: flag_head = false # reached to start of header 76: flag_body = false # reached to start of body (Query=...) 77: while x = stream.gets(Delimiter) 78: if ReportHead =~ x then 79: case $1 80: when 'RPS-BLAST' 81: if pieces.empty? then 82: @entry_head = nil 83: flag_head = true 84: else 85: stream.ungets(x) 86: break 87: end 88: when 'Query=' 89: if flag_body then 90: stream.ungets(x) 91: break 92: else 93: @entry_head = pieces.join('') if flag_head 94: flag_body = true 95: end 96: else 97: raise 'Bug: should not reach here' 98: end 99: end #if ReportHead... 100: pieces.push x 101: end #while 102: p1 = stream_pos() 103: 104: self.entry_start_pos = p0 105: self.entry = 106: if pieces.empty? then 107: nil 108: elsif !flag_head and @entry_head then 109: @entry_head + pieces.join('') 110: else 111: pieces.join('') 112: end 113: self.entry_ended_pos = p1 114: return self.entry 115: end
Rewinds the stream
# File lib/bio/appl/blast/rpsblast.rb, line 66 66: def rewind 67: @entry_head = nil 68: super 69: end