Globally replace text in several files: Difference between revisions
Content added Content deleted
(Initial page created) |
(Added PureBasic) |
||
Line 4: | Line 4: | ||
perl -pi -e "s/Goodbye London\!/Hello New York\!/g;" a.txt b.txt c.txt |
perl -pi -e "s/Goodbye London\!/Hello New York\!/g;" a.txt b.txt c.txt |
||
=={{header|PureBasic}}== |
|||
<lang PureBasic>Procedure GRTISF(List File$(), Find$, Replace$) |
|||
Protected Line$, Out$, OutFile$, i |
|||
ForEach File$() |
|||
fsize=FileSize(File$()) |
|||
If fsize<=0: Continue: EndIf |
|||
If ReadFile(0, File$()) |
|||
i=0 |
|||
; |
|||
; generate a temporary file in a safe way |
|||
Repeat |
|||
file$=GetTemporaryDirectory()+base$+"_"+Str(i)+".tmp" |
|||
i+1 |
|||
Until FileSize(file$)=-1 |
|||
i=CreateFile(FileID, file$) |
|||
If i |
|||
; Copy the infile to the outfile while replacing any needed text |
|||
While Not Eof(0) |
|||
Line$=ReadString(0) |
|||
Out$=ReplaceString(Line$,Find$,Replace$) |
|||
WriteString(1,Out$) |
|||
Wend |
|||
CloseFile(1) |
|||
EndIf |
|||
CloseFile(0) |
|||
If i |
|||
; If we made a new file, copy it back. |
|||
CopyFile(file$, File$()) |
|||
DeleteFile(file$) |
|||
EndIf |
|||
EndIf |
|||
Next |
|||
EndProcedure</lang> |
|||
Implementation |
|||
<pre>NewList Xyz$() |
|||
AddElement(Xyz$()): Xyz$()="C:\\a.txt" |
|||
AddElement(Xyz$()): Xyz$()="C:\\b.txt" |
|||
AddElement(Xyz$()): Xyz$()="D:\\c.txt" |
|||
GRTISF(Xyz$(), "Goodbye London", "Hello New York")</pre> |
Revision as of 15:05, 30 October 2010
The task is to replace every occuring instance of a piece of text in a group of text files with another one. For this task we want to replace the text "Goodbye London!" with "Hello New York!" for a list of files.
Perl
perl -pi -e "s/Goodbye London\!/Hello New York\!/g;" a.txt b.txt c.txt
PureBasic
<lang PureBasic>Procedure GRTISF(List File$(), Find$, Replace$)
Protected Line$, Out$, OutFile$, i ForEach File$() fsize=FileSize(File$()) If fsize<=0: Continue: EndIf If ReadFile(0, File$()) i=0 ; ; generate a temporary file in a safe way Repeat file$=GetTemporaryDirectory()+base$+"_"+Str(i)+".tmp" i+1 Until FileSize(file$)=-1 i=CreateFile(FileID, file$) If i ; Copy the infile to the outfile while replacing any needed text While Not Eof(0) Line$=ReadString(0) Out$=ReplaceString(Line$,Find$,Replace$) WriteString(1,Out$) Wend CloseFile(1) EndIf CloseFile(0) If i ; If we made a new file, copy it back. CopyFile(file$, File$()) DeleteFile(file$) EndIf EndIf Next
EndProcedure</lang> Implementation
NewList Xyz$() AddElement(Xyz$()): Xyz$()="C:\\a.txt" AddElement(Xyz$()): Xyz$()="C:\\b.txt" AddElement(Xyz$()): Xyz$()="D:\\c.txt" GRTISF(Xyz$(), "Goodbye London", "Hello New York")