Искусственный интеллект. Строки, контекст и волны на Паскале - страница 9
Эти проблемы открывают целый пласт операционных задач, связанных с кодировками.
Кодировки
Ввод данных в стандартном окне программы DOS осуществляется в кодировке DOS ASCII. Также и данные, которые в нем отображаются, имеют кодировку DOS.
В случае, если нам требуется обрабатывать данные из какого-либо внешнего источника, например из приложения «Блокнот», скорее всего, потребуется перекодирование из Win-кодировки. «Скорее всего» поскольку символы цифр, пробелов, пунктуации и английских букв имеют одинаковые адресные значения как в кодировке Win, так и в DOS; но символы дополнительных языков, например кириллицы, имеют различные значения в различных кодировках. Между тем если и вывод и ввод осуществляется в фоновом режиме, и как исходные данные так и обрабатываемые находятся в одной кодировке, перекодирование из одной кодировки в другую также может и не потребоваться. (Например, в случае, когда мы принимаем в обработку данные, записанные в кодировке Win, и записываем их часть в другой файл, имеющий ту же кодировку Win).
Для разбора кодировки символов нам понадобится следующая пара функций:
CHR (x) – указывает на символ с числом X из символьной таблицы (это можно сделать и служебным обозначением «#x», например K:=#32, — в данном случае, значение k будет равно пробелу, символу с кодом «32» в соответствии с таблицей символов ASCII).
ORD (k) – возвращает код символа K из символьной таблицы.
Здесь, K имеет тип Char (символ). Операции с символами схожи с операциями со строковым типом, например к переменной строчного типа мы можем добавить символ:
S:=S+K;
Здесь, если содержимое S=«Мама мыла раму», а K=«c», мы получим значение S=«Мама мыла рамуc»;
Значения таблицы символов по величине равны одному байту, следовательно, они могут принимать численные значения в диапазоне от 0 до 255.
Чтобы вывести стандартную таблицу символов, нам понадобится следующая программа:
Илл. 12. Программа для вывода таблицы символов ASCII DOS.
Мы несколько усложнили ее для того, чтобы получить ровную таблицу: здесь мы выделили код символа другим цветом, и добавили символы: «0» к двузначным и «00» однозначным числам.
Так мы выводим значения таблицы символов ASCII в DOS-кодировке, кроме управляющих символов с кодами «11» («vertical tab»/ «вертикальная табуляция»), «12» («form feed»/ «смена страницы») и «13» («Enter»). Также был «испорчен» управляющий символ «8», равнозначный команде удаления предыдущего символа с клавишей «Backspace».26
Илл. 13. Результат вывода таблицы символов в программе Tabsym.
Здесь, символы с кодами до 32 являются служебными.
Кстати, из управляющих символов в будущем нам могут понадобиться:
«Тab» – #9
«Enter» – #13
и возможно, «Esc» – #27.
Несмотря на то, что они не имеют явного представления в виде конкретного обозначения, но они так же записываются в тексте, как и все остальные. То есть, взглянув на строку мы не увидим что там есть символ с кодом «13» («Enter»), но при обработке этой строки последним символом может оказаться символ с кодом «13». Это особенно важно понимать при обработке предварительно сохраненных файлов.
Что в этой таблице является очевидным: мы можем выделить значения чисел от 0 до 9 (коды 48—57); ряд символов пунктуации и специальных знаков (коды 33—47); английские прописные (большие) буквы от A до Z (коды 65—90); английские строчные (маленькие) буквы от a до z (коды 97—122); русские прописные (большие) буквы от А до Я (коды 128—159); русские строчные (маленькие) буквы от а до я (коды 160—175, 224—239) отдельно буквы Ё (240) и ё (241); и элементы псевдографики (коды 176—223).