Вопрос по префиксам для лог. программ
Давно хотел задать вопрос по префиксам, назрел он давно, а сейчас в связи с написанием нового лога, стал очень актуальным.
Известно, что многие логи, написанные или пишущиеся сейчас используют в качестве базы файлы .cty, где содержистя вся информация о CQ Zone, ITU Zone. Вот именно об этом мой вопрос. Возьмем рассмотрим например, две ситуации:
1) CE9/KC4 (Antarctica) - СQ: 12, 13, 29, 30, 32, 38, 39 и ITU: 67, 69-74.
2) B (China) - СQ: 23, 24 и ITU: 33, 42, 43, 44.
Данные согласно DXCC List 2008. Для China существует деление по цифре в префиксе и первой букве суффикса, например: BY6Q - China (Hu Bei), СQ: 24, ITU: 44. И так далее. То есть можно составить некий "маппинг" для определения зон корректно. Однако для случая 1) ситуация более сложная. Так как например, префикс KC4 у нас используется для многих станций, например, McMurdo, Palmer, Byrd - все в разных зонах. Заносить в базу данных весь список, а он есть конечно, не совсем удобно, да и не рационально - он огромен просто. Сейчас мы в nGenLog используем именно такой "тупой" маппинг. И сие не есть оптимально.
Кроме этого есть и вторая, насущная проблема. Например для Аргентины: LU#G[A-O] - Chaco и LU#G[P-Z] - Formosa, при учете их на дипломы. Здесь нам необходимо отсечь сам префикс, например, LU1, затем определить первую букву суффикса - G, а далее проверить на оставшиеся буквы, чтобы точно определить провинцию. Сейчас делаем это на основе регулярных выражений (Regular Expression), но создать "универсальную" маску для сравнения пока не удается. Слишком много вариантов. Писать специальный парсер - может и идея, но тоже слишком много ветвлений.
Отсюда вопрос: существует ли наиболее удобный способ для решения данной проблемы? Кто как ее решал в своих логах, тем более многие из них на форуме обсуждались. Исходный код не нужен - нужна хорошая идея и алгоритм реализации.
Кто-нибудь может подсказать, как решить такую задачку? Любые идеи приветствуются.