--- bioruby-1.0.0/lib/bio/io/flatfile.rb 2006-02-22 19:01:27.000000000 +0900 +++ bioruby-1.0.0x/lib/bio/io/flatfile.rb 2006-06-12 18:42:45.000000000 +0900 @@ -262,6 +262,9 @@ # the last entry read from the stream attr_reader :entry + # a flag to write down entry start and end positions + attr_accessor :entry_pos_flag + # start position of the entry attr_reader :entry_start_pos @@ -290,6 +293,7 @@ end end @delimiter_overrun = klass::DELIMITER_OVERRUN rescue nil + @entry_pos_flag = nil end # (String) delimiter indicates the end of a entry. @@ -330,7 +334,7 @@ # gets a entry def get_entry - p0 = @stream.pos + p0 = @entry_pos_flag ? @stream.pos : nil e = @stream.gets(@delimiter) if e and @delimiter_overrun then if e[-@delimiter.size, @delimiter.size ] == @delimiter then @@ -339,7 +343,7 @@ @stream.ungets(overrun) end end - p1 = @stream.pos + p1 = @entry_pos_flag ? @stream.pos : nil @entry_start_pos = p0 @entry = e @entry_ended_pos = p1 @@ -422,7 +426,7 @@ # check if file is filename or IO object unless file.respond_to?(:gets) # 'file' is a filename - self.open_file(file, *arg, &block) + _open_file(dbclass, file, *arg, &block) else # 'file' is a IO object ff = self.new(dbclass, file) @@ -462,15 +466,27 @@ # Otherwise, it returns a new FlatFile object. # def self.open_file(filename, *arg) + _open_file(nil, filename, *arg) + end + + # Same as FlatFile.open(dbclass, filename, *arg), + # except that it only accept filename and doesn't accept IO object. + # + # It can accept a block. + # If a block is given, it returns the block's return value. + # Otherwise, it returns a new FlatFile object. + # + def self._open_file(dbclass, filename, *arg) if block_given? then BufferedInputStream.open_file(filename, *arg) do |stream| - yield self.new(nil, stream) + yield self.new(dbclass, stream) end else stream = BufferedInputStream.open_file(filename, *arg) - self.new(nil, stream) + self.new(dbclass, stream) end end + private_class_method :_open_file # Opens URI specified as _uri_. # _uri_ must be a String or URI object. @@ -518,13 +534,11 @@ # def initialize(dbclass, stream) # 2nd arg: IO object - if @stream.kind_of?(BufferedInputStream) + if stream.kind_of?(BufferedInputStream) @stream = stream else @stream = BufferedInputStream.for_io(stream) end - # default is raw mode - self.raw = false # 1st arg: database class (or file format autodetection) if dbclass then self.dbclass = dbclass @@ -534,6 +548,8 @@ # @skip_leader_mode = :firsttime @firsttime_flag = true + # default raw mode is false + self.raw = false end # The mode how to skip leader of the data. @@ -587,6 +603,16 @@ @splitter.entry end + # a flag to write down entry start and end positions + def entry_pos_flag + @splitter.entry_pos_flag + end + + # Sets flag to write down entry start and end positions + def entry_pos_flag=(x) + @splitter.entry_pos_flag = x + end + # start position of the last entry def entry_start_pos @splitter.entry_start_pos