读取 GEDCOM 文件¶
此示例处理从 GEDCOM 文件中读取和打印Engee个人数据。
简介¶
GEDCOM(家谱数据通信)是不同家谱程序之间交换家谱数据的规范。大多数现代家谱计算机程序都支持以 GEDCOM 格式导入/导出数据。 在本例中,我们将创建一个简单的程序,读取 GEDCOM 文件并输出文件中指定人员的信息。
读取.ged
文件的功能¶
parse_gedcom()
功能的工作原理如下:
读取 GEDCOM 文件并提取有关人员的信息;
使用字典
individuals
,其中键是个人 ID,值是另一个字典,其中包含有关个人的信息(姓名、出生日期等); * 使用字典 ,其中键是个人 ID,值是另一个字典 其中的键是个人 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]:
检索数据的打印功能¶
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]:
读取.ged
-file 的示例¶
在示例文件夹中有一个 GEDCOM 文件example.ged
,其中包含一个家庭的个人数据示例。让我们将该文件的路径传递给 GEDCOM 阅读函数,然后打印获得的数据。
In [ ]:
# Пример использования
file_path = "$(@__DIR__)/example.ged"
individuals = parse_gedcom(file_path)
print_individuals(individuals)
正如您在单元格中看到的代码执行结果,所有家庭成员的所需数据都已打印出来。
输出¶
本例介绍从 GEDCOM 格式文件中读取个人数据并打印到 Engee 中。