Page 1 of 1 1
Topic Options
#166005 - 2006-08-16 10:30 PM RFC: DigitGrouping UDF
Mart Moderator Offline
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
#166006 - 2006-08-16 10:32 PM Re: RFC: DigitGrouping UDF
Mart Moderator Offline
KiX Supporter
*****

Registered: 2002-03-27
Posts: 4673
Loc: The Netherlands
D#mn. Wrong forum. Can someone move it to scripts please?

[edit]
Thanx for moving this to scripts
[/edit]


Edited by Mart (2006-08-16 11:00 PM)
_________________________
Mart

- Chuck Norris once sold ebay to ebay on ebay.

Top
#166007 - 2006-08-16 11:11 PM Re: RFC: DigitGrouping UDF
Lonkero Administrator Offline
KiX Master Guru
*****

Registered: 2001-06-05
Posts: 22346
Loc: OK
loose all the select cases.
also, instead of using grouping "." or ",", add a parameter for group sign and decimal mark.
that allows using space as grouping mark, which is quite common at least in europe.

Top
#166008 - 2006-08-16 11:40 PM Re: RFC: DigitGrouping UDF
Mart Moderator Offline
KiX Supporter
*****

Registered: 2002-03-27
Posts: 4673
Loc: The Netherlands
Not sure how to loose all the select endselect parts yet but I'll look into that tomorrow.
Thanks for the suggestion to add two parameters for digit grouping and decimal character will incorporate that.
_________________________
Mart

- Chuck Norris once sold ebay to ebay on ebay.

Top
#166009 - 2006-08-17 12:04 AM Re: RFC: DigitGrouping UDF
Lonkero Administrator Offline
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
#166010 - 2006-08-17 09:12 AM Re: RFC: DigitGrouping UDF
Richard H. Administrator Offline
Administrator
*****

Registered: 2000-01-24
Posts: 4946
Loc: Leatherhead, Surrey, UK
What are you using the UDF for? Could you use the FormatNumber() builtin?
Top
#166011 - 2006-08-17 09:34 AM Re: RFC: DigitGrouping UDF
Mart Moderator Offline
KiX Supporter
*****

Registered: 2002-03-27
Posts: 4673
Loc: The Netherlands
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.


Edited by Mart (2006-08-17 09:36 AM)
_________________________
Mart

- Chuck Norris once sold ebay to ebay on ebay.

Top
#166012 - 2006-08-17 09:40 AM Re: RFC: DigitGrouping UDF
Richard H. Administrator Offline
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
#166013 - 2006-08-17 09:44 AM Re: RFC: DigitGrouping UDF
Mart Moderator Offline
KiX Supporter
*****

Registered: 2002-03-27
Posts: 4673
Loc: The Netherlands
LOL
Thanks dude.
_________________________
Mart

- Chuck Norris once sold ebay to ebay on ebay.

Top
Page 1 of 1 1


Moderator:  Glenn Barnas, NTDOC, Arend_, Jochen, Radimus, Allen, ShaneEP, Ruud van Velsen, Mart 
Hop to:
Shout Box

Who's Online
0 registered and 1046 anonymous users online.
Newest Members
Viginette, ManuvdWielNL, Sir_Barrington, batdk82, StuTheCoder
17888 Registered Users

Generated in 0.059 seconds in which 0.024 seconds were spent on a total of 12 queries. Zlib compression enabled.

Search the board with:
superb Board Search
or try with google:
Google
Web kixtart.org