についてツイートでちょっと触れましたが、
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
twitterでデータが振り替え休日に対応してないという指摘もありましたが、そもそも「国民の休日」がCSVに含まれてないという点があります。データ形式よりもそのような仕様の方の課題を理解してもらう必要があるかもしれません。参考ツイートは以下の通り。
返信削除https://twitter.com/tsaka1/status/834951920435408901
https://twitter.com/tsaka1/status/834952398539902980
えっと、特にアナウンスらしきものが同ページにないのですが、同じURLで提供データ形式が変わりました。データ形式そのものの良否よりも、そういったことをアナウンスするとかURLを変えるほうが運用としては重要だと思うのですけどね。
返信削除で、上記プログラムは31行目の「name, date = row.shift(2)」を「date, name = row.shift(2)」に変更すれば対応できます。