logo search
TurboProlog / Документация / TOM_1

Пример: Доступ к базе данных через b-деревья

Приведенная ниже программа обрабатывает несколько текстовых файлов в

одной базе данных. Вы можете выбрать и отредактировать тексты, как если

бы они находились в разных файлах. Соответствующее B-дерево предназначено

для быстрого доступа к файлам и сортировки их названий.

/* Программа CH15EX03.PRO */

domains

db_selector = dba

predicates

% List all keys in an index

list_keys(db_selector,bt_selector)

clauses

list_keys(dba,Bt_selector):-

key_current(dba,Bt_selector,Key, _),

write(Key,' '),

fail.

list_keys(dba,Bt_selector):-

key_next(dba,Bt_selector, _), !,

list_keys(dba,Bt_selector).

list_keys(_,_).

predicates

open_dbase(bt_selector)

main(db_selector,bt_selector)

ed(db_selector,bt_selector,string)

ed1(db_selector,bt_selector,string)

clauses

% Выполнение цикла до нажатия любой клавиши

main(dba,Bt_select) :-

write("File Name: "),

redln(Name),

ed(dba,Bt_select, Name), !,

main(dba,Bt_select).

main(_,_).

% Предикат ed убеждает, что редактирование не имеет неудач.

ed(dba,Bt_select, Name):-

ed1(dba,Bt_select, Name), !.

ed(_,_,_).

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

* Существуют три возможности: *

* *

* a)Если имя пустая строка - просмотреть все имена *

* b)Имя уже существует - изменить содержание файла *

* c)Новое имя - создать новый файл *

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

ed1(dba,Bt_select, ""):-!,

key_first(dba, Bt_select,_),

list_key(dba, Bt_select),

n1.

ed1(dba,Bt_select, Name):-

key_search(dba, Bt_select,Name,Ref),!,

ref_terrm(Dba,String,Ref,Str),

editmsg(Str,Str1,"Edit old",NAME,"",0,"PROLOG.HLP",RET),

clearwindow,

Str><Str1, RET = 0,

term_replace(dba, string, Ref, Str1).

ed1(dba,Bt_select, Name):-

editmsg("",STR1,"Creat New",NAME,"",0,"PROLOG.HLP",RET),

clearwindow,

""><Str1, RET = 0,

chain_insertz(dba, file_chain, string, Str1, Ref),

key_insert(Db_select, Bt_select, Name, Ref).

open_dbase(Index) :-

existfile("dd.dat"),!,

db_open(dba, "dd.dat", in_file),

dt_open(dba,"ndx", Index).

open_dbase(Index) :-

db_create(dba, "dd.dat", in_file),

dt_create(dba,"ndx", Index, 20, 4).

goal

open_dbase(Index),

main(dba, Index),

bt_close(dba, Index),

db_close(dba).