), которая производит ту же операцию, но на уровне 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.
Иногда это требуется для операций над числовыми данными, например, для преобразования даты и времени в наборы символов строкового типа. Дело в том, что в Паскале мы не можем смешивать данные разных типов, и для этого требуется привести их к одному типу.