Искусственный интеллект. Строки, контекст и волны на Паскале - страница 19

Шрифт
Интервал


), которая производит ту же операцию, но на уровне 1 символа.


Илл. 23. Процедуры «поднятия» букв из строчных в прописные GetUps (для строк) и GetUp (для отдельного символа).


Ознакомившись с ними вы можете сделать вывод о принципе их работы. Чтобы не заменять все буквы по одной, процедура GetUp работает с диапазонами кодировок символов, меняя их нужным образом. В данном случае это уже упомянутые диапазоны кодировки DOS: английские строчные буквы от a до z (коды 97—122) и русские строчные буквы от а до я (коды 160—175, 224—239). Определив «попадание» в строчную кодировку мы уже знаем, в какую «сторону» и на какое число следует изменить код, вычесть или прибавить. В частности, для изменения английских строчных символов из кода символа вычитается число 32; а в русских, – до буквы «п» также вычитается 32, с буквы «р» – вычитается 80.


Поскольку процедура Getups изначально готовилась как процедура нормализации, по своему опыту в ней сразу использовались и дополнительные подготовительные элементы как вложенная процедура Deldbspace – удаления двойных и тройных пробелов, а также пробелов, стоящих перед началом и в конце строки:


Илл.24. Процедура «очистки» строки от двойных-тройных пробелов, а также пробелов в начале и в конце строки.


Теперь постараемся подытожить то, что мы получили.

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

Вернемся к нашей проблеме с кодировкой, но теперь будем во всеоружии:


Илл. 25. Обработка ненормализованной строки из кодировки Win, которая содержит лишние пробелы.


Здесь исходная строка написана в кодировке Win и содержит лишние пробелы. Мы перекодируем ее в кодировку DOS, с помощью процедуры Decodetodos, переводим в верхний регистр (и убираем лишние пробелы) с помощью процедуры Getups, и получаем последнее слово строки «раму».


Илл. 26. Нормализация данных привела к требуемому результату, нужному слову в нужном написании.


Следует упомянуть еще о нескольких базовых процедурах работы со строками в Паскале.

Преобразования строк

Str (N, S); – преобразует число N в строку S.

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