class Bio::FlatFile::Splitter::Default
Default splitter. It sees following constants in the given class.
- DELIMITER
-
(String) delimiter indicates the end of a entry.
- FLATFILE_HEADER
-
(String) start of a entry, located on head of a line.
- DELIMITER_OVERRUN
-
(Integer) excess read size included in DELIMITER.
Attributes
delimiter[RW]
(String) delimiter indicates the end of a entry.
delimiter_overrun[RW]
(Integer) excess read data size included in delimiter.
header[RW]
(String) start of a entry, located on head of a line.
Public Class Methods
new(klass, bstream)
click to toggle source
Creates a new splitter.
- klass
-
database class
- bstream
-
input stream. It must be a BufferedInputStream object.
Calls superclass method
Bio::FlatFile::Splitter::Template.new
# File lib/bio/io/flatfile/splitter.rb, line 128 def initialize(klass, bstream) super(klass, bstream) @delimiter = klass::DELIMITER rescue nil @header = klass::FLATFILE_HEADER rescue nil # for specific classes' benefit unless header if (defined?(Bio::GenBank) and klass == Bio::GenBank) or (defined?(Bio::GenPept) and klass == Bio::GenPept) @header = 'LOCUS ' end end @delimiter_overrun = klass::DELIMITER_OVERRUN rescue nil end
Public Instance Methods
get_entry()
click to toggle source
gets a entry
# File lib/bio/io/flatfile/splitter.rb, line 180 def get_entry p0 = stream_pos() e = stream.gets(@delimiter) if e and @delimiter_overrun then if e[-@delimiter.size, @delimiter.size ] == @delimiter then overrun = e[-@delimiter_overrun, @delimiter_overrun] e[-@delimiter_overrun, @delimiter_overrun] = '' stream.ungets(overrun) end end p1 = stream_pos() self.entry_start_pos = p0 self.entry = e self.entry_ended_pos = p1 return entry end
skip_leader()
click to toggle source
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 def skip_leader if @header then data = '' while s = stream.gets(@header) data << s if data.split(/[\r\n]+/)[-1] == @header then stream.ungets(@header) return true end end # @header was not found. For safety, # pushes back data with removing white spaces in the head. data.sub(/\A\s+/, '') stream.ungets(data) return nil else stream.skip_spaces return nil end end