Enno Borgsteede asked a question on Genealogy SE not too long ago on How to Find loops in a GEDCOM file. There were very few programs identified as being able to detect loops in a GEDCOM file, with Behold being one of them.
An ancestral loop is where a person is their own ancestor. This can happen if you by mistake add your grandparent to be a child of your grandson. That may sound like a farfetched thing to do, but mistakes can happen, especially when relatives have identical or similar names. These mistakes often happen when people use matching capabilities that some programs provide – another reason to avoid merging data.
Enno was kind enough to let me use the file he was having trouble with. Behold found 14 loops in that file. But I realized it wasn’t correct. Some loops were being missed. Also the report wasn’t as helpful as it could be, so it’s been rewritten and included, not in the log file, but in its own section of the Everything Report. It’s a data problem, not a GEDCOM problem. So you need to see it.
Now that corrections have been made, Behold now finds 26 loops with 202 people. That included only 123 different people, so many of the people were in multiple loops.
If your program has ancestral loops, then you’ll want to repair those problems.The new section, titled “Ancestral Loops’” will be found just before the File Information. It will only be included if your program has ancestral loops. Check it out. You might be surprised. Of the 421 test files that I have run through Behold, I found that 35 of the log files included the old message indicating at least one loop in that file. That may be indicative that 8% of you may have a loop in your data.
My friend Andy Hatchett a while ago gave me a test GEDCOM which he calls his BetaBeast. It’s got 365,036 lines in it with 21,998 people and is messed up on purpose to torture us programmers. I was going to issue this release earlier today, but BetaBeast stopped me. I had to rewrite the ancestral loops routine to spit out the results in pieces so that Behold wouldn’t freeze. BetaBeast had 2,727 ancestral loops in it. There were 3,829 unique people in those loops. But some people were in many different loops as they crossed nearly everywhere. Those 2,727 loops contained 1,522,771 people! Wow! But Behold was able to handle it, and produce a clear and complete report of all the loops.
The process to code this was very interesting. I’ll be writing a blog post about that over the weekend.