OS X の iCal でイベントを細かく管理していると、過去にどんなことが有ったのかの記録に使えるぞ、と思いました。
やりたかったこと
iCalでカレンダーの書き出しをすると、vCalendar 形式のファイル(拡張子は .ics)で出力されます。
こんな感じ
BEGIN:VEVENT
UID:11A04694-11B0-4053-984C-700328F928BF
DTSTAMP:20150808T044239Z
LOCATION:
TRANSP:OPAQUE
SUMMARY:重要な会議だよ
SEQUENCE:0
DTEND;TZID=Asia/Tokyo:20150802T103000
DTSTART;TZID=Asia/Tokyo:20150802T093000
END:VEVENT
このままでは検索性や一覧性に欠けるので、次のような日時とイベントタイトルが一行になったテキストデータに変換しようと考えました。
2015/08/02-09:30 重要な会議だよ
プログラム
OS Xには Perl が標準で入っているので、Perl で書いたプログラムです。
#!/usr/bin/perl
#### use encoding 'utf8', STDOUT=>'shiftjis';
while(<>) {
($EventName, $EvantData, $EventTime) = "" if(/BEGIN:VEVENT/) ;
chop;
chop;
$EventName = $1 if(/SUMMARY:(.+)/);
$EventDate = substr($1, 0, 4) . '/' . substr($1, 4, 2) . '/' . substr($1, 6, 2) if(/DTSTART;.+:([0-9]+)/);
$EventTime = substr($1,1, 2) . ':' . substr($1, 3, 2) if(/DTSTART;.+:[0-9]+(T[0-9]+)/);
if (/END:VEVENT/) {
$wk = substr($EventDate,0,10) . "-$EventTime " . $EventName . "\n";
printf($wk) if (/END:VEVENT/);
}
}
二行目はコメントアウトしていますが、出力したい文字コードを変更したい場合に書き換えて利用してください。 use encoding 'utf8', STDOUT=>'shiftjis';
利用方法
このプログラムを保存して実行権限を与えたら、ターミナルで以下のようにコマンドを実行します。
$ cat (iCalで書きだしたファイルパス) | iCalSel.pl | sort > (結果を書き出すファイルパス)
(例) $ Cat 2015Calendar.ics | iCalSel.pl | sort > 2015Cal.txt
cat を使うと、複数のカレンダーを一括で処理できます。
$ cat Calendars/* | iCalSel.pl | sort >iCalAllData.txt
お役に立てば幸いです。