PalmDateBookUtil Ver 1.1 Palm Desptop 4.0.1 の datebook.dat を対象としたコマンドラインユーティリティ Copyright (C) 2008, Takeshi Yoneki / OSTRACISM CO. http://www.ne.jp/asahi/techno/ostra/ 1. 概要 PalmDateBookUtilはWindowsのPalm Desptop 4.0.1のdatebook.datファイルを扱う ためのプログラムです。 datebook.datファイルはPalm Desptop 4.0.1を順当にインストールすると、 C:\Palm\<ユーザ名>\datebook\datebook.dat として作成されます。 Palm Desptop 4.0.1の「予定」データが全てこのファイルに入っています。 PalmDateBookUtilはこのファイルを直接読んで、概要の表示、vCal形式(vcs)の 出力を行います。 また、他のカレンダーデータのインポート等を行っていると手違いで同じ予定が 重複して記録されることがありますが、その重複データを消去する機能もあります。 PalmDateBookUtilは基本的にはPalm Desptop 4.0.1から他のカレンダーへの移行を 補佐するプログラムとして作られました。 2. 動作環境 Microsoft Visual C++ 2008 Express Edition SP1 でビルドしています。 Microsoft Visual C++ 2008 SP1 再頒布可能パッケージ (x86) がインストールされて いる必要があります。 http://www.microsoft.com/downloads/details.aspx?familyid=A5C84275-3B97-4AB7-A40D-3802B2AF5FC2&displaylang=ja 3. 機能 PalmDateBookUtil [option] inPath [outPath] -s, --summary, あるいは-v/-uオプションなし 概要の表示 datebook.dat内の予定データの概要を表示します。 例 PalmDateBookUtil C:\Palm\UserName\datebook\datebook.dat -v, --vcs vCal形式(vcs)の出力。 datebook.dat内の予定データをvCal形式で出力します。 時刻は全てローカルタイムを使用します。 Palm Desptop 4.0.1およびGNOME Evolutionで読めるようになっています。 GNOME Evolutionは繰り返し情報のときUTCではなくローカルタイムを使用したほうが 適切に扱えるようです。 出力は標準出力(コンソール)なので、適切にリダイレクトしてください GNOME Evolutionがインポートする際はiCal形式として扱われるようです。 iCal形式の文字エンコードはUTF-8ですので、GNOME Evolutionインポート向けは 何らかの方法で文字エンコードを変換してください。 datebook.datはShift_JISであり、PalmDateBookUtilはそれをそのまま出力します。 例 PalmDateBookUtil -v C:\Palm\UserName\datebook\datebook.dat > pdball_sjis.vcs PalmDateBookUtil -v C:\Palm\UserName\datebook\datebook.dat | nkf -w > pdball_utf8.vcs -u, --utc vCal形式(vcs)の出力で国際協定世界時(UTC)を使用します。 一般にUTCはグリニッジ標準時(GMT)と同等扱いされています。 Palm Desptop 4.0.1およびOutlook 2003で読めるようになっています。 Outlook 2003はvCal形式を読み込む際ローカルタイムで記述されていてもUTCとして 扱ってしまいます。 よってOutlook 2003インポート向けはUTCを使用する必要があります。 文字エンコードはShift_JISのままで良いようです。 例 PalmDateBookUtil -v C:\Palm\UserName\datebook\datebook.dat > pdball_utc.vcs -r, --redundancy datebook.dat内の予定データにおいて開始時刻と概要が完全一致する重複を解消し ひとつを残して残りは削除します。 例 PalmDateBookUtil -r C:\Palm\UserName\datebook\datebook.dat C:\Palm\UserName\datebook\datebook.new -m, --mimequotedprintable vCal形式(vcs)の出力でSUMARYとDESCRIPTIONの出力をMIMEのQUOTED-PRINTABLEにします。 具体的には改行が"=0D=0A"と表現されます。 デフォルトです。 この場合の出力はPalm Desptop 4.0.1で読み込めます。 GNOME Evolutionのカレンダデータは ~/.evolution/calender/local/system/calender.ics で、iCalender形式(ics)です。 GNOME EvolutionはMIMEのQUOTED-PRINTABLEの出力をインポートで読み込めますが、 知らないプロパティであるとのエラーがcalender.icsに記録されます。 -b, --backslashescape vCal形式(vcs)の出力でSUMARYとDESCRIPTIONの出力をバックスラッシュでエスケープします。 具体的には改行が"\n"と表現されます。 この場合の出力はPalm Desptop 4.0.1で読み込めません ("\n"が改行と解釈されず単に"\n"のままです)。 GNOME Evolutionはインポートで読み込めます。 GNOME Evolutionインポート向けはこのオプションを使用した方が良いでしょう。 例 PalmDateBookUtil -v -b C:\Palm\UserName\datebook\datebook.dat | nkf -w > pdball_bs_utf8.vcs 4. 制限 繰り返し情報は「日」の繰り返しのみvCal形式で出力されます。 出力されなかった繰り返し情報のあるレコードには COMMENT:#RRULE ALERT が入ります。 Palm Desktop 4.0.1からのvCal形式のエクスポートデータをOutlook 2003にインポート した場合繰り返し情報に対応していないようです。 PalmDateBookUtilも同じ形式で出力するためOutlook 2003では繰り返し情報が欠落 することになります。 datebook.dat内の日付時刻データは一般にUnix timeと呼ばれる32bitの符号なし整数で 格納されています。 この値は環境設定のタイムゾーンの値分ずれています。 すなわちUTC(GMT)で保持されています。 よってローカルタイムで出力するにはUTCから変換することになります。 これはPalmのタイムゾーンとPalmDateBookUtilを動作させるPCのタイムゾーンが一致 している必要があるということです。 日付時刻データが32bit Unix timeであるということは、Palmの「予定」は2031年まで しか使えないということを示しています。 繰り返し情報で「終了日なし」を指定すると実際には「2031年12月31日」が入ります。 「2031年12月31日」を特異日として扱っているので予定を書ける最終日は 「2031年12月30日」となります。 5. icalfilter.rb iCalの出力するiCalenderファイルをPalmDesktop 4.0.1で適切に扱えるように加工 するRubyスクリプト icalfilter.rbはiCalの出力するiCalender(ics)ファイルをPalmDesktop 4.0.1で 適切に扱えるように加工するRubyスクリプトです。 PalmDesktop 4.0.1はvCal(vcs)のインポートが可能ですが、iCalの出力する iCalenderは多少vCalの仕様と違う部分があるため、あまりうまく読み込めません。 icalfilter.rbはicsファイルを入力とし、多少の加工をしてコンソールに出力します。 適切にリダイレクトしてvcsファイルを作ってください。 また、入力がUTF-8ならば出力もUTF-8になるのでPalmDesktop 4.0.1にインポート するならばShift_JISに文字エンコードを変換する必要があります。 ruby icalfilter.rb [option] icsFilePath1 [icsFilePath2] -s, --summary 入力icsの概要を出力します。 -n, --normal, あるいは-s/-aオプションなし 入力icsをPalmDesktop 4.0.1で扱えるよう加工して出力します。 -a, --added 入力icsをPalmDesktop 4.0.1で扱えるよう加工して出力します。 2つの入力を受け取り、最初のファイルと次のファイルの間で加わったものを出力 します。 -sd, --startdate 出力開始日をYYYYMMDDで指定します。 -ed, --enddate 出力終了日をYYYYMMDDで指定します。 -h, --header 入力icsのヘッダ部分をそのまま出力します。 デフォルトでは出力しません。 -l, --location LOCATION:タグのデータをDESCRIPTION:に追加して出力しません。 PalmDesktop 4.0.1はLOCATION:タグを解釈しないのでデフォルトでDESCRIPTION:に 追加して出力します。 例 2008年3月以降をPalmに取り込むための出力を得る ruby icalfilter.rb -sd 20080301 sample.ics | nkf -s > sample_200803.vcs 例 ふたつのicsファイルの間の追加分の出力を得る ruby icalfilter.rb -a sample1.ics sample2.ics | nkf -s > sample_add.vcs 6. 記録 Ver 1.1 2008.10.25 バックスラッシュエスケープでの出力の追加。 Ver 1.0 2008.10.01 最初のリリース