さあ、港湾の数を数えろ
国土数値情報(港湾データ、平成20年度)に存在する港湾の個数を数えてみました。
五歳男児の流行語をタイトルに借りて、簡単な Ruby プログラムを組んで処理してみました。
プログラム
# -*- coding: utf-8 -*- # count_ports.rb require 'rubygems' require 'zip/zip' require 'nokogiri' class Parser < Nokogiri::XML::SAX::Document def initialize @mode = nil @buf = '' @code = nil @name = nil @adm = nil end def start_element(name, attrs) @mode = name if %w{ksj:HBC ksj:NA4 ksj:AD7}.include?(name) end def characters(text) @buf += text if @mode end def end_element(name) case name when 'ksj:CK01' print [@code, @name, @adm].join(' '), "\n" (@code, @name, @adm) = [nil, nil, nil] when 'ksj:HBC' @buf = '0' + @buf if @buf.size == 4 @code = @buf when 'ksj:NA4' @name = @buf + '港' when 'ksj:AD7' @adm = @buf end @buf = '' @mode = nil end def run Zip::ZipFile.open('../../../src/ksj/port/C02-08.zip') {|z| Nokogiri::XML::SAX::Parser.new(self).parse( z.get_input_stream(z.get_entry('C02-08.xml'))) } end end Parser.new.run
処理結果
$ ruby count_ports.rb > wc -l 1034
結論
国土数値情報によると、日本の港湾の1034程度あるようです。