db = {} for line in ARGF begin next unless (3..72) === ARGF.lineno a = line.split(/,/, 103)[2,100] unless a.reject{|s| /^(?:0|[1-9]\d*)$/ === s}.empty? raise 'malformatted number' end lat = 72 - ARGF.lineno (0..99).each {|i| lon = i + 90 case lon when 0..179 key = format('+%02u+%03u/', lat, lon) db[key] = a[i] when 180 key = format('+%02u+%03u/', lat, lon) db[key] = a[i] key = format('+%02u-%03u/', lat, 360 - lon) db[key] = a[i] else key = format('+%02u-%03u/', lat, 360 - lon) db[key] = a[i] end } rescue => e $deferr.puts [ARGF.lineno, e.to_s, line].inspect exit 1 end end puts "" for key in db.keys.sort puts "

" end puts ""