Обработка текста - одна из часто встречающихся задач программирования. Если требуется обработать какие-либо текстовые данные, то без знаний того материала, что будет изложен ниже, просто не обойтись. Особенно, если данные сформированы не лично вами, а какой-либо сторонней программой или другим человеком.
Символы
Символ - это одна единица текста. Это буква, цифра, какой-либо знак. Кодовая таблица символов состоит из 256 позиций, т.е. каждый символ имеет свой уникальный код от 0 до 255. Символ с некоторым кодом N записывают так: #N. Прямо так символы и указываются в коде программы. Так как код символа представляет собой число не более 255, то очевидно, что в памяти символ занимает 1 байт и имеет числовой код в соответствии с таблицей кодов ASCII. Как известно, менее байта размерности нет. Точнее, она есть - это бит, но работать с битами в программе мы не можем: байт - минимальная единица. Так же посмотреть таблицу символов и их коды можно с помощью стандартной утилиты "Таблица символов", входящей в Windows (ярлык расположен в меню Пуск - Программы - Стандартные - Служебные).Есть и другие кодовые таблицы, в которых 1 символ представлен не одним байтом, а двумя. Это Юникод (Unicode). В таблице Юникода есть символы всех языков мира. К сожалению, работа с Юникодом довольно затруднена и его поддержка пока что носит лишь локальный характер. 2 байта также называют словом (word). Отсюда и название соответствующего числового типа данных - Word (число, занимающее в памяти 2 байта, значения от 0 до 65535). Количество "ячеек" в таблице Юникода составляет 65536 и этого вполне достаточно для хранения всех языков мира. Если вы решили, что "1 байт - 256 значений, значит 2 байта - 2*256 = 512 значений", советую вспомнить двоичную систему и принцип хранения данных в компьютере.
СтрокиСтрока, она же текст - это набор символов, любая их последовательность. Соответственно, один символ - это тоже строка, тоже текст. Текстовая строка имеет определённую длину. Длина строки - это количество символов, которые она содержит. Если один символ занимает 1 байт, то строка из N символов занимает соответственно N байт.
Строка представляет собой особую форму одномерного массива символов, которая имеет существенное отличие. Массив символов имеет фиксированную длину (количество элементов), которая определяется при описании. Строка имеет две разновидности длины:
- Общая длина строки, которая характеризует размер памяти, выделяемый строке при описании;
- Текущая длина строки (всегда меньше или равна общей длине), которая показывает количество смысловых символов строки в каждый конкретный момент времени.
Типы данных
Для работы с символами и строками существуют соответствующие типы данных:
Char - один символ (т.е. 1 байт);
String
- строка символов, текст (N байт).
Официально строки вмещают лишь 255 символов. Для хранения больших текстов и текстов со специальными символами существуют специальные типы данных AnsiString и WideString (последний, кстати, двухбайтовый, т.е. для Юникода).
Действия с символами- Для задания текстовых значений в Pascal используются одинарные кавычки (не двойные!). Т.е. когда вы хотите присвоить строковой переменной какое-либо значение, следует сделать это так: ch:='k';
- Пустой символ обозначается двумя подряд стоящими апострофами. Пример: ''.
- Если апостроф входит в строку как литера, то при записи он удваивается. Пример: ''''.
Операции
#<положительная константа целого типа>
Результат - символ, номер которого в таблице ASCII соответствует заданному числу. Например,
#100 = 'd'
#39 = '''' {апостроф}
#232 = 'ш'
#1000 = 'ш' {потому что (1000 mod 256)= 232}
Стандартные функции
chr(c) |
"превращает" номер символа в символ. Действие этой функции аналогично действию операции #. Например: c:= chr(48); {c: char} {c = '0'} |
оrd(a) |
Обратная к функции chr()Например: a:=ord(‘0’) {a:byte} {a=48} |
ord(chr(c)) = c и chr(ord(a)) = a |
|
upcase(c) |
превращает строчную букву в прописную. Символы, не являющиеся строчными латинскими буквами, остаются без изменения (в их число входят и все русские буквы).Например: c:=’f’; upcase(c); Результат: c=F |
Действия со строками
- Над строками определены операции сравнения <,>,=,<>,<=,>=.
- Две строки сравниваются посимвольно, слева направо, по кодам символов.
- Если одна строка меньше другой по длине, недостающие символы короткой строки заменяются символом с кодом 0.
- Выражения типа char можно присваивать любым строковым переменным.
- Переменные, описанные как строковые с разными максимальными длинами, можно присваивать друг другу, хотя при попытке присвоить короткой переменной длинную лишние символы будут отброшены.
- Строки можно объединять с помощью операции конкатенации, которая обозначается знаком + .
…
s1 := 'John';
s2 := 'Black';
s1 := s1 + ' ' + s2;
// Результат: 'John Black';
- Если вы хотите жёстко ограничить длину текста, хранимого в строковой переменной, можно сделать это следующим образом:
var s:string[10]; {В скобках указывается максимальная длина строки.}
Символьная информация
Литерная (строковая) информация
Один символ
а:=’f ’;
b:=’*’;
c:=’4’; d:=’ ’
Строка символов
a:=’строка’;
b:=’текстовая информация’
c:=’ ’
Процедуры и функции для работы со строками.
- Length(s:string):integer
Функция возвращает в качестве результата значение текущей длины строки-параметра
Пример.
n := length('Pascal'); {n будет равно 6}
- Concat(s1,[s2,...,sn]:string):string
Функция выполняет слияние строк-параметров, которых может быть произвольное количество. Каждый параметр является выражением строкового типа. Если длина строки-результата превышает 255 символов, то она усекается до 255 символов. Данная функция эквивалентна операции конкатенации "+" и работает немного менее эффективно, чем эта операция.
- Copy(s:string; index:integer; count:integer):string
Функция возвращает подстроку, выделенную из исходной строки s, длиной count символов, начиная с символа под номером index.
Пример.
s := 'Язык Turbo Pascal';
s2 := copy(s, 1, 4); {s2 будет равно 'Язык'}
s3 := copy(s, 6, 5); {s3 будет равно 'Turbo'}
s4 := copy(s, 11, 6); {s4 будет равно 'Pascal'}
- Delete(var s:string; index,count:integer)
Процедура удаляет из строки-параметра s подстроку длиной count символов, начиная с символа под номером index.
Пример.
s := 'Система Turbo Pascal';
delete(s,8,6); {s будет равно 'Система Pascal'}
- Insert(source:string; var s:string;index:integer)
Процедура предназначена для вставки строки source в строку s, начиная с символа index этой строки.
Пример.
s := 'Язык Pascal';
insert('Turbo ',s,5); {s будет равно 'Язык Turbo Pascal'}
- Pos(substr,s:string):byte
Функция производит поиск в строке s подстроки substr. Результатом функции является номер первой позиции подстроки в исходной строке. Если подстрока не найдена, то функция возвращает 0.
Пример.
s := 'Язык Turbo Pascal';
x1 := pos('Pascal', s); {x1 будет равно 12}
x2 := pos('Basic', s); {x2 будет равно 0}
- Str(X: арифметическое выражение; var st: string)
Процедура преобразует численное выражение X в его строковое представление и помещает результат в st.
- Val(s : string, u : integer, c : integer), где
s – строка, u – число из строки, с – код ошибки если преобразование не удалось.