What is the easiest way to sort this properly?
H 1.txt
H 10.txt
H 100.txt
H 1000.txt
H 2.txt
H 3.txt
H 4.txt
H 5.txt
Want it to be like this.
H 1.txt
H 2.txt
H 3.txt
H 4.txt
H 5.txt
H 10.txt
H 100.txt
H 1000.txt
Printable View
What is the easiest way to sort this properly?
H 1.txt
H 10.txt
H 100.txt
H 1000.txt
H 2.txt
H 3.txt
H 4.txt
H 5.txt
Want it to be like this.
H 1.txt
H 2.txt
H 3.txt
H 4.txt
H 5.txt
H 10.txt
H 100.txt
H 1000.txt
this sort might suit your needs. There are probably several others that could be implemented:VB Code:
Private Sub Form_Load() ' Load the test array Dim sArray(7) As String sArray(0) = "H 1.txt" sArray(1) = "H 10.txt" sArray(2) = "H 100.txt" sArray(3) = "H 1000.txt" sArray(4) = "H 2.txt" sArray(5) = "H 3.txt" sArray(6) = "H 4.txt" sArray(7) = "H 5.txt" ' Sort Code (Selection Sort) Dim I As Long, J As Long, sTemp As String, N As Long ' Loop through array For I = LBound(sArray) To UBound(sArray) - 1 For J = I + 1 To UBound(sArray) If Val(Split(sArray(I), " ")(1)) >= Val(Split(sArray(J), " ")(1)) Then ' Swap them sTemp = sArray(I) sArray(I) = sArray(J) sArray(J) = sTemp End If Next J Next I ' Print Result For I = LBound(sArray) To UBound(sArray) Debug.Print sArray(I) Next I End Sub
Hey bushmobile,
You are splitting it on a space. What if the filename contains no spaces?
I want to be able to sort any set of files.
Today, it might be:
H 1.txt
H 10.txt
H 100.txt
H 5.txt
Tomorrow, it might be:
T--1.txt
T--10.txt
T--100.txt
T--5.txt
you'll have to make a function to get the Number from the string. I make no claims that these are the fastest ways.
There are two different functions because they do slightly different things. The example will show you:VB Code:
Private Sub Form_Load() Debug.Print GetNum("T--10-05.txt") Debug.Print GetNum2("T--10-05.txt") End Sub Private Function GetNum(ByVal sText As String) As Long Dim N As Long For N = 1 To Len(sText) If Not IsNumeric(Mid$(sText, N, 1)) Then Mid$(sText, N, 1) = Chr$(0) Next N GetNum = Val(Replace(sText, Chr$(0), vbNullString)) End Function Private Function GetNum2(ByVal sText As String) As Long Dim N As Long For N = 1 To Len(sText) If IsNumeric(Mid$(sText, N, 1)) Then GetNum2 = Val(Mid$(sText, N)): Exit Function End If Next N End Function
Thank You, I will try it and let you know.