Posted to tcl by miguel at Sat Apr 23 16:18:25 GMT 2011view pretty

set inputFname /foo/bar/sum.pdf
set outputFname /foo/bar/sum2.pdf
set indicesFname /foo/bar/idxes
set chunkSize 4000
set pagemarker \f; #or whatever it is

set f [open $idxes]
set idxdata [read $f]
close $f
# build a list of indices and replacements in idxlist/idxrepl
set idxlist [....]
set idxrepl [....]
unset idxdata



set in [open $inputFname]
set out [open $outputFname w]


set inbuf {}
set i 0
set idxused 0
set done 0

while {!$done} {
    append inbuf [read $in $chunkSize]
    set inlist [split $inbuf $pagemarker]
    if {![eof $in]} {
	set inbuf [lindex $inlist end]
	set inlist [lrange $inlist 0 end-1]
    } else {
	set pagemarker {}
    }

    set re ([lindex $idxlist $i])sh
    foreach page $inlist {
	while 1 {
	    if {!$done} {
		set found [regsub $re $page ([lindex $idxrepl $i])sh page]
		if {$found} {
		    set idxused 1
		} elseif {$idxused} {
		    if {[incr i] == [llength $idxlist]} {
			set done 1
		    } else {
			set re ([lindex $idxlist $i])sh
			set idxused 0
		    }
		    continue
		}
	    }
	    puts -nonewline $out $page$pagemarker
	    break
	}
    }
}

fcopy $in $out