Replace text in a file with the contents of other file
From NSIS Wiki
Jump to navigationJump to search
Author: Instructor (talk, contrib) |
This code was superseded by TextReplace_plugin
Description
Written for Megiddo_Guest in this forum thread. Script uses headers (for NSIS 2.07 and below).
Script Code
Name "Output" OutFile "Output.exe" !include "TextFunc.nsh" !insertmacro LineFind !include "WordFunc.nsh" !insertmacro WordFind Var PMEMORY Var SIZE Section StrCpy $0 "C:\Input.txt" #File to replace in StrCpy $1 "C:\Output.txt" #File result StrCpy $R0 "ReplaceIt" #Replace string StrCpy $R1 "C:\Source.txt" #File replace with content StrCpy $R2 "0" #Changes to made ("0" - replace all) StrCpy $R3 "0" #[Don't change it] ${LineFind} "$0" "$1" "1:-2 -1" "LineFindCallback" IfErrors 0 +2 MessageBox MB_OK "Error" MessageBox MB_OK "Changes: $R3" SectionEnd Function LineFindCallback StrCmp $PMEMORY '0' end begin: ${WordFind} "$R9" "$R0" "E+1{" $1 IfErrors freemem FileWrite $R4 "$1" StrCmp $PMEMORY '' 0 write FileOpen $1 $R1 a FileSeek $1 0 END $SIZE System::Alloc $SIZE Pop $PMEMORY FileSeek $1 0 SET System::Call 'kernel32::ReadFile(i r1, i $PMEMORY, i $SIZE, t.,)' FileClose $1 write: IntOp $R3 $R3 + 1 System::Call 'kernel32::WriteFile(i R4, i $PMEMORY, i $SIZE, t.,)' ${WordFind} "$R9" "$R0" "+1}" $R9 StrCmp $R3 $R2 0 begin freemem: StrCmp $PMEMORY '' end StrCmp $R7 -1 +2 StrCmp $R3 $R2 0 end System::Free $PMEMORY StrCpy $PMEMORY 0 end: Push $0 FunctionEnd