Материал: Мансуров. Основы программирования в среде Lazarus. 2010

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

3.3Обработка символьной информации в Паскале

____________________________________________________________________

психологии, теории игр и т.д.

Компьютеры широко применяются для набора различных текстов и доку-

ментов, перевода текстов. Компьютеры сочиняют музыку, пишут стихи, играют

вшахматы. Конечно, при решении таких задач вычисления производятся, но не

втаком объеме, как при решении вычислительных задач. В основном в нечи-

словых задачах компьютер оперирует с символьной информацией.

Необходимо понимать, что вся информация, хранящаяся в памяти компью-

тера, представлена в виде двоичных чисел. Все дело в том, что под этими дво-

ичными числами понимается, действительно ли это какие-то числа или что-

либо другое. Так вот под "другое" имеются в виду символы или совокупность символов. Т.е. каждый символ кодируется в виде двоичных чисел. Только об-

рабатываются эти числа совершенно по-другому. Программист знает, когда он работает с числами, когда с символами и поэтому предусматривает для каждого случая соответствующие способы работы с этими числами. А в памяти компь-

ютера двоичное представление символа или группы символов может совпадать с каким-нибудь "настоящим" числом.

Примечательно, что возможность применения компьютеров для решения нечисловых задач понимали еще тогда, когда и компьютеров-то вообще не бы-

ло! Вот что писала знаменитая Ада Лавлейс еще в 1843 году: "Многие не све-

дущие в математике люди думают, что поскольку назначение аналитической машины Бэббиджа – выдавать результаты в численном виде, то природа проис-

ходящих в ней процессов должна быть арифметической и численной, а не ал-

гебраической и аналитической. Но они ошибаются. Машина может упорядочи-

вать и комбинировать числовые значения так же, как и буквы или любые дру-

гие символы общего характера. В сущности, при выполнении соответствующих условий она могла бы выдавать результаты и в алгебраическом виде".

В 1963 г. американская организация по стандартизации American Standards Association (ASA) предложила для представления символов, т.е. цифр, букв и других знаков специальный семибитный код, который стал называться кодовой

166

Глава 3 Более сложные элементы языка

____________________________________________________________________

таблицей ASCII (American Standard Code for Information Interchange). Номер,

который символ имеет в таблице ASCII, называется кодом этого символа. Сим-

вол можно представить, указав его в кавычках, а можно использовать значок #,

за которым следует код символа. Например, буква 'А', в таблице ASCII

имеет номер 65, т е. его код равен 65, тогда можно указать # 65 и это будет оз-

начать букву 'А'.

Однако эта кодовая таблица содержала кроме цифр и знаков только буквы английского алфавита. Поэтому был принят стандарт на 8-битную таблицу

ASCII, в которой первые 128 символов оставались те же, что и в 7-битной таб-

лице, а символы с 128 по 255 отводились для не английских символов. Позднее

Microsoft расширила таблицу ASCII и она была переименована и стала назы-

ваться ANSI (American National Standards Institute). В таблице 3.4. приведена первая половина (с кодами 0…127) этого стандарта.

Как мы видим, первая половина таблицы содержит все буквы латинского алфавита, цифры от 0 до 9, а также все наиболее употребимые знаки, такие как знак +, -, /, *, скобки и т.д.

Вторая половина символов с кодами 128…255 меняется для различных на-

циональных алфавитов. С появлением национальных локализаций для второй половины таблицы ASCII было введено понятие «кодовая страница» (code page, CP). Для кодирования русских букв в MS DOS стали применять кодировку

CP866, ранее известную как альтернативная кодировка ВЦ Академии Наук

СССР.

В Windows для представления кириллицы используется кодовая страница

CP-1251. Стандартные Windows-шрифты Arial Cyr, Courier New Cyr и Times New Roman Cyr для представления символов кириллицы (без букв 'ѐ' и 'Ё')

используют последние 64 кода (от 192 до 256): 'А''Я' кодируются значе-

ниями 192…223, 'а''я' – 224…255.

А в консоли Windows используется кодировка CP866. Этим и объясняются проблемы при выводе русских букв на экран в консольных приложениях.

167

3.3Обработка символьной информации в Паскале

____________________________________________________________________

Кодировка символов в соответствии со стандартом ANSI

 

 

 

 

 

 

 

Таблица 3.4

Код

Символ

Код

Символ

Код

Символ

Код

 

Символ

0

NUL

32

BL

64

@

96

 

`

1

SOH

33

!

65

A

97

 

a

2

STX

34

66

B

98

 

b

3

ETX

35

#

67

C

99

 

c

4

EOT

36

$

68

D

100

 

d

5

ENQ

37

%

69

E

101

 

e

6

ACK

38

&

70

F

102

 

f

7

BEL

39

'

71

G

103

 

g

8

BS

40

(

72

H

104

 

h

9

HT

41

)

73

I

105

 

i

10

LF

42

*

74

J

106

 

j

11

VT

43

+

75

K

107

 

k

12

FF

44

,

76

L

108

 

l

13

CR

45

-

77

M

109

 

m

14

SO

46

.

78

N

110

 

n

15

SI

47

/

79

O

111

 

o

16

DEL

48

0

80

P

112

 

p

17

DC1

49

1

81

Q

113

 

q

18

DC2

50

2

82

R

114

 

r

19

DC3

51

3

83

S

115

 

s

20

DC4

52

4

84

T

116

 

t

21

NAK

53

5

85

U

117

 

u

22

SYN

54

6

86

V

118

 

v

23

ETB

55

7

87

W

119

 

w

24

CAN

56

8

88

X

120

 

x

25

EM

57

9

89

Y

121

 

y

25

SUB

58

:

90

Z

122

 

z

27

ESC

59

;

91

[

123

 

{

28

FS

60

<

92

\

124

 

|

28

GS

61

=

93

]

125

 

}

30

RS

62

>

94

^

126

 

~

31

US

63

?

95

_

127

 

Существуют и другие стандарты кодировки символов. В частности, для представления букв некоторых языков, таких как китайский, японский, корей-

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

Unicode.

168

Глава 3 Более сложные элементы языка

____________________________________________________________________

Юникод, или Уникод (Unicode) — стандарт кодирования символов, позво-

ляющий представить знаки практически всех письменных языков.

Стандарт предложен в 1991 году некоммерческой организацией «Консор-

циум Юникода» (Unicode Consortium, Unicode Inc.). Применение этого стандар-

та позволяет закодировать очень большое число символов из разных письмен-

ностей: в документах Unicode могут соседствовать китайские иероглифы, ма-

тематические символы, буквы греческого алфавита, латиницы и кириллицы,

при этом становятся ненужными кодовые страницы.

Стандарт состоит из двух основных разделов: универсальный набор сим-

волов (UCS, Universal Character Set) и семейство кодировок (UTF, Unicode

Transformation Format).

Универсальный набор символов задаѐт однозначное соответствие симво-

лов кодам — элементам кодового пространства, представляющим неотрица-

тельные целые числа.

Семейство кодировок определяет машинное представление последова-

тельности кодов UCS.

Коды в стандарте Юникод разделены на несколько областей. Область с ко-

дами от U+0000 до U+007F содержит символы набора ASCII с соответствую-

щими кодами. Далее расположены области знаков различных письменностей,

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

В Lazarus по умолчанию используется кодировка UTF-8. В UTF-8 все сим-

волы разделены на несколько групп. Символы с кодами менее 128 кодируются одним байтом, первый бит которого равен нулю, а последующие 7 бит в точно-

сти соответствуют первым 128 символам 7-битной таблицы ASCII, следующие

1920 символов – кодируются двумя байтами. Последующие символы кодиру-

ются тремя и четырьмя байтами.

Для нас важным является тот факт, что символы кириллицы кодируются в

UTF-8 в точности двумя байтами.

169

3.3Обработка символьной информации в Паскале

____________________________________________________________________

Как уже отмечалось в 2.1.8. Lazarus представляет собой среду с графиче-

ским интерфейсом для быстрой разработки программ и базируется на ориги-

нальной кроссплатформенной библиотеке визуальных компонент LCL (Lazarus Component Library). Разработчиками Lazarus предложено использовать UTF-8 в LCL в качестве универсальной кодировки на всех платформах. Поэтому LCL

содержит, кроме визуальных компонентов, функции преобразования UTF-8 в

кодировку, с которой работает консоль на каждой из платформ. Функция

UTF8ToConsole() объявлена в модуле FileUtil, которая является частью LCL.

Вот почему мы должны были в наши консольные проекты добавлять библиоте-

ку LCL.

3.3.1.1. Тип Char

Для обозначения типа "символ" в Паскале используется зарезервированное слово char. Для хранения переменной типа "символ" требуется один байт па-

мяти, т.е. значением переменной типа char является один символ.

Напоминаю, что хотя компьютер обрабатывает символы, тем не менее, в

действительности он оперирует с числами, а точнее с кодами этих символов из кодовой таблицы. Таким образом, один символ может быть "больше", чем дру-

гой или "меньше". Это зависит от места расположения символов в таблице. На-

пример, символ (буква) 'B' "больше" буквы 'A', поскольку код 'B' (номер в кодовой таблице) равен 66, а код буквы 'A' равен 65 (буквы английского ал-

фавита, см. табл. 3.4.). В силу этого, над символьными переменными определе-

ны операции отношения: =, <, >, <>, <=, >=.

3.3.1.2. Функции для работы с символами

Для символьных переменных существуют следующие функции: chr(x) – возвращает значение символа по его коду;

ord(ch) – возвращает код символа ch;

170

Смотрите также:

11 Горм +
113
14
1433
1511
1632
199
204
2N4264RE
3773