Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 313
  • Last Modified:

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
    ListBox1.Items.Add(Dir(en.Current))
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.
0
JHalstead
Asked:
JHalstead
  • 3
  • 2
1 Solution
 
RonaldBiemansCommented:
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
     ListBox1.Items.Add(g)
Next
0
 
JHalsteadAuthor Commented:
Object reference not set to an instance of an object.  Occured on the first ReDim statemt.  str=nothing
0
 
RonaldBiemansCommented:
oeps, sorry

dim str(0) as string
dim int(0) as integer
0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
JHalsteadAuthor 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)
        ListBox1.Items.AddRange(ar.ToArray())



    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
 
RonaldBiemansCommented:
No problem, go to community service and get your points refunded
0
 
LunchyCommented:
Closed, 125 points refunded.
Lunchy
Friendly Neighbourhood Community Support Admin
0

Featured Post

Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

  • 3
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now