Treenodes persistieren in TextDatei

    • VB.NET

      Treenodes persistieren in TextDatei

      Hier ist gezeigt, wie man Baumstrukturen zeilenweise abspeichern und wieder einlesen kann, am Beispiel von Treenodes.
      Interessanterweise erweist sich zum Schreiben eine (anonyme) Rekursion als vorteilhaft, während beim Lesen ein Stack zur Anwendung kommt.

      VB.NET-Quellcode

      1. Private Shared Sub Save(nodes As TreeNodeCollection, dataFile As String)
      2. ' zu jedem Node wird sein Level mit-gespeichert
      3. Dim level = 0
      4. Using sw = New StreamWriter(dataFile)
      5. Dim recurse As Action(Of TreeNodeCollection) = Sub(nds)
      6. level += 1
      7. For Each nd As TreeNode In nds
      8. sw.WriteLine($"{level} {nd.Text}")
      9. recurse(nd.Nodes)
      10. Next
      11. level -= 1
      12. End Sub
      13. recurse(nodes)
      14. End Using
      15. End Sub
      16. Private Shared Sub Reload(nodes As TreeNodeCollection, dataFile As String)
      17. 'vom Stack immer runterpoppen bis ziel-level. Dann neuen Node erzeugen und seine TreenodeCollection draufpushen
      18. nodes.Clear()
      19. Dim stk = New Stack(Of TreeNodeCollection)({nodes})
      20. For Each line In File.ReadAllLines(dataFile)
      21. Dim splts = line.Split({" "c}, 2)
      22. Dim level = Integer.Parse(splts(0))
      23. While stk.Count > level : stk.Pop() : End While
      24. stk.Push(stk.Peek.Add(splts(1)).Nodes)
      25. Next
      26. End Sub
      Die Methoden sind auf Verständlichkeit ausgelegt. Deshalb auch Shared, sodass keine ausserhalb der Methode liegenden Randbedingungen mitzuberücksichtigen sind.
      Gleichzeitig erleichtert das Unit-Testbarkeit.