Solved

Listbox sorting numerically

Posted on 2004-08-17
6
306 Views
Last Modified: 2008-03-06
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
Comment
Question by:JHalstead
  • 3
  • 2
6 Comments
 
LVL 25

Expert Comment

by:RonaldBiemans
ID: 11821891
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
 

Author Comment

by:JHalstead
ID: 11822041
Object reference not set to an instance of an object.  Occured on the first ReDim statemt.  str=nothing
0
 
LVL 25

Expert Comment

by:RonaldBiemans
ID: 11822080
oeps, sorry

dim str(0) as string
dim int(0) as integer
0
Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

 

Author Comment

by:JHalstead
ID: 11822202
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
 
LVL 25

Expert Comment

by:RonaldBiemans
ID: 11822222
No problem, go to community service and get your points refunded
0
 
LVL 2

Accepted Solution

by:
Lunchy earned 0 total points
ID: 11824385
Closed, 125 points refunded.
Lunchy
Friendly Neighbourhood Community Support Admin
0

Featured Post

Free Tool: Postgres Monitoring System

A PHP and Perl based system to collect and display usage statistics from PostgreSQL databases.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

A while ago, I was working on a Windows Forms application and I needed a special label control with reflection (glass) effect to show some titles in a stylish way. I've always enjoyed working with graphics, but it's never too clever to re-invent …
Calculating holidays and working days is a function that is often needed yet it is not one found within the Framework. This article presents one approach to building a working-day calculator for use in .NET.
Nobody understands Phishing better than an anti-spam company. That’s why we are providing Phishing Awareness Training to our customers. According to a report by Verizon, only 3% of targeted users report malicious emails to management. With compan…

839 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question