# Listbox sorting numerically

I am loading files from a directory into a Listbox using this:

Dim en As IEnumerator = OD1.FileNames.GetEnumerator
While en.MoveNext
End While

The file are named as such;  1x-111xx-1-1yy-5.toc.htm
I am needing to sort the files using the number after the yy-.  As 1,2,3,...9,10,11;  Right now sort is sorting alphabetically.

Any help on this wiuld be great, thanks.
###### Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Commented:
you could try something like this. (it's not brilliant code (redim) but it works and should give you a general idea)

dim str() as string
dim int() as integer
dim x as integer = 0
Dim en As IEnumerator = OD1.FileNames.GetEnumerator
While en.MoveNext
redim str(str.getupperbound(0) + 1)
redim int(int.getupperbound(0) + 1)
str(x) =  dir(en.current))
int(x) = Val(str(x).Substring(str(x).IndexOf("yy-") + 3, str(x).IndexOf(".") - (str(x).IndexOf("yy-") + 3)))
x += 1
End While

str.Sort(int, str)

For Each g As String In str
Next
0

Author Commented:
Object reference not set to an instance of an object.  Occured on the first ReDim statemt.  str=nothing
0

Commented:
oeps, sorry

dim str(0) as string
dim int(0) as integer
0

Author Commented:
Hi, I'm sorry to waist your time, but I got the answer from another post.  ICompare!!

Dim ar As New ArrayList(OD1.FileNames)
ar.Sort(New MySorter)

Private Class MySorter
Implements IComparer

Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements System.Collections.IComparer.Compare
Dim s1 As String = x
Dim s2 As String = y
Try
Dim i1 As Integer = s1.IndexOf("."c)
Dim j1 As Integer = s1.LastIndexOf("-"c, i1)
Dim n1 As Integer = Integer.Parse(s1.Substring(j1 + 1, i1 - j1 - 1))

Dim i2 As Integer = s2.IndexOf("."c)
Dim j2 As Integer = s2.LastIndexOf("-"c, i2)
Dim n2 As Integer = Integer.Parse(s2.Substring(j2 + 1, i2 - j2 - 1))

Return n1 - n2
Catch ex As Exception
Return String.Compare(s1, s2, True)
End Try
End Function
End Class
0

Commented:
No problem, go to community service and get your points refunded
0

Commented:
Closed, 125 points refunded.
Lunchy
0

Experts Exchange Solution brought to you by ConnectWise

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.