2017年2月24日金曜日

内閣府の「国民の祝日」ページのCSVを使うサンプル

http://www8.cao.go.jp/chosei/shukujitsu/gaiyou.html
についてツイートでちょっと触れましたが、
https://twitter.com/tsaka1/status/834770830399647744
実はそんなに処理が複雑ではない事に気づいて、しょうもないサンプルプログラムを書いてみました。
Rubyの標準ライブラリにあるDateクラスを使って、年月日を入力するとその日が祝日なら、その名前を、それ以外なら曜日を表示するというものです。Windows上でsjisで書いたプログラムです。

なお、大したことはしてないので、解説は略します:-)

で、問題は来年以降もこのプログラムが無修正で使える形式で提供されるかどうかですよね:-)

#! ruby
# coding: sjis
#
# 「内閣府ホーム  >  内閣府の政策  >  制度  >  国民の祝日について」
# http://www8.cao.go.jp/chosei/shukujitsu/gaiyou.html
# のCSVファイルを使って祝日かどうかを返すプログラム例
#

FNAME = "syukujitsu.csv"

require("csv")
require("date")

WDAYS = [
  "日曜日",
  "月曜日",
  "火曜日",
  "水曜日",
  "木曜日",
  "金曜日",
  "土曜日"
]

$holidays = Hash.new

CSV.open(FNAME){ | cs |
  header1 = cs.gets
  header2 = cs.gets
  while row = cs.gets
    while !row.empty?
      name, date = row.shift(2)
      if !name || !date
        break
      end
      $holidays[Date.parse(date)] = name
    end
  end
}

puts("年月日を入力してください。入力終了はENTERのみです。")
while keyin = gets
  if keyin == "\n"
    break
  end
  d = Date.parse(keyin.chomp)
  if n = $holidays[d]
    printf("%s: %s\n", d.strftime("%Y/%m/%d"), n)
  else
    printf("%s: %s\n", d.strftime("%Y/%m/%d"), WDAYS[d.wday])
  end
end