AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Gedcom-Datei parsen

Ein Thema von hansklok · begonnen am 11. Dez 2014 · letzter Beitrag vom 7. Apr 2018
Antwort Antwort
hansklok

Registriert seit: 14. Apr 2004
Ort: Karlsruhe
318 Beiträge
 
Delphi 2010 Architect
 
#1

AW: Gedcom-Datei parsen

  Alt 12. Dez 2014, 14:12
Ausserdem muss man im Zweifelsfall erst die gesamte Datei ausgelesen haben, um auf die Referenzen auch zugreifen zu können.
Da hat Sir Rufo recht!
Wobei ich gerade überlege (ich hab allerdings keine Ahnung von Genealogie-Programmen) dass es eh nicht möglich(?)/einfach ist diese Objekte OOP-mäßig miteinander zu verknüpfen (assoziieren?). Hätte jetzt gedacht, dass die Objekte sortenrein in entsprechenden Collections liegen und in anderen Objekten gerade mal die Referenz-ID auf diese gespeichert wird und man dann die Collection fragen muss: Gib mir mal die Familie mir der ID F12, oder so. (Zumindest die Objekte auf Ebene 0).
Objekte auf höheren Ebenen würden wahrscheinlich mit dem übergeordneten Objekt erzeugt und im übergeordneten Objekt "verwaltet". Referenziert würden die glaub ich ala @I12!P2@ oder so, hab da aber bisher kein konkretes Beispiel für gesehen nur die Spezi so verstanden, das es das geben könnte.
Genauso ist es. Es werden nur die Verweiszeiger, also die ReferenceIDs gespeichert. Alle Hauptobjekte werden in Collections verwaltet (INDI, FAM, SOUR, OBJ, NOTE).
Code:
0 INDI @foo@
Ist nicht falsch, aber in dem Kontext unsinnig.
Code:
0 NOTE @foo@
macht schon mehr Sinn
Sir Rufo, da hast Du wiederum recht, allerdings schreibt der Standard explizit folgende Notation für Hauptobjekte außer HEAD und TRLR vor:

0 @I123@ INDI
0 @F123@ FAM
0 @N123@ NOTE
0 @S123@ SOUR
0 @O123@ OBJ

Header und Trailer (kommen einmalig pro Datei vor!):
0 HEAD
0 TRLR

Ich hänge mal den übersetzten Xojo-Code (Basic) ran. Allerdings kommt es zu Exceptions (habe das kommentiert). Auch, was nicht geht. Vielleicht findet Ihr den Fehler.
Achso: Xoxo kennt keine StringBuilder-Klasse. ich habe jetzt einfach einen String definiert und ihm immer wieder die neuen Teile angehängt. Das ist doch dasselbe, oder? Siehe OutputNode().

Danke für diesen angeregten, spannenden Thread.
Angehängte Dateien
Dateityp: pdf Delphipraxis GedcomParser.pdf (56,3 KB, 22x aufgerufen)
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.740 Beiträge
 
Delphi 6 Enterprise
 
#2

AW: Gedcom-Datei parsen

  Alt 12. Dez 2014, 14:40
Das fehlende List.Contains(ANode) musst du wohl selber nachbauen, wenn die Collection das nicht kann. Im einfachsten Fall einfach eine Prozedur, der man Collection und Element übergibt und die dann durch alle Elemente iteriert und schaut, ob es das Element schon gibt.

Oder aber Dictionary statt Collection nehmen, vllt. kann das mehr?
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Gedcom-Datei parsen

  Alt 12. Dez 2014, 15:10
Ja, der StringBuilder ist nur schneller und rührt nicht so im Speicher herum.
Delphi-Quellcode:
LStr := '';
for LIdx := 1 to 1000 do
  LStr := LStr + 'a';
Result := LStr;
ist analog zu
Delphi-Quellcode:
LSB := TStringBuilder.Create();
try
  for LIdx := 1 to 1000 do
    LSB.Append( 'a' );
  Result := LSB.ToString;
finally
  LSB.Free;
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
hansklok

Registriert seit: 14. Apr 2004
Ort: Karlsruhe
318 Beiträge
 
Delphi 2010 Architect
 
#4

AW: Gedcom-Datei parsen

  Alt 13. Dez 2014, 00:18
...ach verdammt, ich kriege es nicht zum laufen.

Was wäre denn noch ein Konzept so eine Datei, ressourcenschonend, einzulesen?
  Mit Zitat antworten Zitat
ktweigel

Registriert seit: 12. Mär 2015
Ort: Stassfurt
3 Beiträge
 
Delphi 7 Professional
 
#5

AW: Gedcom-Datei parsen

  Alt 16. Okt 2016, 16:56
Hallo,
ist zwar schon eine Weile her, dass die Frage diskutiert wurde, aber ich doktere seit Jahren an demselben Problem herum.

Eigentlich will ich lediglich ein möglichst reines GEDCOM (Version 5.5.1) schreiben und benutze dazu das Programm AGES 2.0 (http://www.daubnet.com/ages), weil es die Daten sofort in diesem Format speichert und einliest. Dabei sind die Unterschiede zum 'reinen' GEDCOM durch anschließende Bearbeitung leicht zu entfernen (z.Bsp. das von AGES benutzte Feld _UID). Anschließend möchte ich die textlichen Teile in einem listenartigen Ausdruck mittels LaTeX ausdrucken. AGES lässt einem zwar in der Reportgestaltung ziemlich freie Hand, hat aber leider nicht an allen Stellen alle notwendigen Felder zur Verfügung. Insbesondere der Hinweis auf die Quellennummer, die ich gern in einer Hochzahl hinter dem jeweiligen Eintrag hätte, ist nicht möglich.

Vor Jahren habe ich mich einmal mit dem GEDCOM-Parser für Delphi 'My Family Tree' (https://sourceforge.net/projects/myf...urce=directory - testproj-win32-0.1.1.zip) auseinandergesetzt, bin aber nicht bis zum Letzten durchgestiegen.

Ein weiteres Programm, das LaTeX-Ausdrucke von GEDCOM-Dateien vorsieht, ist LifeLines, das aber seit Jahren nicht weiterentwickelt wird.

Meine Frage an hansklok ist nun, ob er mit seinem Problem weitergekommen ist und mich eventuell an seinen Fortschritten teilhaben lässt, oder ob ich mich in das oldie LifeLines einarbeiten soll.

Gruß ktweigel (Thomas)
  Mit Zitat antworten Zitat
hansklok

Registriert seit: 14. Apr 2004
Ort: Karlsruhe
318 Beiträge
 
Delphi 2010 Architect
 
#6

AW: Gedcom-Datei parsen

  Alt 17. Okt 2016, 16:26
Meine Frage an hansklok ist nun, ob er mit seinem Problem weitergekommen ist und mich eventuell an seinen Fortschritten teilhaben lässt, oder ob ich mich in das oldie LifeLines einarbeiten soll.
Lieber Thomas,
ja, ich bin noch an der Sache dran. Nur dauert meine Arbeit noch an, da wir es mit einer sehr komplexen Struktur zu tun haben und alle möglichen genealogischen Zusammensetzungen (Cousin/en-Ehe, Inzucht etc.) berücksichtigt werden müssen. Das ist alles, was ich bisher dazu sagen kann. Ich halte an dieser Stelle aber auf dem Laufenden. Bei genaueren Fragen, Anregungen und Wünschen, gerne eine persönliche Nachricht hier schreiben.

Gruß hansklok
  Mit Zitat antworten Zitat
ktweigel

Registriert seit: 12. Mär 2015
Ort: Stassfurt
3 Beiträge
 
Delphi 7 Professional
 
#7

AW: Gedcom-Datei parsen

  Alt 17. Okt 2016, 19:32
Meine Frage an hansklok ist nun, ob er mit seinem Problem weitergekommen ist und mich eventuell an seinen Fortschritten teilhaben lässt, oder ob ich mich in das oldie LifeLines einarbeiten soll.
Lieber Thomas,
ja, ich bin noch an der Sache dran. Nur dauert meine Arbeit noch an, da wir es mit einer sehr komplexen Struktur zu tun haben und alle möglichen genealogischen Zusammensetzungen (Cousin/en-Ehe, Inzucht etc.) berücksichtigt werden müssen. Das ist alles, was ich bisher dazu sagen kann. Ich halte an dieser Stelle aber auf dem Laufenden. Bei genaueren Fragen, Anregungen und Wünschen, gerne eine persönliche Nachricht hier schreiben.

Gruß hansklok
Lieber hansklok,
das mit den komplexen Strukturen kann ich nur bestätigen. Ich habe mich deshalb auch bisher davor gescheut, die Daten in einer Datenbank zu halten. Aber wenn man GEDCOM benutzt wird man dafür mit x. rekursiven Strukturen 'belohnt'. Bin nur Hobbyprogrammierer. Werde mir jetzt noch mal das Programm 'Ancestromania' anschauen (http://www.liberlog.fr/spip.php?page...&id_article=30), ob ich es aus den Quellen zum Laufen bekommen und ob ich dann eventuell an den Berichten etwas herumschrauben kann. Eine tex-Datei aus Lazarus heraus (mein Delphi geht auf Windows 8.1 nicht mehr) habe ich immerhin schon hinbekommen.

Am liebsten wäre es mir allerdings, man bekäme den Quellcode von AGES, das ja in DELPHI geschrieben wurde und könnte, falls man ihn versteht, die eigenen Bedürfnisse einprogrammieren.


Gruß Thomas (ktweigel)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz