hakeの日記

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

メモの移行

現在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