Wie ergibt sich aus den CSV-Daten, daß Hugo Huber der Vater von Albert Huber ist?
Das ergibt sich aus dem Dateiformat. 1. Person, 2. Vater, 3. Mutter.
Leider nein:
- Albert Huber,1910
- Charlotte Klein,1912
- Utz Lang,1917
- Berta Waldhorst,1920
- Hugo Huber,1889
Hugo Huber ist 5., nicht 2. Da bestehen noch mehr Beziehungen zwischen den einzelnen Zeilen (Stammbaum), die aber nicht so offensichtlich sind.
Woher weiß ich das? Ich hab' das "1 - 2 - 3" in Python gemacht, und festgestellt, daß das nicht ausreicht, um denselben Output zu bekommen.
- class Person:
- def __init__(self, name, gebdat):
- self.name = name
- self.gebdat = gebdat
- self.vater = None
- self.mutter = None
- kinder = []
- vaeter = []
- muetter = []
- fh = open("Daten.txt", "r")
- l = "k"
- kcount = -1
- while True:
- line = fh.readline()
- if not line:
- break
- line = line.rstrip()
- a = line.split(",")
- if l == "k":
- kind = Person(a[0], int(a[1]))
- kinder.append(kind)
- l = "v"
- kcount += 1
- continue
- if l == "v":
- vater = Person(a[0], int(a[1]))
- vaeter.append(vater)
- kinder[kcount].vater = vater
- l = "m"
- continue
- if l == "m":
- mutter = Person(a[0], int(a[1]))
- muetter.append(mutter)
- kinder[kcount].mutter = mutter
- l = "k"
- continue
- fh.close()
- for k in kinder:
- print k.name
- print k.vater.name
- print k.mutter.name
- print
Display More
Eben mußte ich mir die Datei nochmal anschauen. Also die stimmt:
Erst kommt der Sohn, Hansi Huber, dann die Eltern: Robert Huber und Ute Schmitt, dann die Großeltern: Albert Huber, Charlotte Klein, Utz Lang und Berta Waldhorst. Dann die Urgroßeltern: Hugo Huber, usw.
Klar kann man noch die Geschwister, 1. und weitere Ehefrauen berücksichtigen etc.
Aber mir ging es hier nur um 1.: Die Pointertechnik in einer Struktur. 2.: Daten aus einer Datei auslesen und 3.: Rekursives Durchsuchen einer Baumstruktur.
Zum Thema Baumstruktur:
So wie es in dem Bsp. mit einem Array pf mit fester Anzahl Elementen ist, ist ja eigentlich auch nicht so toll.
Normalerweise würde man das doch folgendermaßen machen oder?:
Datensatz einlesen, Speicher für das Strukt "Person" allozieren und in den Baum hängen.
Mit den Zeigern auf die Baumelement ist ja dann auch das Einfügen, Löschen und Verschieben ganz einfach. Einfach nur die Zeiger umbiegen.
(Hatte ich letztens mal in dem Buch "C von A bis Z" von Jürgen Wolf entdeckt und direkt bestellt. Das gibt's auch online.)