LOCAL liCount, liIndex, liSeek,lhIn,lhOut,lcRow,liCR,liLF LOCAL ARRAY laRow(1) #DEFINE CRLF CHR(13)+CHR(10) * Open In file buffered readonly (lhIN) * Open Out file buffered Writeonly (lhOUT) STORE 0 TO liCount, liIndex, liSeek =FSEEK(lhIn,0) && Seek top DO WHILE !FEOF(lhIN) IF liCount=liIndex && If read buffer lcRow=FREAD(lhIN,245760) && read 240 KB IF EMPTY(lcRow) && If eof() EXIT ENDIF liCR=RAT(CHR(13),lcRow,2) && Find last enter (CR) liLF=RAT(CHR(10),lcRow,2) && Find last enter (LF) IF liCR=0 OR liLF=0 && If one liCR=RAT(CHR(13),lcRow,1) && Find last enter (CR) liLF=RAT(CHR(10),lcRow,1) && Find last enter (LF) ENDIF IF liCR>0 OR liLF>0 liSeek=liSeek+IIF(liCR+1=liLF,liCR+2,IIF(liCR>0,liCR+1,liLF+1))-1 =FSEEK(lhIN,liSeek) && Seek lcRow=LEFT(lcRow,IIF(liCR>0,liCR,liLF)-1) lcRow=IIF(liCR=0 OR liLF=0,STRTRAN(lcRow,IIF(liCR=0,CHR(13),CHR(10)),CRLF),lcRow) liCount=ALINES(laRow,lcRow) && Read rows liIndex=1 lcRow=laRow(liIndex) && First row ELSE STORE 0 TO liCount, liIndex ENDIF ELSE liIndex=liIndex+1 && Increment counter lcRow=laRow(liIndex) && Next row ENDIF * Any operation with lcRow * Write row =FPUT(lhOut,lcRow) ENDDO>(VFP 7 SP1 on Windows 2000 or Windows XP pro)