Лекция 7.++Массивы в качестве параметров подпрограмм. Файлы. (1272451), страница 4
Текст из файла (страница 4)
Язык Паскаль»Приложение 1.1 Таблицы кодировки символов.2425Воробьева И.А. «Информатика. Язык Паскаль»Кодовая страница ASCII-DOS (частично)А - - - - - - 128Б - - - - - - 129В - - - - - - 130Г - - - - - - 131Д - - - - - - 132Е - - - - - - 133Ж - - - - - - 134З - - - - - - 135И - - - - - - 136Й - - - - - - 137K - - - - - - 138Л - - - - - - 139М - - - - - - 140H - - - - - - 141О - - - - - - 142П - - - - - - 143Р - - - - - - 144С - - - - - - 145Т - - - - - - 146У - - - - - - 147Ф - - - - - - 148Х - - - - - - 149Ц - - - - - - 150Ч - - - - - - 151Ш - - - - - - 152Щ - - - - - - 153Ъ - - - - - - 154Ы - - - - - - 155Ь - - - - - - 156Э - - - - - - 157Ю - - - - - - 158Я - - - - - - 159808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F1000000010000001100000101000001110000100100001011000011010000111100010001000100110001010100010111000110010001101100011101000111110010000100100011001001010010011100101001001010110010110100101111001100010011001100110101001101110011100100111011001111010011111абвгдежзийклмноп---------------------------------------------------------------------------------160161162163164165166167168169170171172173174175A0A1A2A3A4A5A6A7A8A9AAABACADAEAF10100000101000011010001010100011101001001010010110100110101001111010100010101001101010101010101110101100101011011010111010101111рстуфхцчшщъыьэюя---------------------------------------------------------------------------------224225226227228229230231232233234235236237238239E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF11100000111000011110001011100011111001001110010111100110111001111110100011101001111010101110101111101100111011011110111011101111Приложение 1.2 Как изменяют кодировки собственными силами.Бывает важно научиться работать с русскими буквами, для которых естьотличие в кодировках, работающих в приложениях под Windows и под DOS.Почему это важно: несмотря на то, что консольное приложение программыПаскаль создается средствами различных программ в Windows и там жезапускается, в некоторых средах разработки, например в Delphi, можностолкнуться с тем, что работает оно как программа DOS (это режим эмуляцииработы под системой DOS).
Поэтому, если пытаться в чистом виде работать сбазовыми типами char и string в консольном приложении с русскими буквами,можно удивиться, обнаружив на экране вместо русского слова «абракадабру».Конечно, есть разные способы преодоления этой проблемы, но самоеуниверсальное – понять принцип работы так называемых программперекодировщиков, которые не сложно написать и самостоятельно.Напоминание. Стандарт ANSI – это стандарт ASCII для системы Windows и в немрусские буквы расположены подряд: ‘А..Я, а..я’ – от 192 до 255.Стандарт ASCII-DOS (называться может иначе в других источниках) – это стандартASCII для системы DOS и в нем русский алфавит расположен с разрывом:‘А..Я, а..п’ – от 128 до 175, ‘р..я’ – от 224 до 239.2526Воробьева И.А. «Информатика.
Язык Паскаль»Чтобы написать программу, которая не будет зависеть от компилятора исреды разработки, и, в тоже время, будет «правильно» работать с русскималфавитом в режимах эмуляции приложения-DOS, надежнее всего написатьсамим две функции перекодировки: ANSIASCII-DOS для вывода на экран русских букв, написанных впрограммах Windows (например, в среде Delphi или в программе Блокнот); ASCII-DOSANSI для вывода в текстовый файл тех русских букв, которыебыли введены с клавиатуры во время работы консольного приложения.Ниже приведена полностью функция2 Rus() перекодировки ANSIASCIIDOS, которую удобно использовать всякий раз, когда нам нужно отобразить наэкран в консольном приложении (оператор Write) русские символы, работая сбазовыми типами Char и String.Когда возникает такая потребность: если русские буквы считаны из текстового файла, созданного в средеWindows (например, в программе Блокнот); если русские буквы написаны прямо в коде программы (например,write(‘Это не абракадабра.’); – на экране будет «абракадабра», а write(Rus(‘Это не абракадабра.’)); – на экране будет действительно «Это неабракадабра.»); если русские буквы получены любым другим путем в переменной типа charили string, кроме случая, когда они введены с клавиатуры в режимеконсольного приложения (т.е.
заведомо в другой кодировке).// -------------------------------------------------------// recoder: ANSI –> ASCII-DOS// ANSI ‘А..Я,а..я’ – от 192 до 255// ASCII ‘А..Я,а..п – от 128 до 175, ‘р..я’ – от 224 до 239// -------------------------------------------------------function Rus(mes: string): string;vari:integer;beginfor i:=1 to length(mes) docase mes[i] of'А'..'п': mes[i]:= Chr( Ord(mes[i]) - 64 );'р'..'я': mes[i]:= Chr( Ord(mes[i]) - 16 );end;Rus:=mes;end;//-------------------------------2Н.Культин «Основы программирования в Delphi 7.»,-- CПб: БХВ-Петербург, -- 2007г., с.1362627Воробьева И.А.
«Информатика. Язык Паскаль»Чтобы использовать эту функцию, достаточно просто вставить ее целиком вкод программы до BEGIN раздела операторов головного модуля и вызыватьследующим образом:write( Rus(‘Здесь что-то на русском языке’) );или пусть есть переменнаяStrok: string= ’Тру-ля-ля’; тогда пишем write( Rus(Strok)); и т.п.Теперь функцию-перекодировщик ASCII-DOS –> ANSI не трудно написатьсамостоятельно. Ее выгодно применять тогда, когда необходимо записатьсимволы русского алфавита в файл, если сами символы были введены склавиатуры в процессе работы в консольном режиме.27.