Class | Bio::FlatFile::Splitter::Default |
In: |
lib/bio/io/flatfile/splitter.rb
|
Parent: | Template |
Creates a new splitter.
klass: | database class |
bstream: | input stream. It must be a BufferedInputStream object. |
# File lib/bio/io/flatfile/splitter.rb, line 128 128: def initialize(klass, bstream) 129: super(klass, bstream) 130: 131: @delimiter = klass::DELIMITER rescue nil 132: @header = klass::FLATFILE_HEADER rescue nil 133: # for specific classes' benefit 134: unless header 135: if (defined?(Bio::GenBank) and klass == Bio::GenBank) or 136: (defined?(Bio::GenPept) and klass == Bio::GenPept) 137: @header = 'LOCUS ' 138: end 139: end 140: @delimiter_overrun = klass::DELIMITER_OVERRUN rescue nil 141: end
gets a entry
# File lib/bio/io/flatfile/splitter.rb, line 180 180: def get_entry 181: p0 = stream_pos() 182: e = stream.gets(@delimiter) 183: if e and @delimiter_overrun then 184: if e[-@delimiter.size, @delimiter.size ] == @delimiter then 185: overrun = e[-@delimiter_overrun, @delimiter_overrun] 186: e[-@delimiter_overrun, @delimiter_overrun] = '' 187: stream.ungets(overrun) 188: end 189: end 190: p1 = stream_pos() 191: self.entry_start_pos = p0 192: self.entry = e 193: self.entry_ended_pos = p1 194: return entry 195: end
Skips leader of the entry.
If @header is not nil, it reads till the contents of @header comes at the head of a line. If correct FLATFILE_HEADER is found, returns true. Otherwise, returns nil.
# File lib/bio/io/flatfile/splitter.rb, line 158 158: def skip_leader 159: if @header then 160: data = '' 161: while s = stream.gets(@header) 162: data << s 163: if data.split(/[\r\n]+/)[-1] == @header then 164: stream.ungets(@header) 165: return true 166: end 167: end 168: # @header was not found. For safety, 169: # pushes back data with removing white spaces in the head. 170: data.sub(/\A\s+/, '') 171: stream.ungets(data) 172: return nil 173: else 174: stream.skip_spaces 175: return nil 176: end 177: end