ezzetabi 3 Posted November 6, 2004 A decent scripter can do that in half second, but I still think that it may be posted here. Since anyone may need this. It is a easy func for enlarging a Array of one and updating also the position [0] to the new size. I use this when loading stuff where I can't know the number of items I'll have. $a = StringSplit('1|2|3|4|5|6|7|8','|') MsgBox(0,'',$a[0] & ' - ' & $a[$a[0]]) _Enlarge($a) $a[$a[0]] = 'New item' MsgBox(0,'',$a[0] & ' - ' & $a[$a[0]]) Func _Enlarge(ByRef $aArray) If Not IsArray($aArray) Then SetError(1) Return -1 EndIf $aArray[0] = UBound($aArray) ReDim $aArray[UBound($aArray) + 1] Return 0 EndFunc Share this post Link to post Share on other sites
Matt @ MPCS 0 Posted November 6, 2004 (edited) Here is a small adjustment to your script to allow the user to add any number of elements to the array: Func _Enlarge(ByRef $aArray, $iElements) If Not IsArray($aArray) Then SetError(1) Return -1 EndIf If Not IsNumeric($iElements) SetError(2) Return -1 EndIf $aArray[0] = UBound($aArray) ReDim $aArray[UBound($aArray) + $iElements] Return 0 EndFunc This is just a natural addition to the function you posted. I personally wouldn't have passed the array ByRef because by doing so you are making a development decision for the scripter that I don't believe is your place. I also don't understand why you keep the previous array size in the [0] element, this should change when you resize. This is how I would have done it (not necisarily any better): Func _Enlarge( $aArray, $iElements ) If Not IsArray($aArray) Then SetError(1) Return $aArray EndIf If Not IsNumeric($iElements) SetError(2) Return $aArray EndIf ReDim $aArray[UBound($aArray) + $iElements] $aArray[0] = UBound($aArray) Return $aArray EndFunc I don't have time right now to test either algorithm, but I believe they show proof of concept. BTW: Good Work! *** Matt @ MPCS Edited November 6, 2004 by Matt @ MPCS Share this post Link to post Share on other sites
ezzetabi 3 Posted November 6, 2004 I am sorry dear. Your script is wrong. First one corrected. (With a little addon) Func _Enlarge(ByRef $aArray, $iElements) If Not IsArray($aArray) Then SetError(1) Return -1 EndIf If $iElements = '' Then $iElements = 1 If Not IsInt($iElements) SetError(2) Return -1 EndIf $aArray[0] = UBound($aArray) - 1 + $iElements ReDim $aArray[UBound($aArray) + $iElements] Return 0 EndFunc Second one corrected. Func _Enlarge( $aArray, $iElements ) If Not IsArray($aArray) Then SetError(1) Return $aArray EndIf If $iElements = '' Then $iElements = 1 If Not IsInt($iElements) SetError(2) Return $aArray EndIf ReDim $aArray[UBound($aArray) + $iElements] $aArray[0] = UBound($aArray) - 1;The array are indexed from 1 to Ubound -1 Return $aArray EndFunc The point of the line $aArray[0] = UBound($aArray) is that the array is indexed from 1 to UBound - 1 (since [0] keep the size it is not from 0 to ubound -1), enlarging of 1 means that the [0] will become Ubound - 1 + 1 = Ubound, so for avoiding a useless operation I put the line before enlarging. You see? I am happy you answered, some time ago I'd not posted a such easy script, but after seeing some of yours I understand that even simple things that help community. Share this post Link to post Share on other sites
Matt @ MPCS 0 Posted November 7, 2004 Although I don't especially like that you imply that my scripting is remedial... thank you for correcting the errors. As posted, these were untested and glance impressions of your code. I'll be sure to keep in mind not to tamper with your scripts in the future... no matter how f***ed they are. *** Matt @ MPCS Share this post Link to post Share on other sites
SlimShady 1 Posted November 7, 2004 (edited) A quick read of the subject and I thought we were being spammed by a Viagra distributor...Lar.<{POST_SNAPBACK}>Good one. You're the funniest of 'em all. Edited November 7, 2004 by SlimShady Share this post Link to post Share on other sites