Globally replace text in several files: Difference between revisions
m (mark as task) |
(→Tcl: Added implementation) |
||
Line 9: | Line 9: | ||
=={{header|Perl}}== |
=={{header|Perl}}== |
||
⚫ | |||
⚫ | |||
=={{header|PureBasic}}== |
=={{header|PureBasic}}== |
||
Line 52: | Line 51: | ||
GRTISF(Xyz$(), "Goodbye London", "Hello New York")</pre> |
GRTISF(Xyz$(), "Goodbye London", "Hello New York")</pre> |
||
=={{header|Tcl}}== |
|||
{{tcllib|fileutil}} |
|||
<lang tcl>package require Tcl 8.5 |
|||
package require fileutil |
|||
# Parameters to the replacement |
|||
set from "Goodbye London!" |
|||
set to "Hello New York!" |
|||
# Which files to replace |
|||
set fileList [list a.txt b.txt c.txt] |
|||
# Make a command fragment that performs the replacement on a supplied string |
|||
set replacementCmd [list string map [list $from $to]] |
|||
# Apply the replacement to the contents of each file |
|||
foreach filename $fileList { |
|||
fileutil::updateInPlace $filename $replacementCmd |
|||
}</lang> |
|||
[[Category: String manipulation]] |
[[Category: String manipulation]] |
Revision as of 08:29, 13 November 2010
You are encouraged to solve this task according to the task description, using any language you may know.
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.
J
If files
is a variable with the desired list of file names:
<lang j>require'strings' (1!:2~rplc&('Goodbye London!';'Hello New York!')@(1!:1))"0 files</lang>
Perl
<lang bash>perl -pi -e "s/Goodbye London\!/Hello New York\!/g;" a.txt b.txt c.txt</lang>
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")
Tcl
<lang tcl>package require Tcl 8.5 package require fileutil
- Parameters to the replacement
set from "Goodbye London!" set to "Hello New York!"
- Which files to replace
set fileList [list a.txt b.txt c.txt]
- Make a command fragment that performs the replacement on a supplied string
set replacementCmd [list string map [list $from $to]]
- Apply the replacement to the contents of each file
foreach filename $fileList {
fileutil::updateInPlace $filename $replacementCmd
}</lang>