buzz44 Posted May 22, 2005 Share Posted May 22, 2005 (edited) I needed to have numbers I was using to have comma's in them, so I created this UDF and decided to share it . expandcollapse popup;================================================= ; Function Name: _ArrayAddComma() ; Description: Add comma's to an array of numbers (can have alphabetic characters. ; Return Value(s): A new array with the values delimited by comma's. ;================================================= #include <Array.au3> Dim $avArray[9] $avArray[0] = "975738222836526532626264" $avArray[1] = "2546578657872" $avArray[2] = "65856783" $avArray[3] = "64657865785678387" $avArray[4] = "6356" $avArray[5] = "105678567856029" $avArray[6] = "7656786578341" $avArray[7] = "573" $avArray[8] = "This is a testing sentence." _ArrayDisplay($avArray, "Without Comma's") $avNew = _ArrayAddComma($avArray) _ArrayDisplay($avNew, "With Comma's") Func _ArrayAddComma($avArray) For $I = 0 To UBound($avArray) - 1 If StringIsDigit($avArray[$I]) And StringLen($avArray[$I]) > 3 Then $sComma = StringLeft($avArray[$I], StringLen($avArray[$I]) - 3) & "," & StringRight($avArray[$I], 3) Do If Not StringInStr(StringLeft($sComma, 4), ",") Then $sComma = StringLeft($sComma, StringInStr($sComma, ",") - 4) & "," & StringRight($sComma, StringLen($sComma) - StringInStr($sComma, ",") + 4) EndIf Until StringInStr(StringLeft($sComma, 4), ",") _ArrayDelete($avArray, $I) _ArrayInsert($avArray, $I, $sComma) EndIf Next Return $avArray EndFunc Edited May 16, 2011 by buzz44 qq Link to comment Share on other sites More sharing options...
Insolence Posted May 22, 2005 Share Posted May 22, 2005 Seems useful to me Should also accept non-arrays though. "I thoroughly disapprove of duels. If a man should challenge me, I would take him kindly and forgivingly by the hand and lead him to a quiet place and kill him." - Mark TwainPatient: "It hurts when I do $var_"Doctor: "Don't do $var_" - Lar. Link to comment Share on other sites More sharing options...
buzz44 Posted May 22, 2005 Author Share Posted May 22, 2005 Yes I came to that conclusion as soon as I tried to use it lol. Seeing as I got a reply so quick and you mentioned it, I'll to it now lol . qq Link to comment Share on other sites More sharing options...
Insolence Posted May 22, 2005 Share Posted May 22, 2005 Glad I could be of, uh, assistance? "I thoroughly disapprove of duels. If a man should challenge me, I would take him kindly and forgivingly by the hand and lead him to a quiet place and kill him." - Mark TwainPatient: "It hurts when I do $var_"Doctor: "Don't do $var_" - Lar. Link to comment Share on other sites More sharing options...
buzz44 Posted May 22, 2005 Author Share Posted May 22, 2005 (edited) Thank you. @Error is now set to 1 when the interger/array contains no numbers. expandcollapse popup;================================================= ; Function Name: _ArrayAddComma() ; Description: Add comma's to an array/integer of numbers. ; Return Value(s): On Success: A new array/integer with the value(s) delimited by comma's. ; Return Value(s): On Failure: ; @Error: = 0 = No error. ; 1 = $nValue isn't a number or the array contains no numbers. ;================================================= ;Example 1 - Array #include <Array.au3> Dim $avArray[9] $avArray[0] = "975738222836526532626264" $avArray[1] = "2546578657872" $avArray[2] = "65856783" $avArray[3] = "64657865785678387" $avArray[4] = "6356" $avArray[5] = "105678567856029" $avArray[6] = "7656786578341" $avArray[7] = "573" $avArray[8] = "This is a testing sentence." _ArrayDisplay($avArray, "Without Comma's") $avNew = _ArrayAddComma($avArray) _ArrayDisplay($avNew, "With Comma's") ;Example 2 - Integer $nNum = "981298409731156" $Commad = _ArrayAddComma($nNum) MsgBox(4096, "Result", $nNum & " to..." & @CRLF & $Commad) Func _ArrayAddComma($nValue) Local $sComma, $nValue, $sError = 0 If IsArray($nValue) Then For $I = 0 To UBound($nValue) - 1 If StringIsAlpha ($nValue) Then $sError = $sError + 1 If $sError = UBound($nValue) Then SetError(1) Return (0) EndIf EndIf Next For $I = 0 To UBound($nValue) - 1 If StringIsDigit($nValue[$I]) And StringLen($nValue[$I]) > 3 Then $sComma = StringLeft($nValue[$I], StringLen($nValue[$I]) - 3) & "," & _ StringRight($nValue[$I], 3) Do If Not StringInStr(StringLeft($sComma, 4), ",") Then $sComma = StringLeft($sComma, StringInStr($sComma, ",") - 4) & "," & _ StringRight($sComma, StringLen($sComma) - StringInStr($sComma, ",") + 4) EndIf Until StringInStr(StringLeft($sComma, 4), ",") $nValue[$I] = $sComma) EndIf Next Return $nValue Else If Not StringIsDigit($nValue) Then SetError(1) Return (0) Else If StringLen($nValue) > 3 Then $sComma = StringLeft($nValue, StringLen($nValue) - 3) & "," & StringRight($nValue,3) Do If Not StringInStr(StringLeft($sComma, 4), ",") Then $sComma = StringLeft($sComma, StringInStr($sComma, ",") - 4) & "," & _ StringRight($sComma, StringLen($sComma) - StringInStr($sComma, ",") + 4) EndIf Until StringInStr(StringLeft($sComma, 4), ",") Return $sComma EndIf EndIf EndIf EndFunc Edited December 29, 2011 by buzz44 qq Link to comment Share on other sites More sharing options...
buzz44 Posted May 24, 2005 Author Share Posted May 24, 2005 (edited) If any one is interested I have now changed the name of it because it no longer only deals with arrays but also non-array's. expandcollapse popup;================================================= ; Function Name: _AddComma() ; Description: Add comma's to an array/integer of numbers. ; Return Value(s): On Success: A new array/integer with the value(s) delimited by comma's. ; Return Value(s): On Failure: ; @Error: = 0 = No error. ; 1 = $nValue isn't a number or the array contains no numbers. ;================================================= ;Example 1 - Array #include <Array.au3> Dim $avArray[9] $avArray[0] = "975738222836526532626264" $avArray[1] = "2546578657872" $avArray[2] = "65856783" $avArray[3] = "64657865785678387" $avArray[4] = "6356" $avArray[5] = "105678567856029" $avArray[6] = "7656786578341" $avArray[7] = "573" $avArray[8] = "This is a testing sentence." _ArrayDisplay($avArray, "Without Comma's") $avNew = _AddComma($avArray) _ArrayDisplay($avNew, "With Comma's") ;Example 2 - Integer $nNum = "981298409731156" $Commad = _AddComma($nNum) MsgBox(4096, "Result", $nNum & " to..." & @CRLF & $Commad) Func _AddComma($nValue) Local $sComma, $nValue, $sError = 0 If IsArray($nValue) Then For $I = 0 To UBound($nValue) - 1 If StringIsAlpha ($nValue) Then $sError = $sError + 1 If $sError = UBound($nValue) Then SetError(1) Return (0) EndIf EndIf Next For $I = 0 To UBound($nValue) - 1 If StringIsDigit($nValue[$I]) And StringLen($nValue[$I]) > 3 Then $sComma = StringLeft($nValue[$I], StringLen($nValue[$I]) - 3) & "," & _ StringRight($nValue[$I], 3) Do If Not StringInStr(StringLeft($sComma, 4), ",") Then $sComma = StringLeft($sComma, StringInStr($sComma, ",") - 4) & "," & _ StringRight($sComma, StringLen($sComma) - StringInStr($sComma, ",") + 4) EndIf Until StringInStr(StringLeft($sComma, 4), ",") $nValue[$I] = $sComma) EndIf Next Return $nValue Else If Not StringIsDigit($nValue) Then SetError(1) Return (0) Else If StringLen($nValue) > 3 Then $sComma = StringLeft($nValue, StringLen($nValue) - 3) & "," & StringRight($nValue,3) Do If Not StringInStr(StringLeft($sComma, 4), ",") Then $sComma = StringLeft($sComma, StringInStr($sComma, ",") - 4) & "," & _ StringRight($sComma, StringLen($sComma) - StringInStr($sComma, ",") + 4) EndIf Until StringInStr(StringLeft($sComma, 4), ",") Return $sComma EndIf EndIf EndIf EndFunc Edited December 29, 2011 by buzz44 qq Link to comment Share on other sites More sharing options...
blindwig Posted June 7, 2005 Share Posted June 7, 2005 I wrote one of these a while back too. I never thought to use StringInStr and StringLeft to check if you have enough commas - that's a cool trick! Here is my routine: CODE Func NumberCommas($Number) ;Given a number such as 12345678 will return 12,345,678 Dim $Result='', $Pos If StringIsDigit($Number) Then $Pos = StringLen($Number)-2 While $Pos > -2 If $Pos < 1 Then $Result = StringMid($Number, 1, $Pos + 2) & ',' & $Result Else $Result = StringMid($Number, $Pos, 3) & ',' & $Result EndIf $Pos = $Pos - 3 WEnd $Result=StringLeft($Result, StringLen($Result) - 1) EndIf Return $Result EndFunc I basically go through the number as a string, breaking it off 3 characters at a time, and concatenating commas in. My UDF Threads:Pseudo-Hash: Binary Trees, Flat TablesFiles: Filter by Attribute, Tree List, Recursive Find, Recursive Folders Size, exported to XMLArrays: Nested, Pull Common Elements, Display 2dSystem: Expand Environment Strings, List Drives, List USB DrivesMisc: Multi-Layer Progress Bars, Binary FlagsStrings: Find Char(s) in String, Find String in SetOther UDF Threads I Participated:Base64 Conversions Link to comment Share on other sites More sharing options...
buzz44 Posted June 7, 2005 Author Share Posted June 7, 2005 Cool, when I was creating it I was faced with many options of how to do it, and there are many ways I found it. I just used the first one that same to my head, but I also wanted it to add comma's to arrays aswell. qq Link to comment Share on other sites More sharing options...
buzz44 Posted June 21, 2005 Author Share Posted June 21, 2005 (edited) Updated, now works for floating point numbers. expandcollapse popup;================================================= ; Function Name: _AddComma() ; Description: Add comma's to an array/integer of numbers. ; Return Value(s): On Success: A new array/integer with the value(s) delimited by comma's. ; Return Value(s): On Failure: ; @Error: = 0 = No error. ; 1 = $nValue isn't a number or the array contains no numbers. ;================================================= ;Example 1 - Array #include <Array.au3> Dim $avArray[9] $avArray[0] = "975738222836526532626264" $avArray[1] = "2546578657872" $avArray[2] = "65856783" $avArray[3] = "64657865785678387" $avArray[4] = "6356" $avArray[5] = "105678567856029" $avArray[6] = "7656786578341" $avArray[7] = "573" $avArray[8] = "This is a testing sentence." _ArrayDisplay($avArray, "Without Comma's") $avNew = _AddComma($avArray) _ArrayDisplay($avNew, "With Comma's") ;Example 2 - Integer $nNum = "981298409731156.37268587" $Commad = _AddComma($nNum) MsgBox(4096, "Result", $nNum & " to..." & @CRLF & $Commad) Func _AddComma($nValue) Local $sComma, $sError = 0 If IsArray($nValue) Then For $I = 0 To UBound($nValue) - 1 If StringIsAlpha($nValue) Then $sError = $sError + 1 If $sError = UBound($nValue) Then SetError(1) Return (0) EndIf EndIf Next For $I = 0 To UBound($nValue) - 1 If StringIsDigit($nValue[$I]) And StringLen($nValue[$I]) > 3 Then $sComma = StringLeft($nValue[$I], StringLen($nValue[$I]) - 3) & "," & _ StringRight($nValue[$I], 3) Do If Not StringInStr(StringLeft($sComma, 4), ",") Then $sComma = StringLeft($sComma, StringInStr($sComma, ",") - 4) & "," & _ StringRight($sComma, StringLen($sComma) - StringInStr($sComma, ",") + 4) EndIf Until StringInStr(StringLeft($sComma, 4), ",") $nValue[$I] = $sComma EndIf Next Return $nValue Else If Not StringIsDigit($nValue) And Not StringIsFloat($nValue) Then SetError(1) Return (0) Else If StringIsFloat($nValue) Then Local $Split = StringSplit($nValue, ".") $nValue = $Split[1] EndIf If StringLen($nValue) > 3 Then $sComma = StringLeft($nValue, StringLen($nValue) - 3) & "," & StringRight($nValue,3) Do If Not StringInStr(StringLeft($sComma, 4), ",") Then $sComma = StringLeft($sComma, StringInStr($sComma, ",") - 4) & "," & _ StringRight($sComma, StringLen($sComma) - StringInStr($sComma, ",") + 4) EndIf Until StringInStr(StringLeft($sComma, 4), ",") If IsDeclared("Split") Then $sComma = $sComma & "." & $Split[2] EndIf Return $sComma EndIf EndIf EndIf EndFunc Edited December 29, 2011 by buzz44 qq Link to comment Share on other sites More sharing options...
gumby Posted June 23, 2005 Share Posted June 23, 2005 Thanx thanx thanx... its works sooo well... cheers Link to comment Share on other sites More sharing options...
Omar Posted April 12, 2007 Share Posted April 12, 2007 I know this may be too old to update: For some reason floats with less then 3 digits before the decimals don't get reassambled. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now