Как я могу объединить несколько строк в файле gedcom?

Как объединить строки с маркером "CONC" с предыдущей строкой в файле, так чтобы результат выглядел как оригинальный текст, то есть чтобы часть строки или строки с маркером "CONC" были слиты с предыдущей строкой, не содержащей "CONC"?
  • 26 января 2024 г. 15:58
Ответы на вопрос 2
Файлы GEDCOM используются для хранения информации о генеалогических деревьях, и в них могут использоваться маркеры "CONC" или "CONT" для указания продолжения содержимого строки. "CONC" означает "concatenation", что указывает на то, что текст следует непосредственно за предыдущим без пробела между строками, в то время как "CONT" означает "continuation", что указывает на продолжение текста на новой строке с добавлением пробела.

Чтобы объединить строки с маркером "CONC" с предыдущей строкой в текстовом редакторе, вы можете использовать следующий алгоритм:

1. Откройте файл GEDCOM в текстовом редакторе поддерживающем регулярные выражения.
2. Используйте функцию поиска и замены с регулярными выражениями.
3. В поиске введите регулярное выражение, которое будет искать новые строки с маркером "CONC" и захватывать текст после этого маркера:
   ```
   (\n\d+ CONC )(.+)
   ```
4. В замене введите выражение, которое удалит новую строку и маркер "CONC", оставив только нужный текст:
   ```
   $2
   ```
5. Выполните замену по всему документу.

Если вы хотите делать это с помощью скрипта, например, на Python, вам нужно будет прочитать файл, обработать каждую строку и применить логику объединения там, где это необходимо. Вот пример скрипта Python, который делает именно это:

```python
# Функция для чтения и обработки файла GEDCOM
def concat_conc(filename):
    with open(filename, 'r', encoding='utf-8') as file:
        lines = file.readlines()

    new_lines = []
    skip = False

    for i in range(len(lines)):
        if 'CONC' in lines[i]:
            # Пропускаем, если мы уже добавили содержимое CONC к предыдущей строке
            if skip:
                skip = False
                continue
            # Убираем пробелы и переносы строк у CONC и CONCAT
            new_lines[-1] = new_lines[-1].rstrip('\n') + lines[i].split('CONC', 1)[1].lstrip()
            skip = True
        else:
            if not skip:
                new_lines.append(lines[i])

    return new_lines

# Используем функцию и записываем результаты в новый файл
filename = 'path_to_your_gedcom_file.ged'
output_filename = 'path_to_output_file.ged'

new_lines = concat_conc(filename)

with open(output_filename, 'w', encoding='utf-8') as file:
    file.writelines(new_lines)

print(f"Обработка файла '{filename}' завершена. Результат записан в '{output_filename}'.")
```

Этот скрипт считывает исходный файл GEDCOM, ищет строки с маркером "CONC", объединяет их с предыдущей строкой и записывает новый, обработанный файл. Убедитесь, что вы указали правильные пути к файлам для `filename` и `output_filename`.
Готовый модуль: https://www.npmjs.com/package/gedcom
Похожие вопросы