При разработке очередного модуля ИС Бутово встала задача поиска из произвольной строки диагноза выбрать присутствующие там коды МКБ.
Кодов МКБ есть огромное множество. Структура кода описана так:
В общем случае код это буква с двумя цифрами и через точку, могут быть, ещё две цифры. При этом в диагноз коды внесены иногда не с латинской буквой, а русским аналогом, точка иногда заменена на пробел, количество цифр может быть разное.
В качестве примера приведу произвольный диагноз и выбранные коды:
Как быть?!
От идеи перебора кодов отказался сразу. Интерпретатор RSL такой подход явно не одобрит. Подумал и родился интересный, на мой взгляд, код основанный на замене символов и поиске шаблонов.
В этом фрагменте перебираю записи с диагнозами и текст диагнозов преобразую к виду шаблона кода МБВ, а именно:
- меняю все возможные буквы (включая русские) кода МКБ на «собаку»
- меняю все цифры на «решётку»
- меняю «точку» на «решётку»
- и наконец, меняю возможные варианты шаблона (буква и несколько цифр) на «червячки»
А дальше всё просто:
Далее, в цикле последовательно «выкусываем» всех червячков — это и есть коды МКБ…
Код программы получился кратким и весьма эффективным. Такой подход может быть использован и для других задач.