goodbyeplanet Posted January 17, 2011 Share Posted January 17, 2011 Ok here is my code below.. U will never believe that it took me an entire day to do it. I can somehow see that there must be a better way to write this code. But my confusion is because of the different paths. if the path was the same then i could have simply used a for next statement....the code below gives me the expected results but for some reason i keep thinking that what i have done is not professional programming..thank you for your help..., #include <file.au3> $metal = round(DirGetSize("\\drive a\tools\metal")/1000/1000/1000,2) $plastic = round(DirGetSize ("\\drive a\tools\plastic")/1000/1000/1000,2) $metal1 = round(DirGetSize ("\\drive a\boxes\metal1")/1000/1000/1000,2) $plastic2 = round(DirGetSize ("\\drive a\boxes\plastic2")/1000/1000/1000,2) $bigtable = round(DirGetSize ("\\drive a\tables\big table")/1000/1000/1000,2) $smalltable = round(DirGetSize("\\drive a\tables\small table")/1000/1000/1000,2) $flattable = round(DirGetSize("\\drive a\tables\flat table")/1000/1000/1000,2) $total = $metal + $plastic + $metal1 + $plastic2 $sLogPath = ("c:\mylogfile.txt") $sLogMsg1 = ("drive n - (metal) : " & $metal& " GiB") $sLogMsg2 = ("drive m - (plastic) : " & $plastic& " GiB" ) $sLogMsg3 = ("drive o - (metal1) : " & $metal1& " GiB") $sLogMsg4 = ("drive p - (plastic2) : " & $plastic2 & " GiB") $sLogMsg5 = ("total space used : " & $total& " GiB") $sLogMsg6 = ("big table : " & $bigtable & " GiB") $sLogMsg7 = ("small table : " & $smalltable & " GiB") $sLogMsg8 = ("flat table : " & $flattable & " GiB") _FileWriteLog($sLogPath, $sLogMsg1 ) _FileWriteLog($sLogPath, $sLogMsg2 ) _FileWriteLog($sLogPath, $sLogMsg3 ) _FileWriteLog($sLogPath, $sLogMsg4 ) _FileWriteLog($sLogPath, $sLogMsg5 ) _FileWriteLog($sLogPath, $sLogMsg6 ) _FileWriteLog($sLogPath, $sLogMsg7 ) _FileWriteLog($sLogPath, $sLogMsg8 ) Link to comment Share on other sites More sharing options...
ZacUSNYR Posted January 17, 2011 Share Posted January 17, 2011 Nothing really wrong with it. You could have used an array and just looped through it for the _FileWriteLog parts - but you'd still need to declare everything originally. Link to comment Share on other sites More sharing options...
czardas Posted January 17, 2011 Share Posted January 17, 2011 ZacUSNYR, you beat me to it. #include <file.au3> $metal = round(DirGetSize("\\drive a\tools\metal")/1000/1000/1000,2) $plastic = round(DirGetSize ("\\drive a\tools\plastic")/1000/1000/1000,2) $metal1 = round(DirGetSize ("\\drive a\boxes\metal1")/1000/1000/1000,2) $plastic2 = round(DirGetSize ("\\drive a\boxes\plastic2")/1000/1000/1000,2) $bigtable = round(DirGetSize ("\\drive a\tables\big table")/1000/1000/1000,2) $smalltable = round(DirGetSize("\\drive a\tables\small table")/1000/1000/1000,2) $flattable = round(DirGetSize("\\drive a\tables\flat table")/1000/1000/1000,2) $total = $metal + $plastic + $metal1 + $plastic2 $sLogPath = ("c:\mylogfile.txt") Local $aLogMsg[8] $aLogMsg[0] = ("drive n - (metal) : " & $metal& " GiB") $aLogMsg[1] = ("drive m - (plastic) : " & $plastic& " GiB" ) $aLogMsg[2] = ("drive o - (metal1) : " & $metal1& " GiB") $aLogMsg[3] = ("drive p - (plastic2) : " & $plastic2 & " GiB") $aLogMsg[4] = ("total space used : " & $total& " GiB") $aLogMsg[5] = ("big table : " & $bigtable & " GiB") $aLogMsg[6] = ("small table : " & $smalltable & " GiB") $aLogMsg[7] = ("flat table : " & $flattable & " GiB") For $i = 0 To 7 _FileWriteLog($sLogPath, $aLogMsg[$i] ) Next operator64 ArrayWorkshop Link to comment Share on other sites More sharing options...
goodbyeplanet Posted January 17, 2011 Author Share Posted January 17, 2011 thank you my friends for your suggestions.... Link to comment Share on other sites More sharing options...
czardas Posted January 17, 2011 Share Posted January 17, 2011 (edited) It's a pleasure. I find working with arrays often helps to simplify my own code, and it's good for keeping things organized. Edited January 17, 2011 by czardas operator64 ArrayWorkshop Link to comment Share on other sites More sharing options...
guinness Posted January 17, 2011 Share Posted January 17, 2011 Even one step further...reducing the Array across 3 lines instead of 9! #include <file.au3> $metal = Round(DirGetSize("\\drive a\tools\metal") / 1000 / 1000 / 1000, 2) $plastic = Round(DirGetSize("\\drive a\tools\plastic") / 1000 / 1000 / 1000, 2) $metal1 = Round(DirGetSize("\\drive a\boxes\metal1") / 1000 / 1000 / 1000, 2) $plastic2 = Round(DirGetSize("\\drive a\boxes\plastic2") / 1000 / 1000 / 1000, 2) $bigtable = Round(DirGetSize("\\drive a\tables\big table") / 1000 / 1000 / 1000, 2) $smalltable = Round(DirGetSize("\\drive a\tables\small table") / 1000 / 1000 / 1000, 2) $flattable = Round(DirGetSize("\\drive a\tables\flat table") / 1000 / 1000 / 1000, 2) $total = $metal + $plastic + $metal1 + $plastic2 $sLogPath = ("c:\mylogfile.txt") Local $aLogMsg[8] = ["drive n - (metal) : " & $metal & " GiB", "drive m - (plastic) : " & $plastic & " GiB", "drive o - (metal1) : " & $metal1 & " GiB", _ "drive p - (plastic2) : " & $plastic2 & " GiB", "total space used : " & $total & " GiB", "big table : " & $bigtable & " GiB", "small table : " & $smalltable & " GiB", _ "flat table : " & $flattable & " GiB"] For $i = 0 To 7 _FileWriteLog($sLogPath, $aLogMsg[$i]) Next UDF List: _AdapterConnections() • _AlwaysRun() • _AppMon() • _AppMonEx() • _ArrayFilter/_ArrayReduce • _BinaryBin() • _CheckMsgBox() • _CmdLineRaw() • _ContextMenu() • _ConvertLHWebColor()/_ConvertSHWebColor() • _DesktopDimensions() • _DisplayPassword() • _DotNet_Load()/_DotNet_Unload() • _Fibonacci() • _FileCompare() • _FileCompareContents() • _FileNameByHandle() • _FilePrefix/SRE() • _FindInFile() • _GetBackgroundColor()/_SetBackgroundColor() • _GetConrolID() • _GetCtrlClass() • _GetDirectoryFormat() • _GetDriveMediaType() • _GetFilename()/_GetFilenameExt() • _GetHardwareID() • _GetIP() • _GetIP_Country() • _GetOSLanguage() • _GetSavedSource() • _GetStringSize() • _GetSystemPaths() • _GetURLImage() • _GIFImage() • _GoogleWeather() • _GUICtrlCreateGroup() • _GUICtrlListBox_CreateArray() • _GUICtrlListView_CreateArray() • _GUICtrlListView_SaveCSV() • _GUICtrlListView_SaveHTML() • _GUICtrlListView_SaveTxt() • _GUICtrlListView_SaveXML() • _GUICtrlMenu_Recent() • _GUICtrlMenu_SetItemImage() • _GUICtrlTreeView_CreateArray() • _GUIDisable() • _GUIImageList_SetIconFromHandle() • _GUIRegisterMsg() • _GUISetIcon() • _Icon_Clear()/_Icon_Set() • _IdleTime() • _InetGet() • _InetGetGUI() • _InetGetProgress() • _IPDetails() • _IsFileOlder() • _IsGUID() • _IsHex() • _IsPalindrome() • _IsRegKey() • _IsStringRegExp() • _IsSystemDrive() • _IsUPX() • _IsValidType() • _IsWebColor() • _Language() • _Log() • _MicrosoftInternetConnectivity() • _MSDNDataType() • _PathFull/GetRelative/Split() • _PathSplitEx() • _PrintFromArray() • _ProgressSetMarquee() • _ReDim() • _RockPaperScissors()/_RockPaperScissorsLizardSpock() • _ScrollingCredits • _SelfDelete() • _SelfRename() • _SelfUpdate() • _SendTo() • _ShellAll() • _ShellFile() • _ShellFolder() • _SingletonHWID() • _SingletonPID() • _Startup() • _StringCompact() • _StringIsValid() • _StringRegExpMetaCharacters() • _StringReplaceWholeWord() • _StringStripChars() • _Temperature() • _TrialPeriod() • _UKToUSDate()/_USToUKDate() • _WinAPI_Create_CTL_CODE() • _WinAPI_CreateGUID() • _WMIDateStringToDate()/_DateToWMIDateString() • Au3 script parsing • AutoIt Search • AutoIt3 Portable • AutoIt3WrapperToPragma • AutoItWinGetTitle()/AutoItWinSetTitle() • Coding • DirToHTML5 • FileInstallr • FileReadLastChars() • GeoIP database • GUI - Only Close Button • GUI Examples • GUICtrlDeleteImage() • GUICtrlGetBkColor() • GUICtrlGetStyle() • GUIEvents • GUIGetBkColor() • Int_Parse() & Int_TryParse() • IsISBN() • LockFile() • Mapping CtrlIDs • OOP in AutoIt • ParseHeadersToSciTE() • PasswordValid • PasteBin • Posts Per Day • PreExpand • Protect Globals • Queue() • Resource Update • ResourcesEx • SciTE Jump • Settings INI • SHELLHOOK • Shunting-Yard • Signature Creator • Stack() • Stopwatch() • StringAddLF()/StringStripLF() • StringEOLToCRLF() • VSCROLL • WM_COPYDATA • More Examples... Updated: 22/04/2018 Link to comment Share on other sites More sharing options...
Zedna Posted January 18, 2011 Share Posted January 18, 2011 Improved code from post #3 Used function for repetitive task ;-) #include <file.au3> $metal = _GetSize("\\drive a\tools\metal") $plastic = _GetSize("\\drive a\tools\plastic") $metal1 = _GetSize("\\drive a\boxes\metal1") $plastic2 = _GetSize("\\drive a\boxes\plastic2") $bigtable = _GetSize("\\drive a\tables\big table") $smalltable = _GetSize("\\drive a\tables\small table") $flattable = _GetSize("\\drive a\tables\flat table") $total = $metal + $plastic + $metal1 + $plastic2 $sLogPath = ("c:\mylogfile.txt") Local $aLogMsg[8] $aLogMsg[0] = ("drive n - (metal) : " & $metal& " GiB") $aLogMsg[1] = ("drive m - (plastic) : " & $plastic& " GiB" ) $aLogMsg[2] = ("drive o - (metal1) : " & $metal1& " GiB") $aLogMsg[3] = ("drive p - (plastic2) : " & $plastic2 & " GiB") $aLogMsg[4] = ("total space used : " & $total& " GiB") $aLogMsg[5] = ("big table : " & $bigtable & " GiB") $aLogMsg[6] = ("small table : " & $smalltable & " GiB") $aLogMsg[7] = ("flat table : " & $flattable & " GiB") For $i = 0 To 7 _FileWriteLog($sLogPath, $aLogMsg[$i] ) Next Func _GetSize($path) Return round(DirGetSize($path)/1000/1000/1000,2) EndFunc Resources UDF ResourcesEx UDF AutoIt Forum Search Link to comment Share on other sites More sharing options...
Zedna Posted January 18, 2011 Share Posted January 18, 2011 If "\\drive a\" is always the same then it can be simplified even more #include <file.au3> $metal = _GetSize("tools\metal") $plastic = _GetSize("tools\plastic") $metal1 = _GetSize("boxes\metal1") $plastic2 = _GetSize("boxes\plastic2") $bigtable = _GetSize("tables\big table") $smalltable = _GetSize("tables\small table") $flattable = _GetSize("tables\flat table") $total = $metal + $plastic + $metal1 + $plastic2 $sLogPath = ("c:\mylogfile.txt") Local $aLogMsg[8] $aLogMsg[0] = ("drive n - (metal) : " & $metal& " GiB") $aLogMsg[1] = ("drive m - (plastic) : " & $plastic& " GiB" ) $aLogMsg[2] = ("drive o - (metal1) : " & $metal1& " GiB") $aLogMsg[3] = ("drive p - (plastic2) : " & $plastic2 & " GiB") $aLogMsg[4] = ("total space used : " & $total& " GiB") $aLogMsg[5] = ("big table : " & $bigtable & " GiB") $aLogMsg[6] = ("small table : " & $smalltable & " GiB") $aLogMsg[7] = ("flat table : " & $flattable & " GiB") For $i = 0 To 7 _FileWriteLog($sLogPath, $aLogMsg[$i] ) Next Func _GetSize($path) Return round(DirGetSize("\\drive a\" & $path)/1000/1000/1000,2) EndFunc Resources UDF ResourcesEx UDF AutoIt Forum Search Link to comment Share on other sites More sharing options...
JoHanatCent Posted January 18, 2011 Share Posted January 18, 2011 Question? To be more acurate should this Return round(DirGetSize("\\drive a\" & $path)/1000/1000/1000,2) not B this: Return round(DirGetSize("\\drive a\" & $path)/1024/1024/1024,2)? Link to comment Share on other sites More sharing options...
Fubarable Posted January 18, 2011 Share Posted January 18, 2011 The next iteration would be to get rid of the hard-code Strings and separate code from data by using an ini or xml file strings that refer to the directories that you wish to analyze and then pass the file(s) into your code via command-line parameter. This way the same code could be used to analyze many different sets of directories. Link to comment Share on other sites More sharing options...
goodbyeplanet Posted January 18, 2011 Author Share Posted January 18, 2011 (edited) now why is is that this command seems to be extremely slow $metal = Round(DirGetSize("\\drive a\tools\metal") / 1000 / 1000 / 1000, 2). If i then attempt to run the entire code that you have been helping me to shorten, it literally comes to a halt and doesnt do anything. I have also tested my statements one by one and it seems that the dirgetsize starts out slow and finally doesnt do anything...even i put a sleep statement it doesnt help anything... Edited January 18, 2011 by goodbyeplanet Link to comment Share on other sites More sharing options...
ZacUSNYR Posted January 18, 2011 Share Posted January 18, 2011 If we're going to make it more complicated for the sake of making it complicated I want in on it! As mentioned by Fubarable. You could replace the array declarations with INI file reads or whichever for external data. expandcollapse popup#include <file.au3> #include <Array.au3> Global $sLogPath = "c:\mylogfile.txt" Global $asLogMsg[1] = ["New Log File Entry - Start"] Global $iDirTotal Global $asDirList[4][3] = [["\\drive a\tools\metal", "n"],["\\drive a\tools\plastic", "m"], _ ["\\drive a\tools\metal1", "o"],["\\drive a\tools\plastic2", "p"]] Global $asTableList[3][2] = [["\\drive a\tables\big table"],["\\drive a\tables\small table"],["\\drive a\tables\flat table"]] For $i = 0 To UBound($asDirList) - 1 $asDirList[$i][2] = Round(DirGetSize($asDirList[$i][0]) / 1000 / 1000 / 1000, 2) $iDirTotal += $asDirList[$i][2] _ArrayAdd($asLogMsg, "drive " & $asDirList[$i][1] & " (" & _GetFolderName($asDirList[$i][0]) & ") : " & $asDirList[$i][2] & " GiB") Next _ArrayAdd($asLogMsg, "total space used : " & $iDirTotal & " GiB") For $i = 0 To UBound($asTableList) - 1 $asTableList[$i][1] = Round(DirGetSize($asTableList[$i][0]) / 1000 / 1000 / 1000, 2) _ArrayAdd($asLogMsg, _GetFolderName($asTableList[$i][0]) & " : " & $asTableList[$i][1] & " GiB") Next For $i = 0 To UBound($asLogMsg) - 1 _WriteLog($asLogMsg[$i]) Next Func _GetFolderName($asPath) $sFolder = StringSplit($asPath, "\") Return $sFolder[$sFolder[0]] EndFunc ;==>_GetFolderName Func _WriteLog($sLogMsg) _FileWriteLog($sLogPath, $sLogMsg) EndFunc ;==>_WriteLog Link to comment Share on other sites More sharing options...
Zedna Posted January 18, 2011 Share Posted January 18, 2011 now why is is that this command seems to be extremely slow $metal = Round(DirGetSize("\\drive a\tools\metal") / 1000 / 1000 / 1000, 2). If i then attempt to run the entire code that you have been helping me to shorten, it literally comes to a halt and doesnt do anything. I have also tested my statements one by one and it seems that the dirgetsize starts out slow and finally doesnt do anything...even i put a sleep statement it doesnt help anything... I think DirGetSize must go through all subdirectories/files and calculate sum so it can take a while especially if you use network drive. Resources UDF ResourcesEx UDF AutoIt Forum Search Link to comment Share on other sites More sharing options...
kylomas Posted January 18, 2011 Share Posted January 18, 2011 goodbyeplanet, The first question to ask is "Was it slow before I started to 'improve' the code"? kylomas Forum Rules Procedure for posting code "I like pigs. Dogs look up to us. Cats look down on us. Pigs treat us as equals." - Sir Winston Churchill Link to comment Share on other sites More sharing options...
MvGulik Posted January 18, 2011 Share Posted January 18, 2011 Minor (math) speed note:round($x) -> int type.butround($x,n) -> float/double type. "Straight_and_Crooked_Thinking" : A "classic guide to ferreting out untruths, half-truths, and other distortions of facts in political and social discussions.""The Secrets of Quantum Physics" : New and excellent 2 part documentary on Quantum Physics by Jim Al-Khalili. (Dec 2014) "Believing what you know ain't so" ... Knock Knock ... 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