Engee 文档
Notebook

读取GEDCOM文件

此示例讨论从Engee中的GEDCOM格式文件读取和打印个人数据。

导言

GEDCOM(来自英语家谱数据通信)是不同家谱程序之间交换家谱数据的规范。 大多数现代家谱计算机程序支持GEDCOM格式的数据导入/导出。
在这个例子中,我们将创建一个简单的程序,它将读取GEDCOM文件并输出有关文件中指定的字符的信息。

阅读功能 .ged-档案

功能 parse_gedcom() 它的工作原理如下:
*读取GEDCOM文件并提取有关字符的信息;

*使用字典 individuals,其中键是人的ID,值是另一个字典
有关该人的信息(姓名,出生日期等)。);

*搜索以 0 @ 并包含 INDI 确定关于一个人的记录的开始;

*提取该人的姓名和出生日期(如果存在)。

In [ ]:
function parse_gedcom(file_path::String)
    individuals = Dict{String, Dict{String, String}}()
    current_id = ""

    open(file_path, "r") do file
        for line in eachline(file)
            line = strip(line)
            if startswith(line, "0 @") && contains(line, "INDI")

                # Найдем ID персоны
                current_id = match(r"@I\d+@", line).match
                individuals[current_id] = Dict{String, String}()

            elseif startswith(line, "1 NAME")

                # Извлечем имя персоны
                name = replace(line, r"1 NAME " => "")
                individuals[current_id]["NAME"] = name

            elseif startswith(line, "1 BIRT")
                
                # Извлечем дату рождения
                birth_date = ""
                for inner_line in eachline(file)
                    inner_line = strip(inner_line)
                    if startswith(inner_line, "2 DATE")
                        birth_date = replace(inner_line, r"2 DATE " => "")
                        break
                    end
                end
                individuals[current_id]["BIRT"] = birth_date
            end
        end
    end

    return individuals
end
Out[0]:
parse_gedcom (generic function with 1 method)

打印接收到的数据的功能

功能 print_individuals() 以人类可读的格式显示有关字符的信息。

In [ ]:
function print_individuals(individuals::Dict{String, Dict{String, String}})
    for (id, data) in individuals
        println("ID: $id")
        println("Name: $(data["NAME"])")
        if haskey(data, "BIRT")
            println("Birth Date: $(data["BIRT"])")
        end
        println()
    end
end
Out[0]:
print_individuals (generic function with 1 method)

阅读示例 .ged-档案

示例文件夹包含GEDCOM文件。 example.ged 以一个家庭的个人资料为例。 我们将此文件的路径传递给GEDCOM阅读器功能,然后打印接收到的数据。

In [ ]:
# Пример использования
file_path = "$(@__DIR__)/example.ged"
individuals = parse_gedcom(file_path)
print_individuals(individuals)
ID: @I3@
Name: Лея /Органа/
Birth Date: 04 MAY 0019

ID: @I4@
Name: Падме /Амидала/
Birth Date: 04 MAY 0046

ID: @I2@
Name: Энакин /Скайуокер/
Birth Date: 04 MAY 0041

ID: @I1@
Name: Люк /Скайуокер/
Birth Date: 04 MAY 0019

从代码单元格的结果单元格中可以看出,所有家庭成员的所需数据都已打印出来。

结论

在本例中,考虑了从Engee中的GEDCOM格式文件读取和打印个人数据。