LPARAMETERS cInFile, cOutFile, cFind, cReplace LOCAL cVar, aPos[1], nCtr, nOccurs, nHndIn, nHndOut, nEnd m.nHnd = 0 m.nHndOut = 0 m.cVar = FILETOSTR(m.cInFile) m.nOccurs = OCCURS(m.cFind,m.cVar) FOR m.nCtr = 1 TO m.nOccurs aPos[m.nCtr] = IIF(m.nCtr > 1,; AT(m.cFind,m.cVar,m.nCtr) - aPos[m.Ctr - 1], ; AT(m.cFind,m.cVar,m.nCtr) - LEN(m.cFind)) ENDFOR DO WHILE m.nHndOut < 1 m.nHndOut = FCREATE(m.cOutFile) ENDFOR DO WHILE m.nHndIn < 1 m.nHndIn = FOPEN(m.cInFile) ENDDO m.nEnd = FSEEK(m.nHndIn,0,2) = FSEEK(m.nHndIn,0,o) = FWRITE(m.nHndOut,FREAD(m.nHndIn,LEN(m.cFind)),LEN(m.cFind)) FOR m.nCtr = 1 TO m.nOccurs = FWRITE(m.nHndOut,STRTRAN(FREAD(m.nHndIn,aPos[m.nCtr]),m.cFind,m.cReplace)aPos[m.nCtr]) ENDFOR = FWRITE(m.nHndOut,FREAD(m.nHndIn,m.nEnd-FSEEK(m.nHndIn,0,1)),m.nEnd-FSEEK(m.nHndIn,0,1)) = FCLOSE(m.nHndIn) = FCLOSE(m.nHndOut)Of course, it would only work if the strings being replaced were the same length.