【发布时间】:2015-09-01 07:15:37
【问题描述】:
我是一个爱好 Xojo 用户。我想将 Gedcom 文件导入我的程序,尤其是 SQLite 数据库。
数据库结构
表格
人员
- ID: Integer
- Gender: Varchar // M, F or U
- Surname: Varchar
- Givenname: Varchar
关系
- ID: Integer
- Husband: Integer
- Wife: Integer
儿童
- ID: Integer
- PersonID: Integer
- FamilyID: Integer
- Order: Integer
人物事件
- ID: Integer
- PersonID: Integer
- EventType: Varchar // e.g. BIRT, DEAT, BURI, CHR
- Date: Varchar
- Description: Varchar
- Order: Integer
关系事件
- ID: Integer
- RelationshipID: Integer
- EventType: Varchar // e.g. MARR, DIV, DIVF
- Date: Varchar
- Description: Integer
- Order: Integer
我写了一个有效的 Gedcom-Line-Parser。他将单个 Gedcomline 拆分为:
- Level As Integer
- Reference As String // optional
- Tag As String
- Value As String // optional
我通过 TextInputStream 加载 Gedcom 文件(工作正常)。不,我需要解析每一行。
Gedcom-个人样本
0 @I1@ INDI
1 NAME George /Clooney/
2 GIVN George
2 SURN Clooney
1 BIRT
2 DATE 6 MAY 1961
2 PLAC Lexington, Fayette County, Kentucky, USA
你会看到,Level-Numbers 向我们展示了一个“树状结构”。所以我认为将文件解析为分离的对象(PersonObj、RelationshipObj、EventObj 等)到 JSONItem 中是最好和最简单的方法,因为它很容易获得节点的子节点。稍后,我可以简单地读取节点、子节点来创建数据库条目。但我不知道如何创建这样的算法。
谁能帮帮我?
【问题讨论】:
-
由于这个问题相当复杂和个别,可能需要一些来回讨论,我认为这个问题最好在 Xojo 论坛中提出。
-
嗨 Thomas Tempelmann ;) 我以前做过很多次,但看起来,没有人对这个领域真正感兴趣:/ 这就是我在这里问的原因。也许你可以给我更多的意见?
-
我什至不明白你的困难在哪里。一方面,你可以描述算法,但你说你不能编码。有很多事情你可能知道也可能不知道,我假设你什么都不知道,问的有点太多了,我在这里提供了一个完整的解决方案,可能要花半个小时。
-
好吧,我花了整个晚上来编写和描述一个结构和一个简单的解析器。它工作正常但我认为,如果 Gedcom 文件有 10000 或更多行,应用程序将冻结。我会通知你的!
-
是的,如果您有一些工作并需要优化或修复它的想法,这是人们更愿意提供帮助的地方,因为他们可以确切地看到您所做的事情。
标签: algorithm vb6 realbasic xojo gedcom