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

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

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

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]