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 73 73: def get_entry 74: p0 = stream_pos() 75: pieces = [] 76: flag_head = false # reached to start of header 77: flag_body = false # reached to start of body (Query=...) 78: while x = stream.gets(Delimiter) 79: if ReportHead =~ x then 80: case $1 81: when 'RPS-BLAST' 82: if pieces.empty? then 83: @entry_head = nil 84: flag_head = true 85: else 86: stream.ungets(x) 87: break 88: end 89: when 'Query=' 90: if flag_body then 91: stream.ungets(x) 92: break 93: else 94: @entry_head = pieces.join('') if flag_head 95: flag_body = true 96: end 97: else 98: raise 'Bug: should not reach here' 99: end 100: end #if ReportHead... 101: pieces.push x 102: end #while 103: p1 = stream_pos() 104: 105: self.entry_start_pos = p0 106: self.entry = 107: if pieces.empty? then 108: nil 109: elsif !flag_head and @entry_head then 110: @entry_head + pieces.join('') 111: else 112: pieces.join('') 113: end 114: self.entry_ended_pos = p1 115: return self.entry 116: end
Rewinds the stream
# File lib/bio/appl/blast/rpsblast.rb, line 67 67: def rewind 68: @entry_head = nil 69: super 70: end