def makesql(ver, n, desc) dom = 0 ver = ver.to_i cod = n.to_i pkey = [dom, ver, cod] if $sto[pkey] then # $deferr.puts [:dup, pkey].inspect $sto[pkey] += ("; " + desc) else $sto[pkey] = desc end end $sto = {} for line in ARGF ver, ranges, desc = line.chomp.split(/\t/, 3) for range in ranges.split(/\s*,\s*/) case range when /^(\d+)-(\d+)$/ then a, b = $1.to_i, $2.to_i (a .. b).each {|n| makesql(ver, n, desc) } when /^(\d+)$/ then n = $1.to_i makesql(ver, n, desc) else raise "malformatted range <#{range}>" end end end puts "BEGIN;" for pkey, desc in $sto dom, ver, cod = pkey next if desc == 'Reserved' dsc = ["'", desc.gsub(/'/, "''"), "'"].join sql = <<-EOF REPLACE INTO bufra(dom, ver, cod, dsc) VALUES(#{dom}, #{ver}, #{cod}, #{dsc}); EOF puts sql end puts "COMMIT;"