procedure gettext: search database by indexed term procedure get_offsets: binary search of index procedure sequential_searc brute-force database search
link gettext
May 2, 2001; Richard L. Goerwitz
This file is in the public domain.
Gettext() and associated routines allow the user to maintain a file of KEY/value combinations such that a call to gettext(KEY, FNAME) will produce value. Gettext() fails if no such KEY exists. Returns an empty string if the key exists, but has no associated value in the file, FNAME. The file format is simple. Keys belong on separate lines, marked as such by an initial colon+colon (::). Values begin on the line following their respective keys, and extend up to the next colon+colon-initial line or EOF. E.g. ::sample.1 or: ::sample.1 ::sample.2 Notice how the key above, sample.1, has :: prepended to mark it out as a key. The text you are now reading represents that key's value. To retrieve this text, you would call gettext() with the name of the key passed as its first argument, and the name of the file in which this text is stored as its second argument (as in gettext("sample.1","tmp.idx")). ::next.key etc... For faster access, an indexing utility is included, idxtext. Idxtext creates a separate index for a given text-base file. If an index file exists in the same directory as FNAME, gettext() will make use of it. The index becomes worthwhile (at least on my system) after the text- base file becomes longer than 5 kilobytes. Donts: 1) Don't nest gettext text-base files. 2) In searches, surround phrases with spaces or tabs in key names with quotation marks: "an example" 3) Don't modify indexed files in any way other than to append additional keys/values (unless you want to re-index). This program is intended for situations where keys tend to have very large values, and use of an Icon table structure would be unwieldy. BUGS: Gettext() relies on the Icon runtime system and the OS to make sure the last text/index file it opens gets closed. ____________________________________________________________ Invoke set_OS() before first call to gettext() or sequential_search() Tested with UNIX, OS/2, DOS, DOS-386, ProIcon