T1=TIME() Clear SET DELETED ON lcStr = filetostr('1021165156.ps') lnPOS = At("%%Pages:",lcStr) lcPageCount = alltrim(substr(lcStr, lnPOS, 12)) lnPageCount = VAL(STRTRAN(lcPageCount,'%%Pages:','')) IF lnPageCount>2 DIMENSION occoupiedrange(lnPageCount) DIMENSION unoccoupiedrange(lnPageCount) Local lcFile, lcText m.lcFile = [1021165156.ps] Create Cursor Dummy (PS c(254), pos i,pageno n(2)) Append From (m.lcFile) Sdf SCAN IF Getwordnum(PS, Getwordcount(PS)) = [x] .OR. ; Getwordnum(PS, Getwordcount(PS)) = [y] .OR. ; Getwordnum(PS, Getwordcount(PS)) = [L] .OR. ; Getwordnum(PS, Getwordcount(PS)) = [w] m.lcText = Getwordnum(PS, Getwordcount(PS) - 1) && The second last word IF Len(Chrtran(m.lcText, [1234567890], [])) = 0 && lcText contains only digits Replace pos With Val(m.lcText) Endif ENDIF ENDSCAN FOR I= 1 TO lnPageCount CURTEXT='%%Page: '+ALLTRIM(STR(I))+' '+ALLTRIM(STR(I)) NeXTTEXT='%%Page: '+ALLTRIM(STR(I+1))+" "+ALLTRIM(STR(I+1)) LOCATE FOR ALLTRIM(PS)=curtext SCAN WHILE ALLTRIM(ps)<>nexttext OR EOF()=.T. REPLACE pageno WITH I ENDSCAN SELECT MIN(Pos) FROM Dummy WHERE Pageno=I AND Pos>20 INTO ARRAY X SELECT MAX(Pos) FROM Dummy WHERE Pageno=I INTO ARRAY Y STORE Y-X+1 TO Occoupiedrange(I) STORE (x) TO unoccoupiedrange(I) STORE (x-20) TO unoccoupiedrange(I) ENDFor FOR I=2 TO (lnPageCount-1) Blank=unoccoupiedrange(I) Filled=occoupiedrange(I+1) DO WHILE Blank>=Filled NEXTTEXT='%%Page: '+ALLTRIM(STR(I+1))+" "+ALLTRIM(STR(I+1)) LOCATE FOR ps=NeXTTEXT Skip-1 Replace ps WITH NeXTTEXT SKIP Prefixmul= ALLTRIM(STR((Occoupiedrange(I)/68.7),18,2)) Replace ps WITH '0 -72 &Prefixmul mul translate' WAIT WINDOW I Filled=Filled+occoupiedrange(I+1) && Generates Error >WAIT WINDOW I I=I+1 ENDDO ENDFOR ENDIF SELECT Dummy set textmerge On SET TEXTMERGE TO myfile.ps noshow scan \\ << tRIM(pS) >> \ endscan set textmerge To set textmerge off T2=TIME() WAIT WINDOW T2 WAIT WINDOW t1Sample File Used for the above code can be downloaded from