Skip to content
⌘ NSIS Forum Archive

TextReplace plugin

30 posts

Instructor#

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.
Instructor#
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#
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#
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.
Guest#
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#
Hi Instructor can i get the source code please
Archive contains binary and source code.
Instructor#
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#
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#
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#
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#
Fixed: Buffer overflow (thanks zeeh3)


"TextReplace" plugin v1.3
Instructor#
Fixed: crash when using long string (> 1024) with 8192 special build (thanks zeeh3)


"TextReplace" plugin v1.4
Instructor#
Forgot to remove debug MessageBox in release.


"TextReplace" plugin v1.4
Instructor#
Changed: algorithm optimized - replacement speed increased.


"TextReplace" plugin v1.5
Chunkster#
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.
nduboc#
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.
nduboc#
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#
saw your update of the locate plugin, so i was wondering if there are plans for a unicode version of textreplace
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?
threexk#
Originally Posted by threexk View Post
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.
ggroup#
Hi there
When I use the plug-in, the message "Invalid command: ${textreplace::ReplaceInFile}" appears after the command "!Include" TextReplace.nsh "wrote!
taa1#
Hi,

I installed NSIS 3.01 and then ran install.exe after extracting textreplace.zip v1.5. When I go to compile a script, I get:

!insertmacro: textreplace::ReplaceInFile
Plugin not found, cannot call textreplace::_ReplaceInFile
Error in macro textreplace::ReplaceInFile on macroline 1

The plugin appears to have installed correctly into Plugins and Include:

C:\Program Files (x86)\NSIS>dir plugins\Text*

Directory of C:\Program Files (x86)\NSIS\plugins

07/09/2017 07:42 PM 5,120 TextReplace.dll
1 File(s) 5,120 bytes

C:\Program Files (x86)\NSIS>dir include\Text*

Directory of C:\Program Files (x86)\NSIS\include

09/06/2013 04:48 PM 24,348 TextFunc.nsh
07/09/2017 07:42 PM 1,125 TextReplace.nsh
2 File(s) 25,473 bytes

When I start compiling a script and NSIS is listing the plugins, textreplace isn't one of them.

I also tried manually copying TextReplace.dll and TextReplace.nsh from the extracted zip file to the Plugins and Include directories respectively. Same result.

How do I get NSIS to recognize the plugin?
Anders#
It tells you what the problem is "Plugin not found". Just take a look in your C:\Program Files (x86)\NSIS\plugins directory and you should be able to figure out why it is not working...