メモの移行
現在EBtでメモをとっていますが、IQNotesへの移行を検討しています。その場合にメモの移行をしなければならないのですけれども手でコピペを行うのは実用的ではありません。EBtにはテキストファイルの書き出し機能がIQNotesにはWZ形式のインポート機能がついているので、この二つの形式を変換するシェルスクリプトを書いてみました。
(追加)作者のおかだ様より、ご指摘いただきました。EBt本来の機能としてWZ形式の出力が可能とのこと。シェルスクリプトは……まぁ、プログラムの勉強ということで(^^;
EBtでメモの構造が
親メモ −子メモ1 −−孫メモ11 −−孫メモ12
となっている場合にファイル書き出しを行うと
------------------------------ title:親メモ ------------------------------ title:親メモ title:子メモ1 子メモ1内容 ------------------------------ title:親メモ title:子メモ1 title:孫メモ11 孫メモ11内容 ------------------------------ title:親メモ title:子メモ1 title:孫メモ12 孫メモ12内容
という内容になります、これを
.親メモ ..子メモ1 子メモ1内容 ...孫メモ11 孫メモ11内容 ...孫メモ12 孫メモ12内容
といった内容に変換します。
EBtから出力する文字コードはeuc-JPを前提にしています、またIQNotes側はShift-JISコード対応になっているのでnkfを使用してコード変換を行っているので、別途nkfが必要となりますが、ZEditorなど使用して変換させてもOK。
#!/bin/sh # # eb2iq.sh # Convert EBt outputfile(euc_JP) to IQNotes inputfile(WZ format) # if [ -z "$2" ]; then echo "Usage: eb2iq.sh EBt_outputfile(euc_JP) WZformat_file" exit fi TMP1=./tmp1.tmp PERIOD="" FLAG="" while read LINE do REX1=`echo $LINE | grep -e "^-----"` REX2=`echo $LINE | grep -e "^title:"` # echo "REX1=$REX1" # echo "REX2=$REX2" if [ "$REX1" ]; then # if separate line elif [ "$REX2" ]; then # if title PERIOD="${PERIOD}." TITLE=`echo $LINE | sed -e "s/^title://"` FLAG="1" else if [ "$FLAG" ]; then echo -n "$PERIOD" >> $TMP1 echo "$TITLE" >> $TMP1 FLAG="" fi echo "$LINE" >> $TMP1 PERIOD="" fi done < "$1" nkf -s -Lw $TMP1 > $2 rm $TMP1