GEDCOM seriell gezielt manipulieren ohne Strukturänderung bzw. Datenverlust (Ages!)

Aus verschiedenen Gründen nutze ich seit 2006 und immer noch Ages! zur Dateneingabe. Dieses speichert bekanntlich direkt im GEDCOM Format. Ages! V2 wurde 2012 eingeführt bzw. bis 2014 geupdatet. Seither leider Funkstille. GEDCOM-L Kompatibilität wurde damals angekündigt, aber nicht (weitreichend?) umgesetzt.
Ich benutzte für Ausgaben und sonst Features manchmal Ahnenblatt und Gramps ohne jedoch die zugrundeliegende Haupt-GEDCOM damit zu editieren, auch weil es bei Übernahme „unerkannte“ Felder gibt.
Da ich weder Ahnenblatt oder Gramps bisher in der Eingabe und großteils auch in der Ausgabe (Gramps hätte da bei Skriptkenntnis vielleicht einen Vorteil in der Anpassung) als besser als Ages! erachte, plane ich so schnell keinen Umstieg, erst recht nicht auf Onlinedatenbanken.

Um nun doch einige mühsame Arbeiten zu automatisieren, würde mich ein Tool interessieren, welches hier Möglichkeiten bietet, ohne die Struktur der GEDCOM zu verändern. Ich suche z.B. nach:

  • Kekule-Nummern ausgehend von einer Person bei allen Vorfahren in einem GEDCOM-Feld eigener Wahl automatisch aktualisieren (inkl. Implex-Duplikate);
  • Nachfahren oder Stammlisten-Nummerierungen z.B. nach d’Aboville System ausgehend von einer Vorfahren-Person bei allen Nachfahren/Stammnamensträgern in einem GEDCOM-Feld eigener Wahl automatisch aktualisieren
  • Quellenhinterlegung ausgehend von einer Person bei allen Vorfahren oder allen Nachfahren.

Ich hatte vor Jahren GedTool lizensiert, aber dann kaum verwendet. Laut meiner Erinnerung kann dieses nicht obige Aufgabenstellungen. Gibt es eine Software die die oben gelisteten Möglichkeiten bieten könnte?
Wenn nicht, denke ich Python Tools mithilfe von KI selbst zu erstellen wäre ein möglicher, aber harter Weg (keine Erfahrungen in dieser Programmiersprache, nur alte Basic bzw. neuere Basis-JS Kenntnisse).

Ich würde da direkt auf Python gehen, da kommt man m.E. leicht rein und es gibt mindestens eine GEDCOM-Bibliothek: python-gedcom · PyPI

Allerdings würde ich vorher händisch an einem Datensatz prüfen, ob Ages die Daten beim Speichern nicht vielleicht wieder überschreibt.

1 „Gefällt mir“

Moin,

Meiner Meinung nach geht bzw. Macht das gar keinen Sinn, denn wie du ja schreibst geht das von „einer Person“ aus.
Das Programm sollte, wenn du eine Person festlegst die Nummern festlegen. Wählst du aber eine andere Person beim nächsten Mal als Startperson aus, muss das Programm es gleich neu errechnen und anzeigen.
Fest verdrahtet in einer GEDCOM ist daher sinnlos.

Es gibt zwar meines Wissens Felder im GEDCOM Standard, die man nutzen könnte um feste Informationen frei Schnauze zu hinterlegen, aber morgen schaut dein Sohn sich die Daten an und die Nummerierung stimmt nicht für ihn.

Gruß Christian

Und wenn man kein Python spricht, ChatGPT kann Beispielcode auch für diese Library liefern :wink:

Der Sinn wäre vorwiegend:
a) direkt und schnell in der GEDCOM zu erkennen, wenn eine Person ein Vorfahre von Person A, B oder C ist (sind meist Forscher mit denen ich austausche, aber auch sonst interessante Startpersonen). Ich erreiche selbst in meiner Forschung mehr als 2000 Vorfahren, Forscher mit denen ich in Kontakt bin teils ähnliche Werte bzw. über 1000. Das Brachliegenlassen von GEDCOM Feldern wie IDNO (ID-Nr.), CAST (Kaste) und SSN (Social Security ID) finde ich nicht sinnvoll. Eine lokale GEDCOM soll dem lokalen Forscher bestmöglich dienen. Spezifisch IDNO ist genau für einen solchen Zweck vorgesehen. Eine spätere Umschreibung und Anpassung (durch einen zukünftigen Forscher) ist natürlich möglich und sinnvoll.
b) die korrekte Ausgabe einer Kekule-ID bei verschiedensten Reports/Ausschnitten zu den Vorfahren von Person A, B, C, usw. ist mit den gängigen inkludierten automatisch erzeugten Kekule-Nummerierungen nicht (immer) möglich. Beispiel: Tafel oder Liste der Nachfahren von Vorfahre 518. Mit Ages! zumindest kann aber in Ausgaben ein GEDCOM Feld wie IDNO abgefragt und gefiltert (Excel Formeln) ausgegeben werden. Dies finde ich sehr sinnvoll und nützlich. Sollte ich einmal auf eine andere Software umsteigen, möchte ich dieses Feature unbedingt haben; wahrscheinlich erlaubt Gramps Ähnliches, muss aber aufwändig und langwierig (selbst) als AddOns hinzugefügt werden.

a) und b) sind unter anderem (z.B. auch extensive CSS Formatierung) Gründe warum ich (noch) mit Ages! arbeite. Ich möchte nur die Eingabe diese Felder automatisieren, da es händisch fast nicht mehr leistbar ist, dies immer wieder aktuell zu halten.

Danke. Ich habe auf github auch 2-3 Projekte gefunden, leider keines wohl in den letzten 12-18 Monaten gepflegt. Muss mir das genauer anschauen. Meine prinzipielle Frage ist, ob diese GEDCOM-Bibliotheken ein geladenes GEDCOM zunächst unverändert und komplett lassen, oder z.B. nur in der eigenen Definition vorhandene Felder in eine Datenbank/Speicherstruktur laden (JSON, SQLite, MongoDB) um diese dann zu manipulieren und neu als (in der Struktur veränderte und mit Datenverlust behaftete) GEDCOM zu schreiben. Ich befürchte zweiteres ist meist der Fall und ohne komplette Unterstützung bzw Kompatibilität mit den Routinen der Hauptsoftware wie bei mir Ages! ist dieser Bibliotheken-Ansatz schwer anwendbar.
Ich möchte nämlich die resultierende GEDCOM nach ausführlicher Prüfung in Ages! weiterverwenden und nicht nur temporär für gewisse Ausgaben.
Unter Umständen ist also eine Neuprogrammierung notwendig, die die Auswahl einer Person direkt aus der GEDCOM, Erstellung deren Vorfahren oder Nachfahrennummerierung mit Merkung der diesbezüglichen Personen, sowie das „intelligente Schreiben“ (Neu oder Update) in gewisse Felder (IDNO, CAST) der Nummerierung erlaubt.

Falls es bezüglich Python und GEDCOM einen Ort/Austausch von Codern gibt (gern Englisch) wäre ich froh diesen zu finden. Bin nämlich bezüglich „Best Practices“ für meinen Ansatz ein Anfänger und unsicher wieweit ich da komme.

Hallo ChrisR,

alle 3 gewünschten Funktionen sind in GedTool verfügbar.

Zum angesprochenen Datenaustausch mit anderen Forschern gibt es auch die Möglichkeit, ausgehend von einer beliebigen Person, alle nicht-verwandten Personen zu löschen. Dieser reduzierte Datenbestand kann anschließend noch mit einer zusätzlichen Quellenangabe bei jeder Person versehen werden.

Viele Grüße
Peter (Schulz)

Danke für den Hinweis. Um eine konkrete Frage zu stellen:
Kann ausgehend von Person A z.B. das Feld IDNO gewählt werden und in diesem nach Inhalt (z.B. „KekA 1024,1224;“) gesucht werden, dieser geupdatet oder neu geschrieben werden?
Das Feld IDNO verwende ich (manuell) bereits für einige verschiedene ID-Nummern durch „;“ getrennt. Ist also nicht einfach dies zu aktualisieren. Als Umweglösung wäre das Schreiben in ein bisher unbenutztes Feld denkbar, aber updaten auch von mehreren Implex-Kekule bzw. nur einer der abgespeicherten IDs wäre sehr wünschenswert.

Meine Verwendung muss so zwei Hardware-Generationen her um 2010 gewesen sein. Versuche die damaligen Testdateien auf den Backupplatten zu finden.

GedTool liest GEDCOM-Dateien und bereitet alle Dateninhalte in einer Excel-Tabelle spaltengerecht auf. Innerhalb von Excel können die GEDCOM-Daten anschließend bequem bearbeitet werden. Nach Abschluss der Überarbeitung schreibt GedTool alle Daten wieder zurück in das GEDCOM-Format.

Mittlerweile verwende ich nicht mehr MS Excel sondern LO Calc. Dies und meine Unkenntnis wie kompatibel das Zurückschreiben der Daten zu meinen derzeitig von Ages 2.1.0 geschriebenen UTF8 GEDCOM ist, ist ein Unsicherheitsfaktor. Es geht um Datensätze mit nahezu 50.000 Personen, teils mit umfangreichen Quellauszügen usw. hinterlegt. Bei Ahnenblatt und Gramps hatte ich wie geschrieben Datenverluste beim Import, bzw. dann beim Speichern.

Verwende auch ein Uraltprogramm, welches direkt in Gedcom speichert.
Für mich sind die Kekulenummern und 2 Nachfahrenlinien die Hauptinteressen. Wobei ich den Vorzug auf einer Nachfahrenline lege, welche sich nicht mit der 2. Nachfahrenlinie zusammentrifft.
Verwende dafür das Feld: UID
(die Nachfahrenlinien der beiden Hauptausgangslinien beginnen im gleichen Ort. Nur ist die Prio-Linie ca. 100 Jahre jünger)
Früher habe ich die Kekule und Nachfahrenlinien immer mal wieder mit GedTool (Excel) erledigt und die Grundlage dazu erstellt.
Die Information dafür ist einfach zusammengesetzt. Beispiel: 256_MK-10_MD-14 (Kekule_Nachfahrengeneration1_Nachfahrengeneration2)

Zwischenzeitlich ist für mich in der Nachfahrennummerierung nur noch die Generation rudimentär wichtig (Nachfahren-Implex). Hauptsache ich erkenne, dass die Person ein Nachkomme obiger Ausgangspersonen ist.
Heute mache ich alles direkt im Programm händisch. Der dafür notwendige Prüfcheck erledige ich mit GENViewer.

Die Menge der Nachfahren ist zwischenzeitlich über 30k groß.

Das Automatisieren im Genealogieprogramm erledige ich mit AHK (Autohotkey). Anfänglich mit einer 20er Zusatztastatur, dann mit einer 58er Zusatztastatur und jetzt auch noch mit sehr vielen Shortcuts …

Viel Spaß
Heinz

GedTool schreibt die Personennummerierung in das Kennzeichen REFN (Referenznummer).
Diese Spalte in Excel kann aber jederzeit geändert werden, z.B. in IDNO. Bei einem Implex werden aber nicht alle Kekule-Nummern in das Feld übernommen, sondern die niedrigste Kekule-Nummer mit einem * versehen, als Zeichen dafür, dass ein Implex vorliegt. Innerhalb von Excel können natürlich alle Daten mit Excel-Mitteln bearbeitet werden.

GedTool läuft nur mit MS Excel für Windows. Es gibt aber mittlerweile bei eBay komplette MS-Officepakete (z.B. Office 2016) für unter 10 €.

Wenn Sie eine GEDCOM-Datei aus Ages exportieren, diese mit GedTool bearbeiten und wieder nach Ages zurückschreiben, dann haben Sie keinen Datenverlust. GedTool verwirft keine Felder.

Viele Grüße
Peter Schulz

Danke für die detaillerte Antwort. Ich muss mir überlegen ob ich MS-Office Excel wieder installieren will, nur um manchmal (eher selten) ein Tool laufen zu lassen.
Ich plane mir Gramps bzw. AddOn Anpassung und auch Python genauer anzuschauen, da es mich grundsätzlich interessiert selbst Erweiterungen machen zu können. Es kann natürlich sein, dass ich schnell an mein Limit stosse, bzw. meine oben beschriebenen Bedingungen nicht erreiche.