2008/09/26

カレンダーを作成するスクリプト

本日も夜勤中。若干風邪っぽく体調が良く無いのですが、今の俺は誰にも止められないぜーフハハー(朦朧)

今回はDateクラスを使ってみたかったので、CUI上でカレンダーを表示するスクリプトを作成しました。Cygwin上のRubyで作っていたため、-Ksオプションがついてます。教本に載ってそうな初歩的なスクリプトですが、僕的には満足。Ruby楽しい。

#!/usr/bin/ruby -Ks

require 'date'

# 引数の判定
if ARGV[0] == nil && /\d\d\d\d/ != ARGV[0] then
puts "ERROR: 西暦(YYYY)を入力して下さい。"
exit
end

#年のヘッダ表示
print "======= "
print ARGV[0] + " Calenter"
puts " ======="

for m in 1..12 do
#日付オブジェクト作成
cal = Date::new(ARGV[0].to_i,m,1)

#元旦の曜日を抽出
w=cal.wday

#月のヘッダ表示
print "-----------"
print cal.strftime("%b")
print "(" + cal.strftime("%m") + ")"
puts "-----------"
puts "|Sun|Mon|Tue|Wed|Thu|Fri|Sat|"
puts "-----------------------------"

#1日までの空きを埋める
w.times do
print "| "
end

#月によって最終日を変更
case m
when 1,3,5,7,8,10,12
eday = 31
when 2
#うるう年の判定
if cal.leap? == true then
eday = 29
else
eday = 28
end
when 4,5,9,11
eday = 30
end

#カレンダー表示部
for i in 1..eday do
if i<10 then print "| " else print "| " end
print i.to_s
if w==6 then
puts "|"
w=0
else
w=w+1
end
end

#最終日以降の空きを埋める
if w!=0 then
for j in w..6 do
print "| "
end
puts "|"
end
puts "-----------------------------"
end

exit

ところでこのスクリプトを実行した結果、僕が生まれた日は木曜日だということが分かりました。