Ruby/Qte普及委員会 Clippim

XREAAD
Create  Edit  Diff  FrontPage  Index  Search  Changes  History  RSS  Login

VbovhoulEMDwQANYid の応用例:

Clippim - クリップボードの内容を変換してPIMに入れる

これは何か

Clippim は、不定形なテキストデータを適当に加工して、PIMに登録する 作業を支援するためのプログラムです。SL-Cシリーズのザウルスで 動作します。

PIMのデータベースに書き込みを行うため、データを壊す危険があります。 あらかじめバックアップをとっておいてからお試しください。 (PIMのデータベースファイルは /home/zaurus/Applications/dtm に あります。)

インストール

まず、以下のプログラムをインストールしておきます。

次に、Clippim の ipk パッケージをインストールしてください。

clippim_0.2.1_arm.ipk

使い方

準備

このプログラムを使うにあたっては、ザウルスのPIMデータベースの レコード情報について知っておく必要があります。

yakty さん作の zdbat を使うと、実際のデータを見ながら、 PIMの画面での入力が、データベース上にどのように格納されているか 確認することができます。また、以下の zdbat のページにも詳しい 情報が載っています。

正規表現によるパターンマッチや、後に触れる「フック」を使いこなして 思いどおりにデータをPIMに取り込めるようになるには、Ruby についての 知識も必要になります。

画面構成

Clippim を起動すると、「クリップボード/パターン」、「PIM/フィールド」、 「フック」、「確認」という4つのタブが表示されます。最初に表示されて いるのは「クリップボード/パターン」で、「クリップボードの内容」には、 起動時にクリップボードに入っていたテキストデータが表示されます。 ここは直接編集することもできます (クリップボードには影響を与えません)。

また、上部には、現在の設定内容を保存したり、過去の設定を呼び出す ためのボタン類が表示されます。

設定作業の流れ

テキストデータの内容をPIMに書き込むための設定作業は、タブを左から順に たどっていくことで行います。

clippim_flowchart.png

上図は、設定作業の全体の流れを表したものです。上から順番に説明していきます。

clippim_tab1.png

1. フィールド項目ごとにデータを切り出すための正規表現パターンの設定。切り出す部分を ( ) でグループ化します。パターン全体がテキストに複数回マッチすれば、複数のレコードを連続して登録できます。

clippim_tab2.png

2. 切り出した部分とPIMデータベースのフィールドとの対応関係を決める設定。まず、上部のコンボボックスから、「アドレス帳」「ToDo」などのデータベースを選択します。次に、格子状にプレビュー表示されているデータの1行目にあるコンボボックスで、対応するフィールド名を選択します。

clippim_tab3.png

3. フックの設定。これは、次のような場合に必要な設定です。

  • テキストから切り出したデータだけでは必要な項目がそろわない場合。
  • 切り出したデータに加工を施して、PIMに登録できる形式に整える場合。

詳しくは後述します。

ここまでの設定を一応終えたら、画面上部の「名前をつけて保存...」 ボタンを押して、設定を保存しておいてください。次回起動時にも呼び出す ことができます。

書き込みの実行

clippim_tab4.png

「確認」タブを開くと、下の「実行」ボタンが選択可能になります。 ここで「実行」ボタンを押すと、テキストデータの変換とPIMデータへの 登録が始まります。

もし登録に成功したら、ログ表示欄に「書き込み成功」と表示されます。 失敗した場合は、例外発生時のエラーメッセージが表示されます。

次のようなテキストを ToDo? に登録したいとします。

  [2006-07-08]! 原稿締め切り

[ ] で囲んだ部分が期限日、その後の「原稿締め切り」がやることの 内容です。その後に改行が入っているものとします。

パターンは次のようなものになるでしょう。

 \[([^\]]+)\]!\s+([^\r\n]+)

正規表現中の空白・改行は無視する (Regexp::EXTENDED オプション) ため、 それぞれ \s 、\n などを使っています。最初の括弧 ( ) で囲んだ部分が 期限日、2番目の括弧で囲んだ部分が内容にあたります。

「PIM/フィールド」タブに移ると、画面中央の表で、実際にどのように 切り出せるかが確認できます。

次に、切り出す部分をPIMデータベースのフィールド項目に対応づけます。 画面上部のコンボボックスで ToDo? を選びます。そして、表の最初の行の 各セルのコンボボックスで、対応するフィールド名を選択します。 今の例では1番目のフィールドが LTDY 、2番目が TITL になります。

次に、「フック」のタブに移ります。

ここまでの設定内容でも、データベースへの登録は一応できますが、 PIMアプリのToDoで正しく表示するにはいくつかの項目が足りません。

  • MARK (完了チェック。0が完了、1が未完)
  • PRTY (重要度。1-5)

(注: 0.2 以降ではこの項目はPIMごとのフックで解決されます。)

また、開始日 (ETDY) も今日にしておきたいところです。 しかし、元のテキストにはこれらに該当する情報がそもそもありません。

そこで、これらの情報を無条件で付け足す設定を、ここに書きます。

 {
   'MARK' => lambda {|v, w, ow| 1 },
   'PRTY' => lambda {|v, w, ow| 1 },
   'ETDY' => lambda {|v, w, ow| Date.today }
 }

これは、フィールド名をキー、正しい値を返すラムダ式 (Proc オブジェクト) を値とするハッシュです。

ラムダ式には *3つの引数* が渡されます (0.2以降)。1つめは Clippim がデフォルトで 用意しているフックが変換したそのフィールド項目の値、2つめはデフォルトの フックが変換したレコード全体を持っているハッシュ、3つめは変換前の元の データ(ハッシュ)です。今の例ではどちらも無視しています。

これで設定がひととおり終わりました。画面上部の「名前をつけて保存...」 ボタンを押して、 ToDo? という名前で保存しておきます。

最後に、「確認」タブへ進み、「実行」ボタンを押します。 無事に書き込みが成功したら、PIMアプリのToDoを起動して確認して みてください。ToDo を高速起動するよう設定している場合は、 いったん高速起動をオフにしてから再起動する必要があるかもしれません。

フックについて

Clippim では、文字列型のデータを数値型や日付時刻型などに変換する ためのデフォルトのフックを用意しています。これは、書き込み先に 選択しているデータベースのフィールド定義情報にもとづいて自動的に 設定されます。

さらに、ユーザーが設定できるフックの処理の後で、 正しい値を矛盾なく設定するためのPIMごとのフックも用意しています。

しかし、上の例で見たように、これだけでは必要な項目が埋まらない こともあります。

極端な話、

 明日の午後3時、横浜駅で待ち合わせ

のような完全に自由な形式のテキストデータは手に負えません。

そのため、ユーザーがフックを記述して、思いどおりに機能を強化できる ようにしました。

※上のテキストも、がんばって次のような設定をすればなんとかカレンダーに登録できます (RTYP の指定をPIMごとのフックに入れるのを忘れていました。すみません。次のバージョンで対応します→0.2.1で対応しました)。

パターン:

 ((?:[今明]|明後)日の午[前|後]\d+時)、(.+?)で(\S+)

PIM/フィールド:

 カレンダー
 TIM1,PLCE,DSRP

フック:

 {
   'TIM1' => lambda {|v, w, ow|
     ov = ow['TIM1']
     date = Date.today
     case ov
     when /明日/
       date += 1
     when /明後日/
       date += 2
     end
     hour = nil
     if (ha = ov.scan(/\d+時/)).size > 0 then
       hour = ha[0].to_i
     end
     if hour then
       DateTime.new(date.year, date.mon, date.day, hour, 0, 0, DateTime.now.offset)
     else
       end
     end
   }
 }

しかし、ある程度既知の問題についてはデフォルトのフックと PIMごとのフック側で処理できるように、今後充実させていきたいと思います。 ご意見をお聞かせください。

更新履歴

2006-07-14
バージョン0.2.1。
カレンダーのフックに RTYP を255にする設定を追加。
2006-07-07
バージョン0.2。
フックの引数を2つから3つに変更。第2引数でレコード全体を渡して、他のフィールド項目も参照できるようにした。第3引数はデフォルトのフックによる変換前のレコード全体。
設定できるPIMを修正 (メール受信箱、メール送信箱を区別)。
2006-07-07
バージョン0.1。

ライセンス

GNU General Public License Version 2 にもとづいて使用できます。

作者

黒崎浩行 <noir (at) st . rim . or . jp>

コメント

  • 2011-11-29 (火) 13:32:26 ぷぅにゃん : もっと欲しいにゃん♪(ノ゚Д゚)ノシ☆ http://gffz.biz/
  • 2012-06-16 (土) 15:08:27 知絵 : 大人の隠れ家。無制限生撮りOK(〃▽〃)→ http://sns.44m4.net/
Name: Comment:

トラックバック

{{trackback}}
Last modified:2012/06/16 15:08:27
Keyword(s):
References:[FrontPage]