# line 1 "cele/vypis_parser.rl" # line 45 "cele/vypis_parser.rl" # line 7 "cele/vypis_parser.rb" class << self attr_accessor :_parser_bank_vypis_actions private :_parser_bank_vypis_actions, :_parser_bank_vypis_actions= end self._parser_bank_vypis_actions = [ 0, 1, 0, 1, 1, 1, 2, 1, 3, 1, 4, 1, 5, 2, 0, 2 ] class << self attr_accessor :_parser_bank_vypis_key_offsets private :_parser_bank_vypis_key_offsets, :_parser_bank_vypis_key_offsets= end self._parser_bank_vypis_key_offsets = [ 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 17, 18, 19, 20, 22, 23 ] class << self attr_accessor :_parser_bank_vypis_trans_keys private :_parser_bank_vypis_trans_keys, :_parser_bank_vypis_trans_keys= end self._parser_bank_vypis_trans_keys = [ 34, 34, 34, 44, 34, 34, 34, 13, 10, 13, 34, 10, 34, 34, 34, 13, 44, 10, 34, 34, 13, 44, 34, 34, 0 ] class << self attr_accessor :_parser_bank_vypis_single_lengths private :_parser_bank_vypis_single_lengths, :_parser_bank_vypis_single_lengths= end self._parser_bank_vypis_single_lengths = [ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1 ] class << self attr_accessor :_parser_bank_vypis_range_lengths private :_parser_bank_vypis_range_lengths, :_parser_bank_vypis_range_lengths= end self._parser_bank_vypis_range_lengths = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] class << self attr_accessor :_parser_bank_vypis_index_offsets private :_parser_bank_vypis_index_offsets, :_parser_bank_vypis_index_offsets= end self._parser_bank_vypis_index_offsets = [ 0, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 21, 23, 25, 27, 29, 32, 34, 36, 38, 41, 43 ] class << self attr_accessor :_parser_bank_vypis_trans_targs_wi private :_parser_bank_vypis_trans_targs_wi, :_parser_bank_vypis_trans_targs_wi= end self._parser_bank_vypis_trans_targs_wi = [ 2, 0, 0, 3, 4, 3, 5, 0, 6, 0, 0, 7, 8, 7, 9, 0, 10, 0, 11, 2, 0, 12, 0, 13, 0, 0, 14, 15, 14, 16, 12, 0, 21, 0, 19, 18, 19, 18, 16, 20, 0, 17, 0, 17, 0, 0 ] class << self attr_accessor :_parser_bank_vypis_trans_actions_wi private :_parser_bank_vypis_trans_actions_wi, :_parser_bank_vypis_trans_actions_wi= end self._parser_bank_vypis_trans_actions_wi = [ 0, 0, 0, 1, 7, 0, 0, 0, 0, 0, 0, 1, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 11, 0, 0, 0, 0, 0, 0, 13, 1, 5, 0, 0, 0, 0, 0, 0, 3, 0, 0 ] class << self attr_accessor :parser_bank_vypis_start end self.parser_bank_vypis_start = 1; class << self attr_accessor :parser_bank_vypis_first_final end self.parser_bank_vypis_first_final = 21; class << self attr_accessor :parser_bank_vypis_error end self.parser_bank_vypis_error = 0; class << self attr_accessor :parser_bank_vypis_en_main end self.parser_bank_vypis_en_main = 1; # line 48 "cele/vypis_parser.rl" def parse_vypis(file_name) data = Array.new File.open(file_name, "rb") { |f| data = f.read.unpack("C*") } vypis = Hash.new vypis[:field_names] = Array.new vypis[:transactions] = Array.new i = 0 # line 124 "cele/vypis_parser.rb" begin p ||= 0 pe ||= data.length cs = parser_bank_vypis_start end # line 59 "cele/vypis_parser.rl" # line 132 "cele/vypis_parser.rb" begin _klen, _trans, _keys, _acts, _nacts = nil _goto_level = 0 _resume = 10 _eof_trans = 15 _again = 20 _test_eof = 30 _out = 40 while true _trigger_goto = false if _goto_level <= 0 if p == pe _goto_level = _test_eof next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = _parser_bank_vypis_key_offsets[cs] _trans = _parser_bank_vypis_index_offsets[cs] _klen = _parser_bank_vypis_single_lengths[cs] _break_match = false begin if _klen > 0 _lower = _keys _upper = _keys + _klen - 1 loop do break if _upper < _lower _mid = _lower + ( (_upper - _lower) >> 1 ) if data[p] < _parser_bank_vypis_trans_keys[_mid] _upper = _mid - 1 elsif data[p] > _parser_bank_vypis_trans_keys[_mid] _lower = _mid + 1 else _trans += (_mid - _keys) _break_match = true break end end # loop break if _break_match _keys += _klen _trans += _klen end _klen = _parser_bank_vypis_range_lengths[cs] if _klen > 0 _lower = _keys _upper = _keys + (_klen << 1) - 2 loop do break if _upper < _lower _mid = _lower + (((_upper-_lower) >> 1) & ~1) if data[p] < _parser_bank_vypis_trans_keys[_mid] _upper = _mid - 2 elsif data[p] > _parser_bank_vypis_trans_keys[_mid+1] _lower = _mid + 2 else _trans += ((_mid - _keys) >> 1) _break_match = true break end end # loop break if _break_match _trans += _klen end end while false cs = _parser_bank_vypis_trans_targs_wi[_trans] if _parser_bank_vypis_trans_actions_wi[_trans] != 0 _acts = _parser_bank_vypis_trans_actions_wi[_trans] _nacts = _parser_bank_vypis_actions[_acts] _acts += 1 while _nacts > 0 _nacts -= 1 _acts += 1 case _parser_bank_vypis_actions[_acts - 1] when 0 then # line 4 "cele/vypis_parser.rl" begin p0 = p end # line 4 "cele/vypis_parser.rl" when 1 then # line 6 "cele/vypis_parser.rl" begin i = 0 # vynulovat index pole vypis[:transactions] << Hash.new end # line 6 "cele/vypis_parser.rl" when 2 then # line 11 "cele/vypis_parser.rl" begin nazev = vypis[:field_names][i] vypis[:transactions][-1][nazev] = data[p0..p-1].pack("C*") i += 1 end # line 11 "cele/vypis_parser.rl" when 3 then # line 21 "cele/vypis_parser.rl" begin nazev = data[p0..p-1].pack("C*") end # line 21 "cele/vypis_parser.rl" when 4 then # line 25 "cele/vypis_parser.rl" begin vypis[nazev]=data[p0..p-1].pack("C*") end # line 25 "cele/vypis_parser.rl" when 5 then # line 33 "cele/vypis_parser.rl" begin vypis[:field_names] << data[p0..p-1].pack("C*") end # line 33 "cele/vypis_parser.rl" # line 249 "cele/vypis_parser.rb" end # action switch end end if _trigger_goto next end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof end if _goto_level <= _out break end end end # line 60 "cele/vypis_parser.rl" p vypis end parse_vypis 'vypis0711.csv'