scripting@wanadoo.nl




Flip_Numsep()

http://www.scriptlogic.com/kixtart/FunctionLibrary_FunctionList.aspx


actual FunctionLibrary list on 'Scriptlogic' site printer-friendly mirror of UDF topic on 'scripting@wanadoo.nl' site close
12 February 2002 Flip_Numsep()
AuthorW.M. Hinsch (New Mexico Mark)
Action Add or remove number separators (i.e. commas for U.S.) in a number.
SyntaxFlip_Numsep (String) 
Parameters
  • String (Required / String) This may be a number or a string. 
  • RemarksThis is one of a series of functions that detects what format a string/number is supplied in and inverts that format. Hence the "flip" name.
    The number separator is obtained from the international section of the registry. 
    ReturnsA string. 
    DependenciesFlip_Currency() will be used if numbers with a currency symbol are supplied to Flip_Numsep()
    Examples
    $str = "1,234,567.89" ?
    FOR $i = 12 TO 1 STEP -1
      $s = SubStr($str,$i)
      "Flip_NumSep(" + Chr(34) + $s + Chr(34) + ") = " + Chr(34) + Flip_NumSep($s) + Chr(34) ?
    NEXT
    $str = "1234567.890" ?
    FOR $i = 0 TO 11
      $s = SubStr($str,1,Len($str) - $i)
      "Flip_NumSep(" + Chr(34) + $s + Chr(34) + ") = " + Chr(34) + Flip_NumSep($s) + Chr(34) ?
    NEXT
    
    ; Console Output (Example)
    
    ;Flip_NumSep("9") = "9"
    ;Flip_NumSep("89") = "89"
    ;Flip_NumSep(".89") = ".89"
    ;Flip_NumSep("7.89") = "7.89"
    ;Flip_NumSep("67.89") = "67.89"
    ;Flip_NumSep("567.89") = "567.89"
    ;Flip_NumSep(",567.89") = "567.89"
    ;Flip_NumSep("4,567.89") = "4567.89"
    ;Flip_NumSep("34,567.89") = "34567.89"
    ;Flip_NumSep("234,567.89") = "234567.89"
    ;Flip_NumSep(",234,567.89") = "234567.89"
    ;Flip_NumSep("1,234,567.89") = "1234567.89"
    
    ;Flip_NumSep("1234567.890") = "1,234,567.890"
    ;Flip_NumSep("1234567.89") = "1,234,567.89"
    ;Flip_NumSep("1234567.8") = "1,234,567.8"
    ;Flip_NumSep("1234567.") = "1,234,567."
    ;Flip_NumSep("1234567") = "1,234,567"
    ;Flip_NumSep("123456") = "123,456"
    ;Flip_NumSep("12345") = "12,345"
    ;Flip_NumSep("1234") = "1,234"
    ;Flip_NumSep("123") = "123"
    ;Flip_NumSep("12") = "12"
    ;Flip_NumSep("1") = "1"
    ;Flip_NumSep("") = ""
    
     
    Source
    FUNCTION Flip_Numsep ($svar)
      ; This function takes an expression that evaluates to a string or that can be
      ; directly converted to a string. It adds (or removes if present) the system
      ; number separator from every third place in the string and returns the
      ; modified string. It can handle strings with a system decimal character in
      ; them (i.e. "1234.56" will return "1,234.56")
      ; Conditional dependencies are: UDF_Flip_Currency
      ;
      IF VarType($svar) < 2 OR VarType($svar) > 8
        RETURN
      ENDIF
    
      DIM $cdec, $csep, $ccur, $ibeg, $iend, $svar, $ilen, $i, $j
      DIM $chr, $sreg, $bcur, $bdec
      $bcur=0 $bdec=0 $ibeg=Len($svar) $iend=1
      $svar = "" + $svar
      $ilen = Len($svar)
      $sreg = 'HKCU\Control Panel\International'
      $csep = ReadValue($sreg,'sThousand')
      $cdec = ReadValue($sreg,'sDecimal')
      $ccur = ReadValue($sreg,'sCurrency')
    
      ; Remove a currency symbol, if it exists. This is a conditional dependency on Flip_Currency()
      IF InStr($svar,$ccur)
        $svar = flip_currency($svar)
        $bcur = 1
      ENDIF
      ; If a decimal character is present, start to the left of it
      IF InStr($svar,$cdec)
        $ibeg = InStr($svar,$cdec) - 1
        $bdec = 1
      ELSE
        $ibeg = Len($svar)
      ENDIF
      IF InStr($svar,$csep) > 0  ; Separator(s) present - remove all
        FOR $i = 1 TO $ilen
          $chr = Substr($svar,$i,1)
          IF ($chr <> $csep)
            $flip_numsep = $flip_numsep + $chr
          ENDIF
        NEXT
      ELSE
        ; Separator not present, add
        ; Counter $j is needed because $i might not start at 1
        $j = 1
        FOR $i = $ibeg TO $iend STEP -1
          $flip_numsep = "" + Substr($svar,$i,1) + $flip_numsep
          IF $j - (($j / 3) * 3) = 0 AND $i <> $iend
            $flip_numsep = "" + $csep + $flip_numsep
          ENDIF
          $j = $j + 1
        NEXT
        ; If decimal present, re-add and parse remainder
        IF $bdec
          FOR $i = $ibeg + 1 TO Len($svar)
            $flip_numsep = "" + $flip_numsep +
            Substr($svar,$i,1)
          NEXT
        ENDIF
      ENDIF
      ; Restore separation characters if stripped earlier
      IF $bcur
        $flip_numsep=flip_cur($flip_numsep)
      ENDIF
    ENDFUNCTION ; - Flip_Numsep -
     
      original source of UDF topic. show actual FunctionLibrary list on Scriptlogic site close top
              printer-friendly mirror of UDF topic on scripting@wanadoo.nl site  




    Copyright © 2003 www.scriptlogic.com & scripting@wanadoo.nl - last updated on 20 May 2003


    Site Meter