- NSIS Discussion
- TextReplace plugin
Archive: TextReplace plugin
Instructor
5th January 2006 21:05 UTC
TextReplace plugin
Features:
- Fast replacement in text file
- Case sensitive/insensitive replacement
- Supports strings and pointers to the buffer
- If no changes possible, output file will be untouched
- Checks before replacement, if input file is a binary file
Rough estimate perfomance info:
50 Mb text file with 4.000.000 strings to replace processed
with option "/S=1" 4 sec, with option "/S=0" 37 sec
"TextReplace" plugin v1.0
Removed attachment 18 July 2006 - Afrow UK. See last post for latest version.
zeeh3
6th January 2006 10:29 UTC
Great and useful plugin, thanks a lot Instructor :)
Instructor
6th January 2006 11:00 UTC
You are welcome :)
Instructor
14th January 2006 09:45 UTC
New: "FindInFile" only search in file without replacements
New: "ReplaceInFile" options:
/AI=[1|0] -Copy attributes from the InputFile to OutputFile or not
/AO=[0|1] -Change OutputFile attributes to normal before writting or not
"TextReplace" plugin v1.1
whaccybanany
26th January 2006 10:55 UTC
Thanks for the great plugin Instructor!
I'm a bit confused to what the options are.
If AI is true, does that mean read/write/execute/other attributes of the InputFile will be kept the same when written out?
If AO is true, does it mean change attributes to some standard?
Instructor
26th January 2006 11:24 UTC
If AI is true, does that mean read/write/execute/other attributes of the InputFile will be kept the same when written out?
Yes
If AO is true, does it mean change attributes to some standard?
/AO=0 - Don't change OutputFile attributes (error "-9" possible)
-9 can't open output file for writting
For example:
If "/AO=0" and OutputFile has read-only attribute, then error -9 will be returned.
If "/AO=1" and OutputFile has read-only attribute, then no error will be returned.
whaccybanany
26th January 2006 11:56 UTC
Thanks for the quick reply.
That clears things up!
NHOCSUNG
28th January 2006 16:14 UTC
Hi Instructor can i get the source code please
I'm taking C++ now. Actually this is first course, so i need something to practice, you know.
Instructor
28th January 2006 17:09 UTC
Hi Instructor can i get the source code please
Archive contains binary and source code.
NHOCSUNG
28th January 2006 20:20 UTC
I didn't see it before....
Instructor
27th May 2006 11:53 UTC
Fixed: Now plugin doesn't read all file if it is binary.
Updated: "StrFunc.h" to v1.7
Updated: "ConvFunc.h" to v1.7
Update from previous versions:
- Insert line in script:
!include "TextReplace.nsh"
- Replace:
textreplace::FindInFile -> ${textreplace::FindInFile} ...
- Replace:
.r0 -> $0, .r1 -> $1 ... .R0 -> $R0, .R1 -> $R1 ...
"TextReplace" plugin v1.2
zeeh3
30th June 2006 20:32 UTC
Instructor, there is a bug in the plugin that makes files bigger than 128 bytes readonly|hidden|system|archive|temporary|offline|not_content_indexed.
Instructor
1st July 2006 05:13 UTC
Don't understand. If file size equal to 128 then after processing it attributes changed to readonly|hidden|system|archive|temporary|offline|not_content_indexed? And what plugin parameters you use?
zeeh3
1st July 2006 10:55 UTC
Yes, I am just using TextReplaceTest.nsi that comes with the plugin. Attached are the input.txt and output.txt files and the exe.
Instructor
1st July 2006 12:53 UTC
Fixed: Buffer overflow (thanks zeeh3)
"TextReplace" plugin v1.3
Instructor
14th July 2006 05:57 UTC
Fixed: crash when using long string (> 1024) with 8192 special build (thanks zeeh3)
"TextReplace" plugin v1.4
Instructor
14th July 2006 16:56 UTC
Forgot to remove debug MessageBox in release.
"TextReplace" plugin v1.4
tinjaw
17th October 2006 19:10 UTC
Thank you very much. You plugin just saved me much valuable time.
Instructor
29th October 2006 00:12 UTC
Changed: algorithm optimized - replacement speed increased.
"TextReplace" plugin v1.5
Chunkster
8th April 2008 17:59 UTC
Replace one line with two lines
I am trying to replace one line of a text file with two lines, using TextReplace. The arrangement of info in the file looks something like this -
Line 1
Line 2
Line 3
Line 4
I am searching for "Line 3" and want to replace it with
Line 3a
Line 3b
for a final file arrangement that looks like -
Line 1
Line 2
Line 3a
Line 3b
Line 4
Here is the actual TextReplace line
${textreplace::ReplaceInFile} "$PROGRAMFILES\OpenOffice.org 2.4\share\dict\ooo\dictionary.lst" "$PROGRAMFILES\OpenOffice.org 2.4\share\dict\ooo\dictionary.lst" "THES en US th_en_US_v2" "THES en US th_en_US_v2 \r DICT en US en_US_OpenMedSpel \r" "/S=1" $0
This of course, does not produce the desired output. It looks like this
Line 1
Line 2
Line 3a \r Line 3b \r
Line 4
Any help with this problem would be appreciated. Thanks.
Instructor
9th April 2008 07:44 UTC
\r -> $\r$\n
nduboc
12th May 2009 15:17 UTC
Hi,
What license the TextReplace v1.5 plugin is distributed under ? I can't find any license notice in the zip file or
the home page (http://nsis.sourceforge.net/TextReplace_plugin).
Thanks.
Instructor
12th May 2009 16:59 UTC
nduboc
NSIS license.
nduboc
13th May 2009 15:11 UTC
Originally posted by Instructor
nduboc
NSIS license.
You mean the zlib/libpng license as stated on the License
page of the NSIS web site, right ?
Yathosho
13th October 2011 13:23 UTC
saw your update of the locate plugin, so i was wondering if there are plans for a unicode version of textreplace
threexk
21st January 2012 08:17 UTC
I get "Invalid command: ${textreplace::ReplaceInFile}" when trying to call TextReplace commands. The only way I could get it to work was to use "TextReplace::_ReplaceInFile", but you're probably not supposed to call the commands like that. What is the proper way to call TextReplace commands?
threexk
21st January 2012 09:02 UTC
Originally posted by threexk
I get "Invalid command: ${textreplace::ReplaceInFile}" when trying to call TextReplace commands. The only way I could get it to work was to use "TextReplace::_ReplaceInFile", but you're probably not supposed to call the commands like that. What is the proper way to call TextReplace commands?
The problem was I needed to have "!include "TextReplace.nsh".
${textreplace::ReplaceInFile} has the disadvantage of requiring all six parameters, whereas TextReplace::_ReplaceInFile lets you provide less than six with the unspecified parameters taking default values, so I am sticking with the latter.