FileReadFromEnd: Difference between revisions
From NSIS Wiki
Jump to navigationJump to search
m (Adding new author and category links.) |
Instructor (talk | contribs) No edit summary |
||
(One intermediate revision by the same user not shown) | |||
Line 1: | Line 1: | ||
{{PageAuthor|Instructor}} | {{PageAuthor|Instructor}} | ||
{{User:Instructor/Headers/Template}} | |||
== Function Description == | |||
<highlight-nsis> | |||
<highlight-nsis> | |||
____________________________________________________________________________ | ____________________________________________________________________________ | ||
Line 38: | Line 35: | ||
Note: | Note: | ||
-Error flag if input file isn't exists | -Error flag if input file isn't exists | ||
</highlight-nsis> | |||
Example1: | <b>Example1:</b> | ||
Section | <highlight-nsis>Section | ||
${FileReadFromEnd} "C:\a.log" "Example1" | ${FileReadFromEnd} "C:\a.log" "Example1" | ||
Line 55: | Line 53: | ||
Push $0 | Push $0 | ||
FunctionEnd | FunctionEnd | ||
</highlight-nsis> | |||
Example2 (Reverse text file): | <b>Example2 (Reverse text file):</b> | ||
Section | <highlight-nsis>Section | ||
GetTempFileName $R0 | GetTempFileName $R0 | ||
FileOpen $R1 $R0 w | FileOpen $R1 $R0 w | ||
Line 79: | Line 78: | ||
Push $0 | Push $0 | ||
FunctionEnd | FunctionEnd | ||
</highlight-nsis> | |||
== Function Code == | |||
<highlight-nsis> | |||
Function FileReadFromEnd | Function FileReadFromEnd | ||
!define FileReadFromEnd `!insertmacro FileReadFromEndCall` | !define FileReadFromEnd `!insertmacro FileReadFromEndCall` |
Latest revision as of 11:29, 30 November 2005
Author: Instructor (talk, contrib) |
Page for NSIS 2.07 and below users
You can use the latest version of headers (recommended) or the following function code (put the function code in your script before calling it)
Function Description
____________________________________________________________________________ FileReadFromEnd v1.2 ____________________________________________________________________________ Read text file from end line by line. Syntax: ${FileReadFromEnd} "[File]" "Function" "[File]" ; Input text file "Function" ; Callback function Function "Function" ; $9 current line ; $8 current line number ; $7 current line negative number ; $R0-$R9 are not used (save data in them). ; ... Push $var ; If $var="StopFileReadFromEnd" Then exit from function FunctionEnd Note: -Error flag if input file isn't exists
Example1:
Section ${FileReadFromEnd} "C:\a.log" "Example1" IfErrors 0 +2 MessageBox MB_OK "Error" SectionEnd Function Example1 MessageBox MB_OKCANCEL '"Line"=[$9]$\n "#"=[$8]$\n "-#"=[$7]' IDOK +2 StrCpy $0 StopFileReadFromEnd Push $0 FunctionEnd
Example2 (Reverse text file):
Section GetTempFileName $R0 FileOpen $R1 $R0 w ${FileReadFromEnd} "C:\a.log" "Example2" FileClose $R1 IfErrors 0 +2 MessageBox MB_OK "Error" IDOK +2 Exec '"notepad.exe" "$R0"' SectionEnd Function Example2 StrCmp $7 -1 0 +5 StrCpy $1 $9 1 -1 StrCmp $1 '$\n' +3 StrCmp $1 '$\r' +2 StrCpy $9 '$9$\r$\n' FileWrite $R1 "$9" Push $0 FunctionEnd
Function Code
Function FileReadFromEnd !define FileReadFromEnd `!insertmacro FileReadFromEndCall` !macro FileReadFromEndCall _FILE _FUNC Push $0 Push `${_FILE}` GetFunctionAddress $0 `${_FUNC}` Push `$0` Call FileReadFromEnd Pop $0 !macroend Exch $1 Exch Exch $0 Exch Push $7 Push $8 Push $9 ClearErrors StrCpy $7 -1 StrCpy $8 0 IfFileExists $0 0 error FileOpen $0 $0 r IfErrors error FileRead $0 $9 IfErrors +4 Push $9 IntOp $8 $8 + 1 goto -4 FileClose $0 nextline: StrCmp $8 0 end Pop $9 Push $1 Push $7 Push $8 Call $1 Pop $0 Pop $8 Pop $7 Pop $1 IntOp $7 $7 - 1 IntOp $8 $8 - 1 IfErrors error StrCmp $0 'StopFileReadFromEnd' clearstack nextline error: SetErrors clearstack: StrCmp $8 0 end Pop $9 IntOp $8 $8 - 1 goto clearstack end: Pop $9 Pop $8 Pop $7 Pop $1 Pop $0 FunctionEnd