#166005 - 2006-08-16 10:30 PM
RFC: DigitGrouping UDF
|
Mart
KiX Supporter
   
Registered: 2002-03-27
Posts: 4673
Loc: The Netherlands
|
Created this for a project I almost finished. It had the European part of this code in it like 20 times. Thought a UDF would be nicer. All comments are welcome. In the end I might post it in the UDF section. It can probably be golfed a bit. Golfed versions are also welcome.
$input is the stuff to apply digit grouping to. $system is 1 for European system (grouping using .) en 2 for US system (grouping using ,) Currently it takes an input value of max 9999999999.
Code:
Function DigitGrouping($input,$system) If $input = "" Exit 13 EndIf If Len ($input) > 10 Exit 13 EndIf If $system = "" Exit 13 EndIf
Select ;European system. Use dot for digitgrouping and comma for decimals. Case $system = "1" If InStr ($input, ",") = 0 Select Case Len($input) = 4 $1 = SubStr($input, 1, 1) $2 = SubStr($input, 2) $digitgrouping = $1 + "." + $2 Case Len($input) = 5 $1 = SubStr($input, 1, 2) $2 = SubStr($input, 3) $digitgrouping = $1 + "." + $2 Case Len($input) = 6 $1 = SubStr($input, 1, 3) $2 = SubStr($input, 4) $digitgrouping = $1 + "." + $2 Case Len($input) = 7 $1 = SubStr($input, 1, 1) $2 = SubStr($input, 2, 3) $3 = SubStr($input, 5) $digitgrouping = $1 + "." + $2 + "." $3 Case Len($input) = 8 $1 = SubStr($input, 1, 2) $2 = SubStr($input, 3, 3) $3 = SubStr($input, 6) $digitgrouping = $1 + "." + $2 + "." $3 Case Len($input) = 9 $1 = SubStr($input, 1, 3) $2 = SubStr($input, 4, 3) $3 = SubStr($input, 7, 3) $digitgrouping = $1 + "." + $2 + "." $3 Case Len($input) = 10 $1 = SubStr($input, 1, 1) $2 = SubStr($input, 2, 3) $3 = SubStr($input, 5, 3) $4 = SubStr($input, 8, 3) $digitgrouping = $1 + "." + $2 + "." $3 + "." + $4 EndSelect Else $array = Split($input, ",") Select Case Len($array[0]) = 4 $1 = SubStr($array[0], 1, 1) $2 = SubStr($array[0], 2) $digitgrouping = $1 + "." + $2 + "," + $array[Ubound($array)] Case Len($array[0]) = 5 $1 = SubStr($array[0], 1, 2) $2 = SubStr($array[0], 3) $digitgrouping = $1 + "." + $2 + "," + $array[Ubound($array)] Case Len($array[0]) = 6 $1 = SubStr($array[0], 1, 3) $2 = SubStr($array[0], 4) $digitgrouping = $1 + "." + $2 + "," + $array[Ubound($array)] Case Len($array[0]) = 7 $1 = SubStr($array[0], 1, 1) $2 = SubStr($array[0], 2, 3) $3 = SubStr($array[0], 5) $digitgrouping = $1 + "." + $2 + "." $3 + "," + $array[Ubound($array)] Case Len($array[0]) = 8 $1 = SubStr($array[0], 1, 2) $2 = SubStr($array[0], 3, 3) $3 = SubStr($array[0], 6) $digitgrouping = $1 + "." + $2 + "." $3 + "," + $array[Ubound($array)] Case Len($array[0]) = 9 $1 = SubStr($array[0], 1, 3) $2 = SubStr($array[0], 4, 3) $3 = SubStr($array[0], 7, 3) $digitgrouping = $1 + "." + $2 + "." $3 + "," + $array[Ubound($array)] Case Len($array[0]) = 10 $1 = SubStr($array[0], 1, 1) $2 = SubStr($array[0], 2, 3) $3 = SubStr($array[0], 5, 3) $4 = SubStr($array[0], 8, 3) $digitgrouping = $1 + "." + $2 + "." $3 + "." + $4 + "," + $array[Ubound($array)] EndSelect EndIf ;US system. Use comma for digitgrouping and dot for decimals. Case $system = "2" If InStr ($input, ".") = 0 Select Case Len($input) = 4 $1 = SubStr($input, 1, 1) $2 = SubStr($input, 2) $digitgrouping = $1 + "," + $2 Case Len($input) = 5 $1 = SubStr($input, 1, 2) $2 = SubStr($input, 3) $digitgrouping = $1 + "," + $2 Case Len($input) = 6 $1 = SubStr($input, 1, 3) $2 = SubStr($input, 4) $digitgrouping = $1 + "," + $2 Case Len($input) = 7 $1 = SubStr($input, 1, 1) $2 = SubStr($input, 2, 3) $3 = SubStr($input, 5) $digitgrouping = $1 + "," + $2 + "," $3 Case Len($input) = 8 $1 = SubStr($input, 1, 2) $2 = SubStr($input, 3, 3) $3 = SubStr($input, 6) $digitgrouping = $1 + "," + $2 + "," $3 Case Len($input) = 9 $1 = SubStr($input, 1, 3) $2 = SubStr($input, 4, 3) $3 = SubStr($input, 7, 3) $digitgrouping = $1 + "," + $2 + "," $3 Case Len($input) = 10 $1 = SubStr($input, 1, 1) $2 = SubStr($input, 2, 3) $3 = SubStr($input, 5, 3) $4 = SubStr($input, 8, 3) $digitgrouping = $1 + "," + $2 + "," $3 + "," + $4 EndSelect Else $array = Split($input, ".") Select Case Len($array[0]) = 4 $1 = SubStr($array[0], 1, 1) $2 = SubStr($array[0], 2) $digitgrouping = $1 + "," + $2 + "." + $array[Ubound($array)] Case Len($array[0]) = 5 $1 = SubStr($array[0], 1, 2) $2 = SubStr($array[0], 3) $digitgrouping = $1 + "," + $2 + "." + $array[Ubound($array)] Case Len($array[0]) = 6 $1 = SubStr($array[0], 1, 3) $2 = SubStr($array[0], 4) $digitgrouping = $1 + "," + $2 + "." + $array[Ubound($array)] Case Len($array[0]) = 7 $1 = SubStr($array[0], 1, 1) $2 = SubStr($array[0], 2, 3) $3 = SubStr($array[0], 5) $digitgrouping = $1 + "," + $2 + "," $3 + "." + $array[Ubound($array)] Case Len($array[0]) = 8 $1 = SubStr($array[0], 1, 2) $2 = SubStr($array[0], 3, 3) $3 = SubStr($array[0], 6) $digitgrouping = $1 + "," + $2 + "," $3 + "." + $array[Ubound($array)] Case Len($array[0]) = 9 $1 = SubStr($array[0], 1, 3) $2 = SubStr($array[0], 4, 3) $3 = SubStr($array[0], 7, 3) $digitgrouping = $1 + "," + $2 + "," $3 + "." + $array[Ubound($array)] Case Len($array[0]) = 10 $1 = SubStr($array[0], 1, 1) $2 = SubStr($array[0], 2, 3) $3 = SubStr($array[0], 5, 3) $4 = SubStr($array[0], 8, 3) $digitgrouping = $1 + "," + $2 + "," $3 + "," + $4 + "." + $array[Ubound($array)] EndSelect EndIf EndSelect EndFunction
_________________________
Mart
- Chuck Norris once sold ebay to ebay on ebay.
|
|
Top
|
|
|
|
#166009 - 2006-08-17 12:04 AM
Re: RFC: DigitGrouping UDF
|
Lonkero
KiX Master Guru
   
Registered: 2001-06-05
Posts: 22346
Loc: OK
|
k, here is the code I came up with... took a lot of golfing... perhaps would been quicker to just write my own 
Code:
Function DigitGrouping($input, $GS, $DS) dim $ $input = split($input,$DS) for $=len($input[0]) to 0 step -1 if not $ mod 3 $digitGrouping = $digitGrouping + $GS endif $digitGrouping = $digitGrouping + substr($input[0],$,1) next if 0<ubound($input) $digitGrouping = $digitGrouping+$DS+" "+$input[1] endif $digitGrouping = trim($digitGrouping) EndFunction
|
|
Top
|
|
|
|
#166012 - 2006-08-17 09:40 AM
Re: RFC: DigitGrouping UDF
|
Richard H.
Administrator
   
Registered: 2000-01-24
Posts: 4946
Loc: Leatherhead, Surrey, UK
|
Quote:
I wrote it to make large numbers more readable.
for writing such a big script that Jooel golfed to a fifth of the original.
for not spotting the build in formatnumber function.
Writing KiXtart scripts an education and a joy, and one of the few illicit pleasures you should never be embarassed about
|
|
Top
|
|
|
|
Moderator: Glenn Barnas, NTDOC, Arend_, Jochen, Radimus, Allen, ShaneEP, Ruud van Velsen, Mart
|
0 registered
and 1046 anonymous users online.
|
|
|