Опубликовано: Прочитано Прочитано: 1

PGN не импортируется: как найти и исправить ошибку без потери анализа

PGN не импортируетсяPGN может открываться в одной программе и получать Invalid PGN или Cannot parse в другой. Это не всегда означает, что весь файл испорчен: причиной может быть один ход, вариант, нестандартный служебный токен или ограничение конкретного импортера.

Ниже - безопасный способ найти первый проблемный участок, исправить только его и проверить, что комментарии, варианты и теги партии сохранились.

Сначала сохраните исходный PGN

Не исправляйте единственный экземпляр файла. Сохраните неизменный оригинал и сделайте рабочую копию. Если это личный архив, полезно оставить исходный файл отдельно даже после успешного исправления: он может содержать данные, которые один сервис не понимает, но другая программа умеет читать.

PGN - переносимый формат, но одинаковое расширение файла не гарантирует одинаковое поведение всех программ. Стандарт описывает общую структуру, а конкретные импортеры отличаются строгостью проверки и поддержкой дополнительных возможностей. Подробнее о том, что хранит PGN и что может теряться при переносе, разобрано отдельно.

Диагностика: от симптома к первой ошибке

  1. Работайте только с копией. Оригинал не очищайте и не пересохраняйте поверх него.
  2. Отделите одну партию. Если в файле несколько партий, скопируйте проблемную партию в отдельный тестовый PGN. Некоторые способы импорта рассчитаны на одну партию или ограниченное число партий, поэтому отказ всего файла еще не доказывает ошибку шахматной записи.
  3. Проверьте ту же копию вторым независимым импортером или просмотрщиком. Если проблема воспроизводится в нескольких местах, вероятнее ошибка самой записи. Если отказывает только один сервис, возможны его ограничения или неподдерживаемое расширение. Это диагностический сигнал, а не абсолютный тест валидности.
  4. Найдите первое место, где разбор ломается. Если программа показывает номер строки, хода или проблемный токен, начинайте с него. Если точка ошибки не указана, используйте тестовую копию: обрежьте хвост после завершенного хода основной линии, находясь вне комментария и варианта, временно поставьте * и в теге Result, и в конце movetext. Если укороченная версия импортируется, постепенно возвращайте следующие фрагменты, пока не появится первый сбой.
  5. Классифицируйте причину. Сначала определите, сломан ли заголовок, начальная позиция, конкретный ход, вариант, комментарий или нестандартный служебный токен.
  6. Исправьте минимально. Меняйте только подтвержденный проблемный участок. Не удаляйте все комментарии, варианты и дополнительные теги просто потому, что после этого файл начинает загружаться.
  7. Повторите импорт и сравните результат. Проверяйте не только то, что партия открылась, но и то, что сохранились нужные теги, комментарии, варианты и итог партии.

Симптом, вероятная причина и безопасный следующий шаг

Симптом Вероятный класс причины Что проверить сначала
Ошибка появляется до первого хода Теги или начальная позиция Квадратные скобки и кавычки в tag pairs; для партии не из начальной позиции - связку SetUp "1" + FEN.
Ошибка указывает на конкретный ход SAN или шахматная легальность Позицию непосредственно перед этим ходом и сам ход: корректно ли записаны фигура, взятие, превращение, шах/мат и неоднозначность.
Основная линия читается, сбой появляется рядом с вариантом RAV - рекурсивный вариант Ближайшие круглые скобки, место начала варианта и легальность ходов внутри него. Не удаляйте остальные варианты, пока не найден конкретный проблемный блок.
Файл начинает работать только после удаления комментариев или аннотаций Проблемный фрагмент внутри аннотаций либо ограничение импортера Верните исходную копию и локализуйте первый комментарий, NAG или вариант, после которого появляется сбой. Само наличие комментариев и вариантов не делает PGN неправильным.
В записи встречается служебный ход вроде -- Vendor extension Проверьте, что этот токен означает в исходной программе. Например, ChessBase использует -- для null move, которого нет в стандартной SAN. Не заменяйте такие токены глобально без понимания их смысла.
Одна программа открывает файл, другая - нет Различия парсеров или режима импорта Тот же неизмененный фрагмент во втором независимом инструменте и документацию конкретного импортера. Не объявляйте файл безусловно неправильным по результату одного парсера.
В одном файле много партий, а загружается одна или импорт завершается ошибкой Ограничение контейнера или конкретного import-flow Отдельную копию одной партии. Если она импортируется, проблема может быть не в ходах, а в режиме пакетного импорта.
Ошибка появляется в самом конце Результат партии Последний marker movetext: 1-0, 0-1, 1/2-1/2 или *. В стандартном PGN он должен совпадать со значением тега Result.

Что в PGN относится к стандарту, а что может быть расширением

Полезно разделять три уровня, потому что внешне они находятся в одном текстовом файле.

  • Стандартное ядро PGN. Теги партии, movetext с ходами в SAN, комментарии, NAG, варианты RAV и marker результата имеют определенный синтаксис. Для архивной/export-записи базой служат семь тегов: Event, Site, Date, Round, White, Black, Result.
  • Дополнительные стандартные данные. PGN допускает дополнительные tag pairs. Для партии, начавшейся не с обычной начальной расстановки, используется SetUp "1" вместе с FEN.
  • Расширения конкретных программ. Программа может записывать служебные конструкции, которые удобны внутри ее собственной базы, но не входят в стандартный SAN или поддерживаются не всеми импортерами.

Из этого следует важное правило: сообщение Invalid PGN описывает результат работы конкретного парсера. Оно не сообщает автоматически, какой именно слой сломан.

Как локализовать ошибку, если программа не показывает строку

Самый безопасный ручной способ - сокращать только тестовую копию партии и каждый раз оставлять синтаксически завершенный префикс.

  1. Выберите место примерно в середине основной линии после полностью записанного хода.
  2. Удалите из тестовой копии все, что идет после этого места. Не обрывайте текст внутри {...} или (...).
  3. Для этой временной копии поставьте [Result "*"] и завершите movetext символом *.
  4. Попробуйте импорт. Если он прошел, проблема находится позже; если нет - раньше или в сохраненной части.
  5. Повторяйте с более узким диапазоном, пока не останется небольшой фрагмент, после добавления которого появляется ошибка.

После локализации вернитесь к полной рабочей копии и исправляйте уже конкретную причину. Диагностические обрезки не должны становиться новой архивной версией партии.

Типичные причины внутри записи ходов

Некорректный SAN. PGN использует стандартную алгебраическую нотацию. Ошибка может быть маленькой: неверный символ фигуры, пропущенное уточнение при неоднозначном ходе, неправильное обозначение взятия или превращения. Проверяйте ход в контексте позиции, а не только как текст.

Шахматно невозможный ход. Строка может выглядеть правдоподобно, но быть нелегальной из фактической позиции. Часто это значит, что настоящий сбой произошел раньше: пропущен ход, перепутан порядок или неверно задана начальная позиция.

Поврежденный вариант. RAV записывается в круглых скобках и может быть вложенным. Потерянная скобка или вариант, начинающийся не из той позиции, способен остановить более строгий парсер.

Нестандартная служебная конструкция. Экспортирующая программа может сохранить информацию, понятную ей самой, но неизвестную другому инструменту. Тогда безопаснее выяснить смысл конкретной конструкции и заменить или удалить только ее в переносимой копии.

Почему не стоит начинать с удаления всех комментариев и вариантов

Комментарии и RAV являются нормальной частью PGN, а не мусором. Существует специальный reduced export format без комментариев, вариантов и NAG, но это намеренно упрощенное представление. Если ваша цель - перенести тренерский разбор или собственный анализ, превращать файл в reduced-вариант только ради того, чтобы importer перестал ругаться, означает потерять часть полезных данных.

Удаление всех аннотаций допустимо как краткий диагностический эксперимент на отдельной копии: например, чтобы понять, находится ли проблема в main line или в слое анализа. После этого нужно вернуться к оригиналу и найти минимальный проблемный блок.

Когда лучше переэкспортировать файл

Если исходная программа умеет отдельно экспортировать обычный PGN для обмена с другими приложениями, переэкспорт часто безопаснее ручной массовой правки. Но исходный файл все равно сохраните: переносимая версия может не содержать часть vendor-specific данных.

Если речь идет о постоянном архиве, храните исходные партии и переносимые копии раздельно. Практическая схема такого хранения описана в материале «Личный архив шахматных партий».

Что проверить после исправления

  • партия импортируется в нужный сервис или программу;
  • имена игроков, дата, тур, результат и другие нужные теги не исчезли;
  • результат в теге Result совпадает с финальным marker movetext;
  • для нестандартной начальной позиции сохранились SetUp и FEN;
  • комментарии на нужных ходах остались на месте;
  • варианты открываются из правильных позиций;
  • NAG и другие важные оценки не потерялись;
  • после исправленного участка нет второго сбоя.

Если непонятны обозначения вроде $1 или $16, отдельно разобраны NAG-коды и другие обозначения в шахматных комментариях.

Короткий алгоритм

Оригинал сохранить -> работать на копии -> проверить одну партию -> сравнить поведение двух импортировщиков -> найти первый сбой -> определить класс причины -> исправить только проблемный фрагмент -> повторить импорт -> проверить теги, комментарии и варианты.

Такой подход медленнее кнопки «удалить все аннотации», но сохраняет то, ради чего PGN часто и переносят между программами: не только ходы, но и накопленный анализ.