Class | Bio::FlatFile::Splitter::Default
In: | lib/bio/io/flatfile/splitter.rb
Parent: | Template

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.

### Methods

get_entry new skip_leader

### 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)

Creates a new splitter.

klass: | database class
bstream: | input stream. It must be a BufferedInputStream object.

[Source]

         # 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

### Public Instance methods

get_entry()

gets a entry

[Source]

         # 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

skip_leader()

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.

[Source]

         # 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

[Validate]