[REBOL] Re: Object Database
From: carl:rebol at: 9-Apr-2001 8:28
What!? You just want us to just whip out an object database, eh? ;)
Ok, why not.... Here is a small "contacts" database keyed by email.
You can expand or reduce the record definition without corrupting
or affecting the database.
REBOL [Title: "Email Contact Database"]
db-file: %data.r
record: context [name: email: phone: web: none]
database: []
load-data: has [data] [
data: load/all db-file
clear database
foreach item blk [
item: make record item
repend database [item/email item]
]
]
save-data: has [data] [
data: copy []
foreach [key obj] database [
append/only data third obj
]
save db-file data
]
find-data: func [email] [select database email]
remove-data: func [email] [remove/part find database email 2]
insert-data: func [email' name' phone' web'] [
repend database [
email'
make record [
email: email'
name: name'
phone: phone'
web: web'
]
]
]
You can expand/contract the record definition at any time.
This is untested... but should be close to working, less a few
minor typos. If you expect to grow this database to a large
size, you will want to MAKE HASH! the database when you load
it.
-Carl
PS: The remove/part on find really does work. Remove none is
allowed in Core 2.5.