EDB 入門

最終更新: [2005/11/03]
English version is where??
EDB は Emacs/Mule 上で使用するデータベースです.

使い方はまだまったくわかっていません...
edb の Info ファイルを参考に使い方を模索しています.


概要

必要なファイル(3つ)

  1. データファイル (.dat)
  2. フォーマットファイル (.fmt)
  3. 補助 (auxiliary) ファイル (.dba) (オプション) データファイルに内容そのものを記述し,フォーマットファイルで表示時の形式 を決定する.4つめのファイル属性としてリポートフォーマットファイルという ものもある.

    作成練習

    「氏名」と「年」からなるデータベースを作成してみる.ファイル名は names.dat として,前記の項目を含ようにする.ただし各項目の区切りはタブ 文字(デリミタ文字)とする.
    名無し	権兵衛	88
    
    (センスのない例ですみません..)

    このデータの表示形式を指定するフォーマットファイル (names.fmt) を作成する.
      姓:\last
      名:\first
    年齢:\age
    
    ここでの \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 ファイルを 読み出すだけだ.実行すると
      姓:名無し
      名:権兵衛
    年齢:88
    
    と表示されるだろう.

    データの閲覧

    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) とする.

    疑問点


    サンプルファイル

    names.dat, names.fmt

    ...解読中...


    Links


    oshiro@mibai.tec.u-ryukyu.ac.jp