Parse Gedcom to SQLite-Database



我是一个业余爱好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

PersonEvents

 - ID: Integer
 - PersonID: Integer
 - EventType: Varchar // e.g. BIRT, DEAT, BURI, CHR
 - Date: Varchar
 - Description: Varchar
 - Order: Integer

RelationshipEvents

 - 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

我加载gedcom文件通过TextInputStream(工作良好)。不,我需要解析每一行。

<标题> Gedcom-Individual-Sample h1> 会看到,Level-Numbers向我们展示了一个"树结构"。所以我认为这将是最好和最简单的方法来解析文件到分离对象(PersonObj, RelationshipObj, EventObj等)到JSONItem,因为有很容易得到一个节点的孩子。稍后,我可以简单地读取节点、子节点来创建数据库条目。但是我不知道如何创建这样一个算法。 有人能帮我一下吗?

要快速解析Gedcom行,请尝试以下方法:

将整个文件读入String并拆分行:

dim f as FolderItem = ...
dim fileContent as String = TextInputStream.Open(f).ReadAll
fileContent = fileContent.DefineEncoding (Encodings.WindowsLatin1)
dim lines() as String = ReplaceLineEndings(fileContent,EndOfLine).Split(EndOfLine)

使用RegEx解析每行以提取其3列

dim re as new RegEx
re.SearchPattern = "^(d+) ([^ ]+)(.*)$"
for each line as String in lines
  dim rm as RegExMatch = re.Search (line)
  if rm = nil then
    // nothing found in this line. Is this correct?
    break
    continue // -> onward with next line
  end
  dim level as Integer = rm.SubExpressionString(1).Val
  dim code as String = rm.SubExpressionString(2)
  dim value as String = rm.SubExpressionString(3).Trim
  ... process the level, code and value
next

RegEx搜索模式意味着它查找行开头("^"),然后查找一个或多个数字("d")、一个空白、一个或多个非空白字符("[^]"),最后查找字符串末尾("$")之前的任何其他字符("。")。每个组周围的括号用于使用SubExpression()提取它们的结果。

rm = nil检查将在该行不包含至少一个数字、一个空白和至少一个字符时执行。如果Gedcom文件格式不正确或有空行,可能会出现这种情况。

相关内容

  • 没有找到相关文章

最新更新