| 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