'''The proc to build the index''' file of a big file of newline delimited enregs:
# --------------------
# build_index
#
# builds a file index for a big file
# --------------------
# parm1: big file name
# parm2: index file name
# --------------------
# return: count of enregs
# --------------------
proc build_index {bigfile indexfile} \
{
# index the file
set count 0
set fpi [open $bigfile r]
set fpo [open $indexfile w]
while {![eof $fpi]} \
{
puts -nonewline $fpo [format %-8.8s [tell $fpi]]
### enregs are newline delimited lines ###
set line [gets $fpi]
incr count
}
puts -nonewline $fpo [format %-8.8s [tell $fpi]]
close $fpo
close $fpi
return $count
}The proc to access the n-th enreg given the file pointers to the big file and to the index file:
# --------------------
# get_enreg
#
# get the n-th enreg of a big file indexed by an index file
# --------------------
# parm1: the index of the enreg inside the big file
# parm2: the handle of the opened big file
# parm3: the handle of the opened index file
# --------------------
# return: the n-th enreg of the big file
# --------------------
proc get_enreg {n fileptr indexptr} \
{
# get the starting & endind offsets
seek $indexptr [expr {$index * 8}] start
set start [read $indexptr 8]
set end [read $indexptr 8]
# seek inside the big file
seek $fileptr $start start
# return the enreg
set enreg [read $fileptr [expr {$end - $start}]]
}See also

