busysignal Posted October 16, 2005 Share Posted October 16, 2005 With a bit of inspiration from qafrost's code and a bit of tweaking I put created a simple function that allows you for format the output of any filesize. expandcollapse popup;=============================================================================== ; Author(s): busysignal ; Version: 1.0.0 ; AutoItVer: 3.1.1.+ ; Created 2005-10-15 ; ; Description: Formats a files size according to $sFormat & $iDecimal parameters ; Syntax: _Filesize($iValue, $sFormat, $iNum) ; ; Parameter(s): $iValue = The value in "Bytes" ; $SFormat = Specify the Size format you wish to display, options are: ; "" - Auto Select based on value entered ; "GB" - Display in Gigabytes ; "MB" - Display in Megabytes ; "KB" - Display in Kilobytes ; "B" - Display in Bytes ; $iDecimal = The number of decimals places to round up converted value to ; Requirement(s): None ; Return Value(s): On Success - Returns a string representation of $iValue formatted according to $sFormat ; On Failure - Returns an empty string "" if no files are found and sets @Error on errors ; @Error=1 $iValue = 0; no value to convert ; @Error=2 Either $iValue or $iDecimal contains non-numeric characters. ; Note(s): Example: _Filesize(2152971234,"GB", 2) would return "2.15 GB" ; ; Credits: Inspired by _PictureUDF() by SolidSnake <MetalGearX91@Hotmail.com> ;=============================================================================== Func _Filesize($iValue, $sFormat, $iDecimal) Local $sReturn, $iB, $iKB, $iMB, $iGB If $iValue = 0 Then SetError(1) Return 0 EndIf If Not StringIsDigit($iValue) Or Not StringIsDigit($iDecimal) Then SetError(2) Return 0 EndIf ; Conversion Chart $iB = $iValue $iKB = Round($iB / 1024, $iDecimal) $iMB = Round($iKB / 1024, $iDecimal) $iGB = Round($iMB / 1024, $iDecimal) Select Case $sFormat = ""; Auto Select Format Display Type If $iMB > 1024 Then $iValue = $iGB & " GB" ElseIf $iKB > 1024 Then $iValue = $iMB & " MB" ElseIf $iKB > 0 Then $iValue = $iKB & " KB" ElseIf $iKB < 0 Then $iValue = $iB & " Bytes" EndIf Case $sFormat = "GB" $iValue = $iGB & " GB" Case $sFormat = "MB" $iValue = $iMB & " MB" Case $sFormat = "KB" $iValue = $iKB & " KB" Case $sFormat = "B" $iValue = $iB & " Bytes" EndSelect Return $iValue EndFunc ;==>_Filesize Give it a try! Bugs, Comments, Question please post. Cheers.. Link to comment Share on other sites More sharing options...
MHz Posted October 16, 2005 Share Posted October 16, 2005 Very nice, busysignal. Your UDF has good structure. I do like the method of return and error handling. With good scripting ability like this, I am sure we will see more good UDFs from you. 5 stars for presentation of nice written code. Link to comment Share on other sites More sharing options...
LxP Posted October 16, 2005 Share Posted October 16, 2005 Nice work busysignal! I would suggest modifying the code not to error out when 0 is passed as a size though -- returning something like '0 B', '0 KB' etc. would be reasonable. Link to comment Share on other sites More sharing options...
busysignal Posted October 18, 2005 Author Share Posted October 18, 2005 @MHz, thanks for the kudo points. It is amazing that it took me a 10 mins to make it and 20 mins to refine it. Strange how that works! @LxP, I have to agree. But at 3:30am or when ever I posted it I took the short cut on the return param. I like the idea of the zero return. I will have to implement that one.. Cheers.. Link to comment Share on other sites More sharing options...
Valuater Posted October 18, 2005 Share Posted October 18, 2005 Very Nice Returns.... busysignal 8) Link to comment Share on other sites More sharing options...
busysignal Posted October 18, 2005 Author Share Posted October 18, 2005 Very Nice Returns.... busysignal8)@Valuater, Thanks I appreciate the comments!Cheers.. 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