補助 (auxiliary) ファイル (.dba) (オプション)
データファイルに内容そのものを記述し,フォーマットファイルで表示時の形式
を決定する.4つめのファイル属性としてリポートフォーマットファイルという
ものもある.
作成練習
「氏名」と「年」からなるデータベースを作成してみる.ファイル名は
names.dat として,前記の項目を含ようにする.ただし各項目の区切りはタブ
文字(デリミタ文字)とする.
(センスのない例ですみません..)
このデータの表示形式を指定するフォーマットファイル (names.fmt) を作成する.
ここでの \last や \first には各デリミタで区切られた項目が割り当てられ
る.この実際の割り当ては補助ファイル (.dba) によって行うが,次のように
フォーマットファイル (.fmt) 内に記述することもできる.扱うファイル数が減
るのでこちらのほうが便利である.
|
姓:\last
名:\first
年齢:\age
Local Variables:
eval: (database-set-fieldnames-to-list database
'(first last (age . integer)))
End:
|
"eval:" の部分で各項目を順に "(first last ...)" として上部のフォーマット
に対応した名称で割り当てていく.age は文字列ではなく数値的に扱えるよう
integer 変換を施している.
ここまで用意すれば後は M-x db-find-file を行って,names.dat ファイルを
読み出すだけだ.実行すると
と表示されるだろう.
データの閲覧
p 前の項目へ移動
n 次の項目へ移動
s,h サマリーを表示
a,i 項目追加,編集モードへ移行
c 現在の内容をコピー
d 項目削除
TAB 編集モードへ移行?
q 閲覧終了
データの編集
C-c C-c 項目編集の終了
C-x C-s 編集バッファのセーブ
C-o 新規行挿入(かんな起動のキーバインドとぶつかる...)
初期値の設定法
先の例に更新日の項目 \update を追加し,これに初期値を自動設定する方法を
示す.新規に項目を作成した場合に呼び出される関数は
db-new-record-function である.これに対応処理を割り当てればよい..fmt ファ
イルで記述する.
|
姓:\last
名:\first
年齢:\age
更新日:\update
Local Variables:
eval:
(progn
(database-set-fieldnames-to-list database
'(first last (age . integer) update))
(defun set-db-initial-data (record database)
(let ((date (current-time-string)))
(setq date
(concat (substring date 20 24) "/"
(get-date:month-to-strnum (substring date 4 7)) "/"
(get-date:num-to-strnum (substring date 8 10))))
(record-set-field record 'update date database)))
(setq db-new-record-function 'set-db-initial-data)
)
End:
|
これで閲覧モードで 'a' を押すと「更新日」の項目に本日の日付が刻印される.
他にも設定したい初期値があれば,set-db-initial-data 関数内で逐次
(record-set-field record '項目名 内容 database) とすればよい.例えば,物
品の個数を示す項目を \number として作成していて,これの初期値を 1 とした
い場合には (record-set-field record 'number 1 database) とする.
疑問点
- .dat ファイルを一番はじめに編集する場合はどのように扱うのがいいのか?
存在しない新規ファイルは db-find-find ではオープンできない.
- .fmt ファイルは結局手動で書いていかなければならないのか?ある程度,
自動で割り当ててくれる補助コマンドはないのか?
- .fmt ファイルは多分にプログラミングの要素が入ってしまうようである.
elisp の知識は必須なのか?もっと簡単な利用法はないのか?
- .dat ファイル内に .fmt 項目を記述することはできないのか?扱うファイ
ル数は少ないほうがいいのだが.
- 作成したデータを利用する場合はどのようにするのか?タブセパレータで
データ読みだしを行う,他のプログラムを作成しなければならないのか?
- 形式変更したい場合はどのようにするんだろう?
- 住所録などの標準的なデータベースについては,.fmt ファイルが公開 (パッ
ケージに添付) されていてもいいように思うがそれはないのか?
- 個人的にはいまのところ「家計簿.fmt」が欲しいなぁ...こちらはデー
タベースでなくて表計算の守備範囲かも.
サンプルファイル
names.dat,
names.fmt
...解読中...
Links
oshiro@mibai.tec.u-ryukyu.ac.jp