还是自问自答了 Private Function FileNameComparer(ByVal name1 As String, ByVal name2 As String) As Integer Dim n1 As MatchCollection = New Regex("\d").Matches(name1) Dim n2 As MatchCollection = New Regex("\d").Matches(name2) Dim sNumber1, sNumber2 As String For Each m As Match In n1 sNumber1 &= m.Value Next For Each m As Match In n2 sNumber2 &= m.Value Next If IsNumeric(sNumber1) = False OrElse IsNumeric(sNumber2) = False Then Return [String].Compare(name1, name2, False) Else Dim sChar1, sChar2 As String Dim s1 As MatchCollection = New Regex("[^\d]").Matches(name1) Dim s2 As MatchCollection = New Regex("[^\d]").Matches(name2) For Each m As Match In s1 sChar1 &= m.Value Next For Each m As Match In s2 sChar2 &= m.Value Next If sChar1 = sChar2 Then Return CType(sNumber1, Integer).CompareTo(CType(sNumber2, Integer)) Else Return [String].Compare(name1, name2, False) End If End If End Function
问题是,一个目录由很多文件,文件名的长度不一致,文件名中数字的位置也不一致,不能判断何时要反过结果来全部反过结果来,升序变成了降序,但是结果并不是期望的
给你点好东西研究下吧~~·
ND6020B11.c
ND6020B2.c
ND6020B10.pc
ND6020B1.h排序结果为:
ND6020B1.h
ND6020B10.pc
ND6020B11.c
ND6020B2.cwindows资源管理器排序结果为:
ND6020B1.h
ND6020B2.c
ND6020B10.pc
ND6020B11.c我也想知到资源管理器依据什么来排序的,但他的排序结果是我所期望的
这篇文章以前看过,对我现在这个问题帮助不大,不过还是谢谢你
Private Function FileNameComparer(ByVal name1 As String, ByVal name2 As String) As Integer
Dim n1 As MatchCollection = New Regex("\d").Matches(name1)
Dim n2 As MatchCollection = New Regex("\d").Matches(name2)
Dim sNumber1, sNumber2 As String For Each m As Match In n1
sNumber1 &= m.Value
Next
For Each m As Match In n2
sNumber2 &= m.Value
Next If IsNumeric(sNumber1) = False OrElse IsNumeric(sNumber2) = False Then
Return [String].Compare(name1, name2, False)
Else
Dim sChar1, sChar2 As String
Dim s1 As MatchCollection = New Regex("[^\d]").Matches(name1)
Dim s2 As MatchCollection = New Regex("[^\d]").Matches(name2) For Each m As Match In s1
sChar1 &= m.Value
Next
For Each m As Match In s2
sChar2 &= m.Value
Next If sChar1 = sChar2 Then
Return CType(sNumber1, Integer).CompareTo(CType(sNumber2, Integer))
Else
Return [String].Compare(name1, name2, False)
End If
End If
End Function