%%{ machine parser_bank_vypis; action uloz_pozici { p0 = p } action zacatek_transakce { i = 0 # vynulovat index pole vypis[:transactions] << Hash.new } action zpracuj_pole { nazev = vypis[:field_names][i] vypis[:transactions][-1][nazev] = data[p0..p-1].pack("C*") i += 1 } cokoliv_krome_uvozovek = ^'"'+ ; nazev_atr = cokoliv_krome_uvozovek >uloz_pozici %{ nazev = data[p0..p-1].pack("C*") } ; hodnota_atr = cokoliv_krome_uvozovek >uloz_pozici %{ vypis[nazev]=data[p0..p-1].pack("C*") } ; eol = '\r\n' ; globalni_atribut = '"' nazev_atr '","' hodnota_atr '"' eol ; nazev_pole = cokoliv_krome_uvozovek >uloz_pozici %{ vypis[:field_names] << data[p0..p-1].pack("C*") } ; nazvy_poli = ('"' nazev_pole '",')* ('"' nazev_pole '"') eol ; pole = cokoliv_krome_uvozovek* >uloz_pozici %zpracuj_pole ; transakce = ( ('"' pole '",')* ('"' pole '"') eol ) >zacatek_transakce ; main := globalni_atribut+ eol nazvy_poli transakce* ; }%% %% write data; 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 %% write init; %% write exec; p vypis end parse_vypis 'vypis0711.csv'