Conversations with Obiwantje cleared up what each part needs to do, allowing me to remove unnecessary pieces and clean up the logic behind each output.
The outputs from this program help with organizing roms that are in hard drives that are disconnected from the computer. This is mainly for people with disconnected arrays, but can be used to maintain a "best missing" list at all times as well.
The next step is to include the "source DAT name" in the dupe field instead of just "false". It will still be changed to "true" on merging, however. This will allow for multi-dat AB output since each unique source can have the non-dupe roms outputted. This will require a change in WriteToDat2 as well to enable "AB" mode, or at least a field called source that is default empty. If it's not empty, it tries to write out ONLY things that match that source. Maybe merge it in to the "diff" mechanic. Actually, if it's a flag, it will just output every variant: All in A, All in B, All in both, All not in both. Pretty easy.
This change makes it mostly functional, having a way to both parse and merge in one step and output from the database. The issue is that the output from Parse2 doesn't match Parse OR Parse + Merge. Duplicates don't seem to be added in the first case and there are a differing number of roms in the second.
The new merging process is both parse and merge in one step using an in-memory database. The next steps are to get the data in this database and write it out properly.