Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Find and Replace in huge text file
Message
 
 
À
28/09/2005 13:35:50
Information générale
Forum:
Visual FoxPro
Catégorie:
Autre
Divers
Thread ID:
01053411
Message ID:
01054080
Vues:
32
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.
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform