Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Find and Replace in huge text file
Message
 
 
To
28/09/2005 13:35:50
General information
Forum:
Visual FoxPro
Category:
Other
Miscellaneous
Thread ID:
01053411
Message ID:
01054080
Views:
31
Yes, you are right but I need to do 2 other changes to the code
1 - Reduce No. at MAXBUFFER variable to 65530 or so
2 - Remove MAXBUFFER from FWRITE statement below.


>If the replaced text is different in size than the find text, do you think it will work fine.
>Ex. Find String = "AD00" & Replace String = "RR889"
>
>>>Try this (modified from Cetin code) for testing if the replaced string is being split during FREADs:
>>>
>>>
>>>#DEFINE MAXBUFFER 65536
>>>lhIn = FOPEN(lcFileIn)
>>>lhOut = FCREATE(lcFileOut)
>>>DO WHILE NOT FEOF(m.lhIn )
>>> lcBuffer = FREAD(m.lhIn, MAXBUFFER)
>>> DO CASE
>>> CASE RIGHT(lcBuffer,3) = 'AD0'
>>> FSEEK(m.lhIn, -3, 1)
>>> lcBuffer = LEFT(lcBuffer,LEN(lcBuffer)-3)
>>> CASE RIGHT(lcBuffer,2) = 'AD'
>>> FSEEK(m.lhIn, -2, 1)
>>> lcBuffer = LEFT(lcBuffer,LEN(lcBuffer)-2)
>>> CASE RIGHT(lcBuffer,1) = 'A'
>>> FSEEK(m.lhIn, -1, 1)
>>> lcBuffer = LEFT(lcBuffer,LEN(lcBuffer)-1)
>>> ENDCASE
>>> FWRITE(m.lhOut,STRTRAN(lcBuffer,'AD00','BR77'),MAXBUFFER)
>>>ENDDO
>>>FCLOSE(m.lhIn)
>>>FCLOSE(m.lhOut)
>>
>>I didn't understand what Fabio meant either. Your code is nicer and faster than mine:) It processed a 138+Mb file in 14 secs on my box (Athlon 2500+,512Mb onboard 64Mbshared mem VGA).
>>Cetin
>
>I don't see where the size of the replace string would be of concern -- the FREAD pointer would not change for the input file since it is solely dependent on the string to be found (adjustments if possible matches at end of FREAD string). The replaced string would be in the output file and does not affect the pointer to the file position in the input file.
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform