2017-04-09 3 views
0

Eine kleine Aufgabe erfordert, dass ich eine Textdatei durchliest und diese Objekte in ein Objekt lege, das ich zu einer ArrayList hinzufüge. Allerdings fällt es mir schwer, den Code korrekt zu machen. In der Textdatei sind die Einträge in Gruppen von 5 durch eine Leerzeile getrennt. Meine Logik scheint nicht richtig zu funktionieren und deshalb suche ich weitere Hilfe. Beigefügt ist ein Screenshot der Textdatei, gefolgt von meinem CodeLesen in Textdateien und Eingeben von Objekten in Klassenobjekte

Public Class BrowseReservations 
    Private objectStore As ArrayList = New ArrayList() 
    Private Shared basePath As String = My.Application.Info.DirectoryPath 
    Private Shared filePath As String = Path.Combine(basePath, "reservations.txt") 

    Private Sub populateList() 
     Dim counter As Integer = 0 
     objectStore.Clear() 
     Dim rc As ReservationRecord = New ReservationRecord() 
     Dim AllLines As String() = File.ReadAllLines(filePath) 
     For i As Integer = 0 To AllLines.Count() - 1 
      If counter = 0 Then 
       rc.setfullDate(AllLines(i)) 
      ElseIf counter = 1 Then 
       rc.setmonthName(AllLines(i)) 
      ElseIf counter = 2 Then 
       rc.sethoursChartered(Convert.ToInt32(AllLines(i))) 
      ElseIf counter = 3 Then 
       rc.setyatchName(AllLines(i)) 
      ElseIf counter = 4 Then 
       rc.setyatchLength(Convert.ToInt32(AllLines(i))) 
      ElseIf counter = 5 Then 
       rc.settotalCost(AllLines(i)) 
       objectStore.Add(rc) 
      ElseIf counter = 6 Then 'This is the empty space between groups 
       counter = -1 
      End If 
      counter += 1 
     Next 
    End Sub 
End Class 

Hier ist, wie die Textdatei aussieht nur für den Fall des Bild erscheinen tut.

04/09/2017 12:18:30
April
Catalina
$ 1235

04/09/2017 12:34:19
April
Hans Christin
$ 800

04/09/2017 12:34:33
April
Hobie
$ 7296

Anstatt jede Gruppe richtig zu ernähren, wird nur die letzte Gruppe wird in dem Objekt zugeführt. Ein Teil des Inhalts geht verloren, zB Catalina (Strings im 4. Item jeder Gruppe). Mit freundlicher

helfen
+0

'Dim rc Wie ReservationRecord = New ReservationRecord()' - Sie mehrere Instanzen von 'ReservationRecord' müssen alle von ihnen zu speichern, so dass Sie wissen. –

+2

Um zu erweitern, was ich gesagt habe, behalten Sie eine 'List (Of ReservationRecord)' und haben einen Zähler pro Gruppe, so dass jedes Mal, wenn es die Leerzeile trifft, der Zähler hinzugefügt wird. Erstellen Sie dann auf der ersten (0) einen neuen Datensatz und fügen Sie ihn zu Ihrer Liste hinzu. Dann ändern Sie es kontinuierlich bis 6. –

+0

Und was könnte den Verlust einiger Informationen wie Strings verursachen? –

Antwort

1

Aufgrund meiner und Haim Katz Kommentare:

Public Class BrowseReservations 
Private objectStore As ArrayList = New ArrayList() 
Private Shared basePath As String = My.Application.Info.DirectoryPath 
Private Shared filePath As String = Path.Combine(basePath, "reservations.txt") 

Private Sub populateList() 
    Dim counter As Integer = 0 
    objectStore.Clear() 
    Dim rc As ReservationRecord 
    Dim AllLines As String() = File.ReadAllLines(filePath) 
    For i As Integer = 0 To AllLines.Count() - 1 
     If counter = 0 Then 
      rc = New ReservationRecord() 
      rc.setfullDate(AllLines(i)) 
     ElseIf counter = 1 Then 
      rc.setmonthName(AllLines(i)) 
     ElseIf counter = 2 Then 
      rc.sethoursChartered(Convert.ToInt32(AllLines(i))) 
     ElseIf counter = 3 Then 
      rc.setyatchName(AllLines(i)) 
     ElseIf counter = 4 Then 
      rc.setyatchLength(Convert.ToInt32(AllLines(i))) 
     ElseIf counter = 5 Then 
      rc.settotalCost(AllLines(i)) 
      objectStore.Add(rc) 
     ElseIf counter = 6 Then 'This is the empty space between groups 
      counter = -1 
     End If 
     counter += 1 
    Next 
End Sub 
End Class 
Verwandte Themen