| Class | Bio::FlatFile::Splitter::LineOriented |
| In: |
lib/bio/io/flatfile/splitter.rb
|
| Parent: | Template |
A splitter for line oriented text data.
The given class‘s object must have following methods.
Klass#add_header_line(line) Klass#add_line(line)
where ‘line’ is a string. They normally returns self. If the line is not suitable to add to the current entry, nil or false should be returned. Then, the line is treated as (for add_header_line) the entry data or (for add_line) the next entry‘s data.
Creates a new splitter.
| klass: | database class |
| bstream: | input stream. It must be a BufferedInputStream object. |
# File lib/bio/io/flatfile/splitter.rb, line 214
214: def initialize(klass, bstream)
215: super(klass, bstream)
216: self.flag_to_fetch_header = true
217: end
get an entry and return the entry as a string
# File lib/bio/io/flatfile/splitter.rb, line 225
225: def get_entry
226: if e = get_parsed_entry then
227: entry
228: else
229: e
230: end
231: end
get an entry and return the entry as a data class object
# File lib/bio/io/flatfile/splitter.rb, line 234
234: def get_parsed_entry
235: p0 = stream_pos()
236: ent = @dbclass.new()
237:
238: lines = []
239: line_overrun = nil
240:
241: if flag_to_fetch_header then
242: while line = stream.gets("\n")
243: unless ent.add_header_line(line) then
244: line_overrun = line
245: break
246: end
247: lines.push line
248: end
249: stream.ungets(line_overrun) if line_overrun
250: line_overrun = nil
251: self.flag_to_fetch_header = false
252: end
253:
254: while line = stream.gets("\n")
255: unless ent.add_line(line) then
256: line_overrun = line
257: break
258: end
259: lines.push line
260: end
261: stream.ungets(line_overrun) if line_overrun
262: p1 = stream_pos()
263:
264: return nil if lines.empty?
265:
266: self.entry_start_pos = p0
267: self.entry = lines.join('')
268: self.parsed_entry = ent
269: self.entry_ended_pos = p1
270:
271: return ent
272: end
rewinds the stream
# File lib/bio/io/flatfile/splitter.rb, line 275
275: def rewind
276: ret = super
277: self.flag_to_fetch_header = true
278: ret
279: end