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