<--- 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))) )))