Sort String 2: Difference between revisions

From NSIS Wiki
Jump to navigationJump to search
m (Wikipedia python library)
 
m (Updated author and download links, and changed format of some pages.)
Line 89: Line 89:
-Stu
-Stu


Page author: Afrow UK
Page author: [[User:Afrow UK|Afrow UK]]

Revision as of 12:36, 23 April 2005

Description

This is a re-written version of the String Sort function. This has a new part to it which is not in the previous function (String Sort 1). Note: Words are referred to as 'chunks'

Usage

Push 4 ; get text after ''4th'' chunk from string end
 Push 2 ; get ''2'' chunks before the 4th
  Push "Hello all, ''I am'' Afrow UK!!!" ; input string
    Call AdvStrSort
  Pop $R0

$R0 will now be: "I am"

Note: You can also Push higher chunk counts than there actually are in the string, and nothing will go wrong or be affected. e.g.

Usage 2

Push 10 ; get text after ''10th'' chunk from string end
 Push 2 ; get ''2'' chunks before the 10th
  Push "$R1" ; input string (unknown string, but has spaces)
    Call AdvStrSort
  Pop $R0

$R0 will now be the first two chunks of the string, even though there could have been only 5 chunks in the unknown string.

The Function

Function AdvStrSort
  Exch $0 ; input string
  Exch
  Exch $1 ; count to get part
  Exch
  Exch 2
  Exch $2 ; get ammount of chunks from end
  Exch 2
  Push $3
  Push $4
  Push $5
  Push $6
  Push $7
  StrCpy $0 " $0"
  StrCpy $3 0
  StrCpy $4 0
  loop:
    IntOp $3 $3 - 1
    StrCpy $6 $0 1 $3
    StrCmp $6 "" skip
    StrCmp $6 " " roger ; to change chunk seperators, edit this (" ")
    Goto loop
  roger:
    StrCpy $7 $0 "" $3
    IntOp $4 $4 + 1
    StrCmp $4 $2 0 loop
    StrCmp $1 $2 0 +3
    StrCpy $0 $7
    Goto end
  skip:
    StrCpy $4 0
    StrLen $5 $7
  top:
    IntOp $4 $4 + 1
  loop2:
    IntOp $5 $5 - 1
    StrCpy $3 $7 1 -$5
    StrCmp $3 "" end
    StrCmp $3 " " 0 loop2 ; to change chunk seperators, edit this too (" ")
    StrCmp $4 $1 0 top
    StrCpy $0 $7 -$5
  end:
    StrLen $1 $0
    IntOp $1 $1 - 1
    StrCpy $0 $0 $1 -$1
  Pop $7
  Pop $6
  Pop $5
  Pop $4
  Pop $3
  Pop $2 
  Pop $1
  Exch $0 ; output string
FunctionEnd

-Stu

Page author: Afrow UK