hakeの日記

Windows環境でプログラミングの勉強をしています。

PortaBaseデータをアドレス帳へ

好きな項目の追加削除ができない、デザインが気に入らないなどの理由でアドレス帳を使用せずにPortaBaseで情報を管理していたわけですけれども、アドレス帳にデータを入れておけばメールを書くときにリストがから相手のメールアドレスを選べるんだよね。これだけは便利なのでメールアドレス+αの情報をPortaBaseからアドレス帳にコピーするスクリプトを作ってみました。


使用するツールは以下の通り
zdbat - LiniZau TollBoxより入手
 http://tbox.jpn.org/wiki/linuzau/wiki.cgi?zdbat
nkf - Walrus,Visit.より入手
 http://digit.que.ne.jp/visit/index.cgi?Linux%a5%b6%a5%a6%a5%eb%a5%b9%2f%a5%c0%a5%a6%a5%f3%a5%ed%a1%bc%a5%c9

#!/bin/sh
#
# From PortaBase phone data to AddressBook
# (name,company,E-mail)
#

DTMDIR="/home/zaurus/Applications/dtm"
PBDIR="/home/zaurus/Documents/application"
PBFILE=${PBDIR}/phone.pob

TMP1=${PBDIR}/tmp1.tmp
TMP2=${PBDIR}/tmp2.tmp
TMP3=${PBDIR}/tmp3.tmp

cd $DTMDIR
rm SLADR*.bak
for SLADR in `ls SLADR*`
do
   mv $SLADR ${SLADR}.bak
done

cd $PBDIR
portabase tocsv $PBFILE $TMP1
nkf -e $TMP1 > $TMP2

CARDID=0
echo CARDID,FULL,LNME,CPNY,MAL1 > $TMP3

while read LINE
do
   LNME=`echo $LINE | cut -d, -f 5` # name
   CPNY=`echo $LINE | cut -d, -f 2` # company
   MAL1=`echo $LINE | cut -d, -f 7` # E-mail

   FULL=${CPNY}" "${LNME} # cpmpany name

   if [ -n "$MAL1" ]; then   # if exist E-mail
      echo $CARDID,"$FULL",$LNME,$CPNY,$MAL1 >> $TMP3
   fi
done < $TMP2


/home/QtPalmtop/bin/qcop QPE/System 'execute(QString,QString)' addressbook
sleep 10
/home/QtPalmtop/bin/qcop QPE/InputHelper 'mouse(QString)' "click 624 8"

zdbat address -w < $TMP3
rm $TMP1
rm $TMP2
rm $TMP3


以下はポイントの説明

for SLADR in `ls SLADR*`
do
   mv $SLADR ${SLADR}.bak
done

アドレス帳のデータファイル(/home/zaurus/Applications/dtm/SLADR*)を.bak付きに変更。zdbatを使用して書き込むと追加という形になる、本来は既にある情報を比較して新規情報だけ書き込むようにしたほうが良いのだろうけれど面倒なので新規状態からの作成とします。元のデータは削除しちゃっても良いのだけれど、一応.bakをつけて保存。


portabase tocsv $PBFILE $TMP1
nkf -e $TMP1 > $TMP2

PortaBase用のデータファイル$PBFILEをcsv形式にして$TMP1に書き出しする、このファイルの日本語はUTF8なのでnkfにてEUCコードに変換したものを$TMP2に書き出しする。なおPortaBaseで利用できるコマンドは、portabase --helpで確認できます。


   LNME=`echo $LINE | cut -d, -f 5` # name
   CPNY=`echo $LINE | cut -d, -f 2` # company
   MAL1=`echo $LINE | cut -d, -f 7` # E-mail

   FULL=${CPNY}" "${LNME} # cpmpany name

   if [ -n "$MAL1" ]; then   # if exist E-mail
      echo $CARDID,"$FULL",$LNME,$CPNY,$MAL1 >> $TMP3
   fi

$TMP2のcsvデータから一行ずつ読み出して、そのうち個人名(5番目)、会社名(2番目)、メールアドレス(7番目)を切り出しする。また$FULLには“会社名 個人名”のデータを代入する。$FULLがアドレス帳の個人名欄、或いはメールの宛先選択リストの名前欄になります。自分の場合、会社名と担当者名は一緒表示されていた方が便利なのでこのようにしました。もしメールのデータが存在していたら、これらのデータを$TMP3に書き出しします。
$TMP3の内容は下記のようになります。なお、個人名はアドレス帳の個人名(姓)欄に入れました。

CARDID,FULL,LNME,CPNY,MAL1
0,会社名1 個人名1,個人名1,会社名1,メールアドレス1
0,会社名2 個人名2,個人名2,会社名2,メールアドレス2
0,会社名3 個人名3,個人名3,会社名3,メールアドレス3
/home/QtPalmtop/bin/qcop QPE/System 'execute(QString,QString)' addressbook
sleep 10
/home/QtPalmtop/bin/qcop QPE/InputHelper 'mouse(QString)' "click 624 8"

最初にアドレス帳のデータファイルを別名にしてしまったので、アドレス帳を一度起動させて新規データファイル(SLADRS.BOX,SLADRS.IDX)を作成させ、10秒後に右上の×をクリックさせて終了。このファイルがないとzdbatでデータが書き込めない。


zdbat address -w < $TMP3

アドレス帳に$TMP3のデータを書き込みする。



アドレス帳のデータを別名にして新規作成してしまうなど乱暴なことやっているので事前にバックアップは必要、またアドレス帳の高速起動のチェックを外しておくこと。とりあえずメールの宛先選択でリストが表示されるようになったので満足。