Чтение файлов GEDCOM¶
В этом примере рассматривается чтение и вывод на печать в Engee персональных данных из файла формата GEDCOM.
Введение¶
GEDCOM (от англ. Genealogical Data Communications) — спецификация для обмена генеалогическими данными между разными генеалогическими программами. Большинство современных генеалогических компьютерных программ поддерживает импорт/экспорт данных в формате GEDCOM. В этом примере мы создадим простую программу, которая будет читать файл GEDCOM и выводить информацию о персонах, указанных в файле.
Функция чтения .ged
-файла¶
Функция parse_gedcom()
работает следующим образом:
читает файл GEDCOM и извлекает информацию о персонах;
использует словарь
individuals
, где ключом является ID персоны, а значением — другой словарь с информацией о персоне (имя, дата рождения и т.д.);ищет строки, начинающиеся с
0 @
и содержащиеINDI
, чтобы определить начало записи о персоне;извлекает имя персоны и дату рождения, если они присутствуют.
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
Функция печати полученных данных¶
Функция print_individuals()
выводит информацию о персонах в удобочитаемом формате.
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
Пример чтения .ged
-файла¶
В папке примера располагается файл GEDCOM example.ged
с примером персональных данных одной семьи. Передадим путь к этому файлу в функцию чтения GEDCOM, а затем выведем на печать полученные данные.
# Пример использования
file_path = "$(@__DIR__)/example.ged"
individuals = parse_gedcom(file_path)
print_individuals(individuals)
Как видно из ячейки с результатами выполнения кодовой ячейки, требуемые данные по всем членам семьи были выведены на печать.
Вывод¶
В этом примере были рассмотрены чтение и вывод на печать в Engee персональных данных из файла формата GEDCOM.