#!/usr/bin/ruby
require 'time'
class App
def help
$stderr.puts "usage: #$0 [-opts] maptime level outfile.(json|html) [zsort.txt ...]"
exit 16
end
def initialize argv
@flags = {}
while /^-(\w+)(?:[:=](.*))?/ === argv.first
argv.shift
@flags[$1] = ($2 || true)
end
maptime = argv.shift
@level = argv.shift
help if @level.nil?
@outfile = argv.shift
@files = argv
@maptime = Time.parse(maptime).utc
@merge = {}
rescue => e
$stderr.puts "#{e.class}: #{e.message}"
help
end
def htmlhead
bt = @maptime.strftime('%Y%m%d%H%M%S')
windbase = (@flags['WD'] ||
'https://raw.githubusercontent.com/etoyoda/wxsymbols/master/img/')
<
bufrsort #{@maptime} #{@level}
map will be here
HTML
end
def outjson io
io.puts '['
first = true
@merge.each {|k, v|
io.puts(v + ',')
}
io.puts '{"@":"dummy"}]'
end
def iopen
if @files.empty? then
yield $stdin
else
@files.each{|fnam|
File.open(fnam, 'r:UTF-8') {|fp| yield fp }
}
end
end
def oopen
case @outfile
when nil, '-' then
yield $stdout
else
File.open(@outfile, 'w:UTF-8') {|fp| yield fp }
end
end
def run
pat = [@maptime.utc.strftime('^%Y-%m-%dT%H:%MZ'), @level, ''].join('/')
pattern = Regexp.new(pat)
n = 0
iopen() {|fp|
fp.each_line{|line|
next unless pattern === line
n += 1
k, v = line.chomp.split(/ /, 2)
@merge[k] = v
}
}
$stderr.puts "#{n} lines" if $VERBOSE
oopen() {|ofp|
ofp.write htmlhead if /\.html?$/ === @outfile
outjson(ofp)
ofp.write htmltail if /\.html?$/ === @outfile
}
end
end
$VERBOSE = true if $stderr.tty?
App.new(ARGV).run