' Return an array containing the names of the
' files in the directory sorted alphabetically.
Private Function SortedFiles(ByVal dir_path As String, _
Optional ByVal exclude_self As Boolean = True, Optional _
ByVal exclude_parent As Boolean = True) As String()
Dim num_files As Integer
Dim files() As String
Dim file_name As String
file_name = Dir$(dir_path)
Do While Len(file_name) > 0
' See if we should skip this file.
If Not _
(exclude_self And file_name = ".") Or _
(exclude_parent And file_name = "..") _
Then
' Save the file.
num_files = num_files + 1
ReDim Preserve files(1 To num_files)
files(num_files) = file_name
End If
' Get the next file.
file_name = Dir$()
Loop
' Sort the list of files.
Quicksort files, 1, num_files
' Return the list.
SortedFiles = files
End Function
' Use Quicksort to sort a list of strings.
'
' This code is from the book "Ready-to-Run
' Visual Basic Algorithms" by Rod Stephens.
' http://www.vb-helper.com/vba.htm
Private Sub Quicksort(list() As String, ByVal min As Long, _
ByVal max As Long)
Dim mid_value As String
Dim hi As Long
Dim lo As Long
Dim i As Long
' If there is 0 or 1 item in the list,
' this sublist is sorted.
If min >= max Then Exit Sub
' Pick a dividing value.
i = Int((max - min + 1) * Rnd + min)
mid_value = list(i)
' Swap the dividing value to the front.
list(i) = list(min)
lo = min
hi = max
Do
' Look down from hi for a value < mid_value.
Do While list(hi) >= mid_value
hi = hi - 1
If hi <= lo Then Exit Do
Loop
If hi <= lo Then
list(lo) = mid_value
Exit Do
End If
' Swap the lo and hi values.
list(lo) = list(hi)
' Look up from lo for a value >= mid_value.
lo = lo + 1
Do While list(lo) < mid_value
lo = lo + 1
If lo >= hi Then Exit Do
Loop
If lo >= hi Then
lo = hi
list(hi) = mid_value
Exit Do
End If
' Swap the lo and hi values.
list(hi) = list(lo)
Loop
' Sort the two sublists.
Quicksort list, min, lo - 1
Quicksort list, lo + 1, max
End Sub
|