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.
Die Methoden sind auf Verständlichkeit ausgelegt. Deshalb auch
Gleichzeitig erleichtert das Unit-Testbarkeit.
Interessanterweise erweist sich zum Schreiben eine (anonyme) Rekursion als vorteilhaft, während beim Lesen ein Stack zur Anwendung kommt.
VB.NET-Quellcode
- Private Shared Sub Save(nodes As TreeNodeCollection, dataFile As String)
- ' zu jedem Node wird sein Level mit-gespeichert
- Dim level = 0
- Using sw = New StreamWriter(dataFile)
- Dim recurse As Action(Of TreeNodeCollection) = Sub(nds)
- level += 1
- For Each nd As TreeNode In nds
- sw.WriteLine($"{level} {nd.Text}")
- recurse(nd.Nodes)
- Next
- level -= 1
- End Sub
- recurse(nodes)
- End Using
- End Sub
- Private Shared Sub Reload(nodes As TreeNodeCollection, dataFile As String)
- 'vom Stack immer runterpoppen bis ziel-level. Dann neuen Node erzeugen und seine TreenodeCollection draufpushen
- nodes.Clear()
- Dim stk = New Stack(Of TreeNodeCollection)({nodes})
- For Each line In File.ReadAllLines(dataFile)
- Dim splts = line.Split({" "c}, 2)
- Dim level = Integer.Parse(splts(0))
- While stk.Count > level : stk.Pop() : End While
- stk.Push(stk.Peek.Add(splts(1)).Nodes)
- Next
- End Sub
Shared
, sodass keine ausserhalb der Methode liegenden Randbedingungen mitzuberücksichtigen sind.Gleichzeitig erleichtert das Unit-Testbarkeit.