Archive: TextReplace plugin


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.


Great and useful plugin, thanks a lot Instructor :)


You are welcome :)


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


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?


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.

Thanks for the quick reply.

That clears things up!


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.


Hi Instructor can i get the source code please
Archive contains binary and source code.

I didn't see it before....


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


Instructor, there is a bug in the plugin that makes files bigger than 128 bytes readonly|hidden|system|archive|temporary|offline|not_content_indexed.


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?


Yes, I am just using TextReplaceTest.nsi that comes with the plugin. Attached are the input.txt and output.txt files and the exe.


Fixed: Buffer overflow (thanks zeeh3)


"TextReplace" plugin v1.3


Fixed: crash when using long string (> 1024) with 8192 special build (thanks zeeh3)


"TextReplace" plugin v1.4


Forgot to remove debug MessageBox in release.


"TextReplace" plugin v1.4


Thank you very much. You plugin just saved me much valuable time.


Changed: algorithm optimized - replacement speed increased.


"TextReplace" plugin v1.5


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.


\r -> $\r$\n


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
NSIS license.


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 ?

saw your update of the locate plugin, so i was wondering if there are plans for a unicode version of textreplace


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?


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.