Manipulate text file by line: Difference between revisions

From NSIS Wiki
Jump to navigationJump to search
No edit summary
 
No edit summary
Line 1: Line 1:
<nowiki>Insert non-formatted text here</nowiki>
here is two function i wrote  
here is two function i wrote  
both search for whole line of text in a text file
both search for whole line of text in a text file

Revision as of 03:34, 4 October 2006

Insert non-formatted text here here is two function i wrote both search for whole line of text in a text file if match was found (only the first line which match) either add one line after it or replace it with another I use this to configure some .ini file

----------------------------------------
cfini.nsh
Functions for configurating ini files
!include "cfini.nsh"
-----------------------------------------
-----------------------------------------
Desc. add one line after the first instance
of "something\r\n" is found
-----------------------------------------
how to use
Push "line search" #-- line to be found
Push "line added" #-- line to be added
Push "C
\XXX\XXX.ini" #-- file to be searched in

Function INIAddLine

 Exch $0    ;file to replace in
 Exch 
 Exch $1    ;line to be added
 Exch 
 Exch 2
 Exch $2    ;line to be search
 Exch 2
 Push $R0   ;save data,then use to open file
 Push $R1   ;save data,then use to temp file
 Push $R2   ;save data,then use to tmpstring
 
 ClearErrors
 
 FileOpen $R0 "$0" a
 FileOpen $R1 temp.ini w
   FileRead $R0 $R2
   IfErrors +11
search for a string
   StrCmp "$2" $R2 +4 0
   StrCmp "$2$\r$\n" "$R2" +6 0
not found yet
   Filewrite $R1 $R2
   GOTO -5
add a line
   Filewrite $R1 $R2
   Filewrite $R1 "$\r$\n$1"
   GOTO -8
   Filewrite $R1 $R2
   Filewrite $R1 "$1$\r$\n"
   GOTO -11
done
   FileClose $R0
   FileClose $R1
 ;use the temp to replace the original file
 Delete "$0"
 CopyFiles temp.ini "$0"
 Delete "$OUTDIR\temp.ini"
 POP $R2  ;restore
 POP $R1  ;restore
 POP $R0  ;restore
 POP $0   
 POP $1
 POP $2

FunctionEnd

-----------------------------------------
Desc. replace one line after the first instance
of "something\r\n" is found
-----------------------------------------
how to use
Push "line search" #-- line to be found
Push "line replacing" #-- line to be added
Push "C
\XXX\XXX.ini" #-- file to be searched in

Function INIChgLine

 Exch $0    ;file to replace in
 Exch 
 Exch $1    ;line to be changed
 Exch 
 Exch 2
 Exch $2    ;line to be search
 Exch 2
 Push $R0   ;for open file
 Push $R1   ;for temp file
 Push $R2
 ClearErrors
 FileOpen $R0 "$0" a
 FileOpen $R1 temp.ini w
   FileRead $R0 $R2
   IfErrors +9
search for a string
   StrCmp "$2" $R2 +4 0
   StrCmp "$2$\r$\n" $R2 +5 0
not found yet
   Filewrite $R1 $R2
   GOTO -5
change a line
   Filewrite $R1 "$1"
   GOTO -7
   Filewrite $R1 "$1$\r$\n"
   GOTO -9
done
   FileClose $R0
   FileClose $R1
 ;use the temp to replace the original file
 Delete "$0"
 CopyFiles temp.ini "$0"
 Delete "$OUTDIR\temp.ini"
 POP $R2
 POP $R1
 pop $R0
 POP $0   
 POP $1
 POP $2

FunctionEnd