Article ID: 136284
Article Last Modified on 12/3/2003
FUNCTION BLOCKTEST
PARAMETER lnTempsize
CLEAR
IF lnTempsize>0
IF lnTempsize<=32
lnTempsize=lnTempsize*512
ENDIF
lnTempblk=0
lcFilename=LEFT(DBF(),LEN(DBF())-4)
lnBlksize=VAL(SYS(2012))
USE
lnHandle=FOPEN(lcFilename+".FPT")
IF lnHandle>0
lnFilesize=FSEEK(lnHandle,0,2)
=FSEEK(lnHandle,0)
lcByte=FREAD(lnHandle,8)
lnBlknum=ASC(SUBSTR(lcByte,4,1))+(ASC(SUBSTR(lcByte,3,1))*256)+;
(ASC(SUBSTR(lcByte,2,1))*256*256)+;
(ASC(SUBSTR(lcByte,1,1))*256*256*256)
? "Current Memo Stats"
? " Blocksize "+ALLTRIM(STR(lnBlksize))
? " # of blocks "+ALLTRIM(STR(lnBlknum))
? " Filesize "+ALLTRIM(STR(lnFilesize))+" Bytes"
lnBlkend=0
lni=1
DO WHILE lnBlkend<512
lnBlkend=lni*lnBlksize
lni=lni+1
ENDDO
=FSEEK(lnHandle,lnBlkend+4)
lnRec=0
FOR lni=lni TO lnBlknum
lcByte=FREAD(lnHandle,4)
=FSEEK(lnHandle,lnBlksize-4,1)
IF (lnBlksize*lni)>lnBlkend
lnx=ASC(SUBSTR(lcByte,4,1))+:
(ASC(SUBSTR(lcByte,3,1))*256)+;
(ASC(SUBSTR(lcByte,2,1))*256*256)+;
(ASC(SUBSTR(lcByte,1,1))*256*256*256)+8
lnRec=lnRec+1
lnk=INT((lnx-1)/lnBlksize)
lni=lni+lnk
lnTempblk=lnTempblk+INT(lnx/lnTempsize)+;
IIF(MOD(lnx,lnTempsize)=0,0,1)
=FSEEK(lnHandle,(lnBlksize*lnk),1)
ENDIF
ENDFOR
=FCLOSE(lnHandle)
lnTempblk=lnTempblk+INT(512/lnTempsize)+;
IIF(MOD(512,lnTempsize)=0,0,1)
lnTempfile=lnTempsize*lnTempblk
?
? "Requested Memo Stats"
? " Blocksize "+ALLTRIM(STR(lnTempsize))
? " # of blocks "+ALLTRIM(STR(lnTempblk))
? " Filesize "+ALLTRIM(STR(lnTempfile))+" Bytes"
?
? "Savings: "+ALLTRIM(STR(lnFilesize-lnTempfile))+" Bytes"
USE &lcFilename
IF lnRec>RECCOUNT()
?
? ALLTRIM(str(lnrec-reccount()))+;
" disconneted records in memo file."
? "Please PACK MEMO and run this command again"
ENDIF
RETURN lnTempfile
ENDIF
ENDIF
SET PROCEDURE TO LOWLEVEL.PRG USE C:\FPW26\SAMPLE\ORGANIZE\DBFS\RESTAURS =BLOCKTEST(64)Note that if the current blocksize is 64, there will be no savings in creating a new file with the same blocksize.
=BLOCKTEST(32) =BLOCKTEST(35) =BLOCKTEST(40)
SET BLOCKSIZE TO 40 COPY TO TEMP USE ERASE RESTAURS.DBF ERASE RESTAURS.FPT RENAME TEMP.DBF TO RESTAURS.DBF RENAME TEMP.FPT TO RESTAURS.FPT
Additional query words: VFoxWin FoxWin FoxDos
Keywords: KB136284