Athos Posted July 17, 2012 Share Posted July 17, 2012 (edited) Hi guys, I've just written a script that takes a bunch of excel files in a folder, reads all of them, puts all their data into a 2d array, and then writes their data to an excel document. However there is one problem with this and that is that when I write all the files to the array in the first place, it does it in a seemingly random order. Because of this, the excel that I end up with is all out of order, and if it just put the files into the array in order of date, it would be much easier to read. Edited July 17, 2012 by Athos Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted July 17, 2012 Moderators Share Posted July 17, 2012 Athos,Add another column to your array and use FileGetTime to get the file date for each file as you create the list. Then you can use _ArraySort to get the files into order before looping through the array and adding the files to the Excel sheet. M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
Athos Posted July 17, 2012 Author Share Posted July 17, 2012 (edited) Melba, I'm not sure what you mean when you say adding another column to the array. I'm using FileListTOArray to generate my array curently. Local $FileList = _FileListToArray("Path")So that gets me an array of Files. Now I can loop through them and get a string which contains the the time(i suppose in string form). So now I make a new 2d array, that has both a file and the corresponding time associated with it. Is this right so far? Thing is though, when I call array sort, how will it know to sort the files by the second column? Edited July 17, 2012 by Athos Link to comment Share on other sites More sharing options...
DicatoroftheUSA Posted July 17, 2012 Share Posted July 17, 2012 (edited) I'm not sure what you mean when you say adding another column to the array. something like: ;untested redim $filelist[ubound($filelist)][2] for $x=0 to $filelist[0][0] $filelist[$x][1]=FileGetTime($filelist[$x][0],0,1) next Edited July 17, 2012 by DicatoroftheUSA Statism is violence, Taxation is theft. Autoit Wiki Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted July 17, 2012 Moderators Share Posted July 17, 2012 Athos,Is this right so far?Absolutely. when I call array sort, how will it know to sort the files by the second column?Have looked at the function in the Help file? I think not or you would have seen the $iSubItem parameter which lets you set the "Sub-index to sort on in 2D arrays". Give it a try and see how you get on. M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
Athos Posted July 17, 2012 Author Share Posted July 17, 2012 (edited) Guys could I have some clarifcation on what redim is doing. From reading the helpfile, it's supposed to allow you to restructure the size of your array without destroying the values inside of it. The problem is that it seemingly destroys the value in "column 0" When I go from a 1d to a 2d array. expandcollapse popupLocal $FileList = _FileListToArray("path") ;makes sure thet master array is filled up If @error = 1 Then MsgBox(0, "", "No Folders Found.") Exit EndIf If @error = 4 Then MsgBox(0, "", "No Files Found.") Exit EndIf _ArrayDisplay($FileList, "All that data ") ReDim $FileList[ubound($filelist)][2] _ArrayDisplay($FileList, "All dat changed data") On the first _arrayDisplay, it lets me see my array fine However after rediming it, it erases all the data from the array. Isn't that what it's not supposed to do, or am I misunderstanding something here? Also thanks so much for the help so far. Edited July 17, 2012 by Athos Link to comment Share on other sites More sharing options...
BrewManNH Posted July 17, 2012 Share Posted July 17, 2012 You can't change the dimensions of an array that way, you'll need to create a new 2D array and copy your data from the array returned from the _FileListToArray function. I would suggest the Array wiki tutorial if you're unfamiliar with how to work with arrays. If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag GudeHow to ask questions the smart way! I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from. Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays. - ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script. - Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label. - _FileGetProperty - Retrieve the properties of a file - SciTE Toolbar - A toolbar demo for use with the SciTE editor - GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI. - Latin Square password generator Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted July 17, 2012 Moderators Share Posted July 17, 2012 Athos,ReDim only works if you keep the same number of dimensions - as it says in the Help file. In this case, where _FileListToArray produces a 1D array and you need to move the names to a 2D array, you have to create a new array of the correct size and then loop through the 1D array copying the values. You can of course use the same loop to run FileGetTime on the file and fill both columns at the same time. M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
DicatoroftheUSA Posted July 17, 2012 Share Posted July 17, 2012 Sorry for misleading you Athos Statism is violence, Taxation is theft. Autoit Wiki Link to comment Share on other sites More sharing options...
AZJIO Posted July 17, 2012 Share Posted July 17, 2012 #include <Array.au3> #include <File.au3> $sPath = @SystemDir $aFiles = _FileListToArray($sPath, "*.*", 1) _ArrayDisplay($aFiles, '<img src='http://www.autoitscript.com/forum/public/style_emoticons/<#EMO_DIR#>/wink.png' class='bbc_emoticon' alt=';)' />') Global $aFileList2D[$aFiles[0] + 1][2] = [[$aFiles[0]]] For $i = 1 To $aFiles[0] $aFileList2D[$i][0] = $aFiles[$i] $aFileList2D[$i][1] = FileGetTime($sPath & '' & $aFiles[$i], 0, 1) Next _ArrayDisplay($aFileList2D, '<img src='http://www.autoitscript.com/forum/public/style_emoticons/<#EMO_DIR#>/wink.png' class='bbc_emoticon' alt=';)' />') _ArraySort($aFileList2D, 0, 1, 0, 1) _ArrayDisplay($aFileList2D, '<img src='http://www.autoitscript.com/forum/public/style_emoticons/<#EMO_DIR#>/wink.png' class='bbc_emoticon' alt=';)' />') My other projects or all Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted July 17, 2012 Moderators Share Posted July 17, 2012 AZJIO,I take it that the whole "give a man a fish...give a man a net" idea passes you by? M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
Athos Posted July 18, 2012 Author Share Posted July 18, 2012 (edited) It's ok Melba, I got everything working before I saw he posted that Thanks everybody for your help. It took some fiddling with the the arrays, and in fact I think there is a bit more optamization left to be done with my code, but you guys really got my off in the right direction. Edited July 18, 2012 by Athos 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