Ich habe Probleme mit diesem:Visual Basic Sortierung ein Array mit eingelesenen Daten aus Textdatei
Die btnDisplay_Click Verfahren sollte die fünf Namen in der Datei enthaltenen states.txt lesen, speichern jeweils in einem fünf- Element eindimensionales Array. Die Prozedur sollte das Array in absteigender Reihenfolge sortieren und dann den Inhalt des Arrays im Listenfeld anzeigen.
Mit meinem Code kann ich die 5 Zustandsnamen in der Listbox anzeigen lassen, sie werden jedoch nicht sortiert.
erste Iteration CODE (alt):
Public Class frmMain
Private Sub btnDisplay_Click(sender As Object, e As EventArgs) Handles btnDisplay.Click
'Declare an array for 5 states
Dim strStates(4) As String
Dim strStateName As String
'Sort the array in descending order
Array.Sort(strStates)
Array.Reverse(strStates)
'Declare variable to hold stream reader object
Dim inFile As IO.StreamReader
'Check if txt file exists before opening to avoid run time error/crash
If IO.File.Exists("states.txt") Then
'Open the file
inFile = IO.File.OpenText("states.txt")
'Loop instructions until end of file is reached
Do Until inFile.Peek = -1
'Read a line
strStateName = inFile.ReadLine
'Add line (state) to list box
lstNames.Items.Add(strStateName)
Loop
'Close the file
inFile.Close()
Else
'Show a message box telling user file can't be found
MessageBox.Show("File does not exist or cannot be found.", "States", MessageBoxButtons.OK, MessageBoxIcon.Information)
End If
End Sub
Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click
Me.Close()
End Sub
End Class
habe ich versucht, als auch die Sortierlinien innerhalb der Schleife setzt. Wie bekomme ich dies, um das sortierte Array in der Listbox anzuzeigen?
zweite Iteration CODE (aktuellen):
Public Class frmMain
Private Sub btnDisplay_Click(sender As Object, e As EventArgs) Handles btnDisplay.Click
'Declare an array to hold all 5 states
Dim strStates(4) As String
'Declare variable to hold loop counts
Dim i As Integer = 0
'Declare variable to hold stream reader object
Dim inFile As IO.StreamReader
'Check if txt file exists before opening to avoid run time error/crash
If IO.File.Exists("states.txt") Then
'Open the file
inFile = IO.File.OpenText("states.txt")
'Loop instructions until end of file is reached
Do Until inFile.Peek = -1
'Read a line and store in array
strStates(i) = inFile.ReadLine
'Message box to confirm array loop is working correctly
MessageBox.Show(strStates(i))
'Manually increment array counter
i = i + 1
Loop
'Close the file
inFile.Close()
'Sort the array in descending order
Array.Sort(strStates)
Array.Reverse(strStates)
'Output to list box
lstNames.Items.Add(strStates(i)) 'error thrown here
Else
'Show a message box telling user file can't be found
MessageBox.Show("File does not exist or cannot be found.", "States", MessageBoxButtons.OK, MessageBoxIcon.Information)
End If
End Sub
Sie sortieren das Array, bevor Sie etwas einfügen. – Plutonix
Ja, es scheint, dass das Problem tatsächlich darin liegt, die Wörter aus der Textdatei in das Array zu bekommen. Ich habe gerade erkannt, dass der Code das nicht tut (daher gibt es nichts zu sortieren). Es setzt die Wörter Zeile für Zeile in das Listenfeld. Ich arbeite immer noch daran, aber jede Hilfe wird geschätzt. –
Tun Sie sich einen Gefallen und entfernen Sie das Array. Verwenden Sie stattdessen eine 'List (of string)'. Es dauert nur 5 Minuten, um zu lernen, wie man sie benutzt. Eine der Möglichkeiten, wie sie besser sind, ist, dass Sie nicht wissen müssen, wie groß sie sind: Sie messen sich selbst. Fügen Sie dann 'strStateName' zur Liste hinzu. Verwenden Sie am Ende die Liste als Datenquelle: 'lstNames.DataSource = myNameList'. Stellen Sie sicher, dass Sie die Liste außerhalb dieser Methode deklarieren. – Plutonix