An array is a variable (space in memory), which is split into chunks, and accessed by means of an index or subscript.
You can sort an array either in ascending or descending order.
NOTE: The sort will be based on the first character of each line in the array.
This procedure executes a Bubble Sort on an array of numbers:
Public Class Form1
Dim NumberInList As Integer
Dim Swapped As Boolean = False
Dim List(8) As Integer
Dim Dummy As Integer
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'set up the array
List(0) = 44
List(1) = 22
List(2) = 15
List(3) = 17
List(4) = 3
List(5) = 41
List(6) = 32
List(7) = 9
'show list in listbox
For count = 0 To 7
lstNumbers.Items.Add(List(count))
Next
End Sub
Private Sub cmdStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdStart.Click
'carry out bubble sort on list of numbers
NumberInList = 8
For Pass = 1 To NumberInList
Swapped = False
For count = 1 To NumberInList
If List(count) < List(count - 1) Then
Dummy = List(count)
List(count) = List(count - 1)
List(count - 1) = Dummy
Swapped = True
lstNumbers.Items.Clear()
For count2 = 0 To 8
lstNumbers.Items.Add(List(count2))
Next
End If
Next
Next
End Sub
End Class
This procedure aims to sort a textfile into descending order, then find the top 5 performers.
The textfile is read into an array and the array is sorted, before writing the contents of the array back to the textfile.
Textfile BEFORE bubble sort:
Textfile AFTER bubble sort:
'The code sorts a textfile in ascending order, depending on a value in a certain position in the text file. In this instance, I sorted on a score in positions 31/32. The FIND button above, sorts the file, then outputs the top 5 performers.
Public Class Form1
Private Sub btnFindTop5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFindTop5.Click
'Firstly, the array needs to be sorted into descending score order
'Using a bubble sort:
'reads the player stats text file
Dim MyTop5PerformersFile() As String = File.ReadAllLines("playerstats.txt")
Dim TempSort As String
Dim Filelength As Integer = MyTop5PerformersFile.Length
For count = 1 To UBound(MyTop5PerformersFile)
For position = UBound(MyTop5PerformersFile) To 1 Step -1
'Note, this code will only work if numbers 1-9 are stored as " 1", " 2", etc (i.e. with a space before any single digits.
If Mid(MyTop5PerformersFile(position), 31, 2) < Mid(MyTop5PerformersFile(position - 1), 31, 2) Then
TempSort = MyTop5PerformersFile(position - 1)
MyTop5PerformersFile(position - 1) = MyTop5PerformersFile(position)
MyTop5PerformersFile(position) = TempSort
End If
Next
Next
File.WriteAllLines("playerstats.txt", MyTop5PerformersFile)
'To get top 5 performances:
For recordnumber = 0 To 4
If recordnumber = 0 Then
lblFirstName1.Text = Mid(MyTop5PerformersFile(recordnumber), 11, 10)
lblSurname1.Text = Mid(MyTop5PerformersFile(recordnumber), 21, 10)
lblLastScore1.Text = Mid(MyTop5PerformersFile(recordnumber), 31, 2)
End If
If recordnumber = 1 Then
lblFirstName2.Text = Mid(MyTop5PerformersFile(recordnumber), 11, 10)
lblSurname2.Text = Mid(MyTop5PerformersFile(recordnumber), 21, 10)
lblLastScore2.Text = Mid(MyTop5PerformersFile(recordnumber), 31, 2)
End If
If recordnumber = 2 Then
lblFirstName3.Text = Mid(MyTop5PerformersFile(recordnumber), 11, 10)
lblSurname3.Text = Mid(MyTop5PerformersFile(recordnumber), 21, 10)
lblLastScore3.Text = Mid(MyTop5PerformersFile(recordnumber), 31, 2)
End If
If recordnumber = 3 Then
lblFirstName4.Text = Mid(MyTop5PerformersFile(recordnumber), 11, 10)
lblSurname4.Text = Mid(MyTop5PerformersFile(recordnumber), 21, 10)
lblLastScore4.Text = Mid(MyTop5PerformersFile(recordnumber), 31, 2)
End If
If recordnumber = 4 Then
lblFirstName5.Text = Mid(MyTop5PerformersFile(recordnumber), 11, 10)
lblSurname5.Text = Mid(MyTop5PerformersFile(recordnumber), 21, 10)
lblLastScore5.Text = Mid(MyTop5PerformersFile(recordnumber), 31, 2)
End If
Next
End Sub
End Class