next up previous
Next: 5.3 ディレクトリ表示 Up: 5 Emacslisp Previous: 5.1 集計コマンドの例

5.2 家計簿計算

表計算を繰り返すような例として,月ごとに集計をする簡単な家計簿 を計算する例を示す.

<--- 1月
   ガソリン 2500
   ケース  200
   電車賃 1200
--->
<--- 2月
   食費   1000
   ケース  200
   電車賃 1200
--->
というような形で記録をとっているファイルがあるとする. このファイルから,

<--- 1月
   ガソリン 2500
   ケース  200
   電車賃 1200
---> 小計 3900
<--- 2月
   食費   1000
   ケース  200
   電車賃 1200
---> 小計 2400
各月ごとの小計を入れたファイルに変換するということを考えてみる. ここでは,各月ごとのデータは,
<---
--->
で囲まれているところに,項目名と数値を並べて書くという 取り決めとしておく.項目名の文字の長さ,項目と数値の間の空白文字の 長さも自由とする. このようなファイルから小計をつけたファイルを作る 手順をどのようにするかを考える. そして,その手順をEmacs lispで実行させるにはどのようにするかを みてゆくことを行う. 上の小計計算と追記の処理を Emacs Lispで行うために,入力のファイルをバッファに読み込んで おいてそのバッファにカーソルをおいた状態でM-x my-kakeibo というコマンドを入力すると,計算と追記処理が実行されるという 形にすることを考える.
(defun my-kakeibo ()
  "<--- から --->までの行末の数字をすべて足した結果を集計"
  (interactive)
  (save-excursion
    (let (sum)
      (goto-char (point-min))        ;; バッファ先頭へ
      (while
          (re-search-forward
           "\\(^--->\\)" nil t)
        (cond
            ((match-beginning 1)
             (goto-char (match-end 1))
             (delete-region
              (point) (progn (end-of-line) (point))))))
      (goto-char (point-min))        ;; バッファ先頭へ
      (while
          (setq sum (my-kakeibo-sub))
        (insert (format " 小計%5d" sum)))
      )))


generated through LaTeX2HTML. M.Inaba 平成18年5月7日