I have have come across this issue for some time and I was wondering if this is normal or if it is in fact a bug.
Here is what I am doing
I make a function call and grab multiple files using "Call FileDlgShow" function and I allow the function to grab multiple files.
So for illustrative purposes I have three files which I selected below
When I loop the FileDlgNameList it returns the files in the following order
Basically it allows return the first file selected last.
Below is the code I am using
Call FileDlgShow(DataReadPath, "DAT Data File, *.Dat", "Data selection", True) 'Calls a data browser's For Each sElement in FileDlgNameList Call DataFileLoad(sElement, "H01-VFTS-01", "Load") Next
I am using DIAdem 2015 32 bit
Solved! Go to Solution.
The "FileDlgShow" command is in the end a configured Windows standard dialog. The result order of the selected files has to do something with order of selecting, but does not exactly represent it. Unfortunately do we have no influence on it.
I have used a work around in the past where the last item in the list is loaded first followed by all successive items.
Kind of weird it does this though.
If your files happen to be named so that an alphabetical sorting is what is desired, then I often use the following simple bubble sort:
Dim i, DlgTitle, StartPath, FiltExts FiltExts = "TDMS Files,*.tdms|TDM Files,*.tdm" DlgTitle = "Select the Data Files to Process..." StartPath = "C:\Users\Public\Documents\National Instruments\DIAdem 2012\Data" 'CurrentScriptPath Call FileDlgShow(StartPath, FiltExts, DlgTitle, TRUE) IF DlgState <> "IDCancel" THEN FilePaths = BubbleSort0(FileDlgNameList) ' sort the array of file names alphabetically ' FOR i = 1 TO UBound(FilePaths) ' Call DataFileLoad(FilePaths(i), "") ' NEXT MsgBox OutputArray(FilePaths) END IF ' file(s) selected Function BubbleSort0(NamesToSort) Dim i, iMin, iMax, SwapName, Swapped IF NamesToSort(0) = "" THEN iMin = 1 ELSE iMin = 0 iMax = UBound(NamesToSort) ReDim SortedNames(1-iMin+iMax) FOR i = 1 TO 1-iMin+iMax SortedNames(i) = NamesToSort(i-1+iMin) NEXT ' i Do ' Until bubble sort of NamesToSort() is finished Swapped = False FOR i = 0 TO UBound(SortedNames)-1 IF StrComp(UCase(SortedNames(i)), UCase(SortedNames(i+1))) > 0 THEN SwapName = SortedNames(i) SortedNames(i) = SortedNames(i+1) SortedNames(i+1) = SwapName Swapped = True END IF ' Name(i) and Name(i+1) need to be swapped NEXT ' i Loop Until NOT (Swapped) BubbleSort0 = SortedNames End Function ' BubbleSort0() Function OutputArray(ArrayVar) Dim i, HdrMsg, Msg HdrMsg = " i " & vbTAB & "ArrayValues(i)" & vbCRLF HdrMsg = HdrMsg & "-----" & vbTAB & String(60, "-") FOR i = 1 TO UBound(ArrayVar) Msg = Msg & " " & i & " " & vbTAB & ArrayVar(i) & vbCRLF NEXT ' i OutputArray = Msg End Function ' OutputArray()
DIAdem Product Support Engineer
Sorting them is helpful but I was more interested in loaded them as the are selected as opposed to loading the first selected file last.
My solution was simple
For i = 0 to Ubound(FileDlgNameList) If i = 0 Then Call DataFileLoad(FileDlgNameList(Ubound(FileDlgNameList) Else Call DataFileLoad(FileDlgNameList(i-1) End If Next