next up previous
Next: 5.2 家計簿計算 Up: 5 Emacslisp Previous: 5 Emacslisp

5.1 集計コマンドの例

家計簿のように項目と金額の 簡単な表があったとしてその集計を 行う例を考える. ファイルは,<---から --->までの間の各行の末尾に 数値があるとする.

<---
   ガソリン 2500
   ケース  200
   電車賃 1200
--->
この家計簿の集計を行ってミニバッファへ表示する例としては次のようなコマン ドを定義する.これを*scratch*バッファで定義するなりmycalc.elなどのファ イルに保存してM-x load-fileコマンドでこのファイルを読み込んだりした後, 家計簿ファイルのバッファへポイントを移して,M-x my-calcと実行するとミニ バッファにSum: 3900が表示される.
(defun my-calc ()
  "<--- から --->までの行末の数字をすべて足した結果を表示する"
  (interactive)
  (save-excursion
    (let ((sum 0) n)
      (goto-char (point-min))        ;; バッファ先頭へ
      (re-search-forward "^<---") ;; <---の検索
      (while
          (re-search-forward
           "\\(^--->\\)\\|\\([0-9]+$\\)" nil t)
        (cond
            ((match-beginning 2)
             (setq n (buffer-substring
                      (match-beginning 2)
                      (match-end 2)))
             (message n)
             (setq n (string-to-number n))
             (goto-char (match-beginning 2))
             (end-of-line)
             (setq sum (+ sum n)))
          ((match-beginning 1)
           (message (concat "Sum: "
           (number-to-string sum)))))))))


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