读取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]:
打印接收到的数据的功能
功能 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-档案
示例文件夹包含GEDCOM文件。 example.ged 以一个家庭的个人资料为例。 我们将此文件的路径传递给GEDCOM阅读器功能,然后打印接收到的数据。
In [ ]:
# Пример использования
file_path = "$(@__DIR__)/example.ged"
individuals = parse_gedcom(file_path)
print_individuals(individuals)
从代码单元格的结果单元格中可以看出,所有家庭成员的所需数据都已打印出来。
结论
在本例中,考虑了从Engee中的GEDCOM格式文件读取和打印个人数据。