Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Find and Replace in huge text file
Message
From
28/09/2005 05:31:07
Cetin Basoz
Engineerica Inc.
Izmir, Turkey
 
 
To
28/09/2005 05:06:15
General information
Forum:
Visual FoxPro
Category:
Other
Miscellaneous
Thread ID:
01053411
Message ID:
01053801
Views:
33
>>>how appetizer :)
>>>
>>>TEXT to m.lcMyText noshow
>>>0AD0AD0012123AD0012312AD0012341AD00AD0010123
>>>12AD0012123AD0012312AD0012341AD00AD0010123AD0012123AD0012312AD0012341AD00AD001
>>>ENDTEXT
>>>lcTemp1 = Sys(2015)+'.txt'
>>>lcTemp2 = Sys(2015)+'.txt'
>>>
>>>************************** look here ***************************
>>>Strtofile(m.lcMytext+'A',m.lcTemp1)
>>>
>>>*!*	lcTemp1 = 'bigfile.txt' && 138Mb
>>>*!*	lcTemp1 = 'bigfile.tx2' && 26Mb
>>>*!*	lcTemp2 = 'bigfile.ou2'
>>>
>>>#Define MAXBUFFER 5
>>>
>>>lhIn = Fopen(m.lcTemp1)
>>>lhOut = Fcreate(m.lcTemp2)
>>>Set Step On
>>>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)
>>>Modify Comm (m.lcTemp2)
>>>Erase (m.lcTemp1)
>>>Erase (m.lcTemp2)
>>>
>>
>>Come on Fabio. You introduced a simple bug that you could easily fix with if..endif I'm sure. That still doesn't deny the fact that this code works. Stars from me to Greg.
>>Cetin
>
>
>I see some cloud on the stars
>
>CLEAR
>
>TEXT to m.lcMyText noshow
>0AD0AD0012123
>ENDTEXT
>lcTemp1 = Sys(2015)+'.txt'
>
>Strtofile(m.lcMytext,m.lcTemp1)
>? "TEXT    :",m.lcMytext at 20
>? "CORRECT :",STRTRAN(m.lcMytext,'AD0A','BR77') at 20
>
>#Define MAXBUFFER 5
>
>lhIn = Fopen(m.lcTemp1)
>bufferout = ''
>
>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
>  bufferout = bufferout + Strtran(lcBuffer,'AD0A','BR77')
>Enddo
>Fclose(m.lhIn)
>Erase (m.lcTemp1)
>? "result : ",bufferout at 20
>
You're trying to create clouds. We'd end up writing the whole code.
Do While Not Feof(m.lhIn )
  lcBuffer = Strtran(Fread(m.lhIn, MAXBUFFER),'AD0A','BR77')
  If Len(m.lcBuffer) = 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(m.lcBuffer,Len(m.lcBuffer)-2)
      Case Right(m.lcBuffer,1) = 'A'
        Fseek(m.lhIn, -1, 1)
        lcBuffer = Left(m.lcBuffer,Len(m.lcBuffer)-1)
    Endcase
  Endif
  Fwrite(m.lhOut,m.lcBuffer,MAXBUFFER)
Enddo
Are you testing me if I could make it bulletproof for all type of search and replace strings:) As I said if I ever need this really I'd create a FLL instead. I don't plan to find a bulletproof code.
Cetin
Çetin Basöz

The way to Go
Flutter - For mobile, web and desktop.
World's most advanced open source relational database.
.Net for foxheads - Blog (main)
FoxSharp - Blog (mirror)
Welcome to FoxyClasses

LinqPad - C#,VB,F#,SQL,eSQL ... scratchpad
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform