[1] 研究上、やむを得ず身に付いていくIT関連技術 ( ( 版)) <http://www.cbrc.jp/~tominaga/tips/>
[2] >>1 の i2d (iCal → Desknet's) だと微妙にうまく動かなかったので差分:
--- i2d.orig 2004-02-12 20:01:59.000000000 +0900
+++ i2d.pl 2005-09-10 20:33:52.000000000 +0900
@@ -1,5 +1,6 @@
#!/usr/local/bin/perl
-$iCalCalendar = "Library/Calendars/official.ics"; # $HOME 以下の場所
+my $iCalCalendar = shift;
+#$iCalCalendar = "Library/Calendars/official.ics"; # $HOME 以下の場所
#
# iCal (by Apple, Sep. 2002) の出力(vCalendar形式)をNeoJapanのDesknet'sが使う
# CSVの形式に変換するフィルタ
@@ -71,6 +72,8 @@
# とりあえず全部読み込んで、Unicode にして配列 @reserved に入れておく
# 1行目は各フィールドの説明、2行目にだけユーザーIDとユーザー名が書いてある
+=pod
+
$dnetCalendar = $ARGV[0]; # 第一引数で指定されていなければならない。
if (open(DNET, $dnetCalendar)) {
@@ -88,13 +91,15 @@
chop($UserSystemID); chop($UserName);
}
+=cut
+
# iCal Calendar からのイベント情報抽出と整形 ##################################
# イベント抽出、イベント整形を1セットにして繰り返す
# 抽出したイベント情報は、desknet's の形式にして1イベント1行にまとめて、
# @events に入れる
# iCal のカレンダーファイルをまずオープン。ここから読みとる。
-$iCalCalendar = $ENV{'HOME'} . "/" . $iCalCalendar;
+#$iCalCalendar = $ENV{'HOME'} . "/" . $iCalCalendar;
open(ICAL, $iCalCalendar) || die("iCal calendar? ->" . $iCalCalendar . "\n");
while (<ICAL>) {
@@ -102,7 +107,7 @@
$content = $sdate = $edate = $comment = "";
# まずイベント抽出(イベントの内容を変数に格納する)
while (<ICAL>) {
- s|\n$||; # 入力行の行末の改行を削除
+ tr|\x0D\x0A||d; # 入力行の行末の改行を削除
# 入力行のチェック
if (/^END:VEVENT/) { last; } # イベント定義終了、次のイベント定義を探す
@@ -135,7 +140,7 @@
$sdate =~ /^[0-9]{4}([0-9]{2})/; $m = $1; # 月の抽出 20020920 -> 09
$sdate =~ /^[0-9]{6}([0-9]{2})/; $d = $1; # 日の抽出 20020920 -> 20
# 時刻の指定があった場合
- if ($sdate =~ /T([0-9]{2})([0-9]{2})..$/) { $stime = $1.":".$2; }
+ if ($sdate =~ /T([0-9]{2})([0-9])[0-9]..$/) { $stime = $1.":".$2."0"; }
else { $stime = ""; }
$sdate = $y . "/" . $m . "/" . $d; # -> 2002/09/20
@@ -143,7 +148,7 @@
$edate =~ /^([0-9]{4})/; $y = $1;
$edate =~ /^[0-9]{4}([0-9]{2})/; $m = $1;
$edate =~ /^[0-9]{6}([0-9]{2})/; $d = $1;
- if ($edate =~ /T([0-9]{2})([0-9]{2})..$/) { $etime = $1.":".$2; }
+ if ($edate =~ /T([0-9]{2})([0-9]{2})..$/) { $etime = $1.":".sprintf("%02d",
int($2 * 0.1)*10); }
else { $etime = ""; }
# 終日イベントの処理
if ($stime eq "") { $edate = $sdate; } # 時刻の指定がないとき
@@ -242,6 +247,7 @@
$comstr = "";
@clist = split(m|\\n|, $comment); # 文字列 \n で分割
foreach (@clist) {
+ tr/\x0D\x0A//d;
s|\n$||; # 行末の改行を削除
if (/^$/) { next; } # 元々空行のところだったらスキップ
s|\\"|"|g; # \" をただの " に置き換え