Опубликован: 23.10.2009 | Уровень: для всех | Доступ: платный
Лекция 6:

Примитивные символьные данные

< Лекция 5 || Лекция 6: 12 || Лекция 7 >

В таблице 6.3 приведены функции работы со скалярами и массивами скаляров на языке Perl.

Таблица 6.3. Функции для работы с текстом
Функция/Метод Синтаксис Описание Пример
Perl Функции для работы со скалярами
chomp chomp СПИСОК Удаляет из каждого строкового элемента замыкающий символ завершения записи, определенного значением переменной $/ (по умолчанию - \n). Возвращает общее количество удаленных символов. Список может состоять из одной переменной. При использовании без параметра функция эквивалентна chomp $_ .
chop chop СПИСОК Удаляет из каждого строкового элемента списка последний символ. Возвращаемое значение - удаленный символ из последнего элемента списка. Список может состоять из одной переменной. При использовании без параметров эквивалентно вызову chop $_ .
chr chr ЧИСЛО Возвращает символ по заданному числовому коду таблицы символов. При использовании без параметров эквивалентно вызову chr $_ .
crypt crypt ТЕКСТ, ШИФР Шифрует ТЕКСТ с использованием заданного параметра шифра. Обратной функции дешифровки не существует.
hex hex ВЫРАЖЕНИЕ Интерпретирует строковое ВЫРАЖЕНИЕ как шестнадцатеричное число и вычисляет его десятичный эквивалент. При использовании без параметров вызов аналогичен вызову hex $_ .
index index СТРОКА, ПОДСТРОКА[, ПОЗИЦИЯ] Возвращает позицию первого вхождения указанной подстроки в заданную параметром СТРОКА строку или "-1", если подстрока не найдена. Если задан параметр ПОЗИЦИЯ, то поиск начинается с заданной позиции в строке (нумерация символов в строке начинается с "0").
lc lc ВЫРАЖЕНИЕ, Функция преобразует все прописные буквы строкового параметра ВЫРАЖЕНИЕ в строчные буквы и возвращает полученную строку. В случае применения use local при преобразовании используются текущие локальные установки. При использовании без параметров функция аналогична вызову lc $_ .
lcfirst lcfirst ВЫРАЖЕНИЕ Преобразует первый символ строкового параметра ВЫРАЖЕНИЕ в нижний регистр и возвращает полученную строку. В случае применения use local при преобразовании используются текущие локальные установки. При использовании без параметров вызов функции аналогичен вызову lcfirst $_ .
length length ВЫРАЖЕНИЕ Возвращает количество байтов в строке, являющегося значением параметра ВЫРАЖЕНИЕ. При использовании без параметров функция эквивалентна вызову length $_ .
oct oct ВЫРАЖЕНИЕ Интерпретирует строковое ВЫРАЖЕНИЕ как восьмеричное число и вычисляет его десятичный эквивалент. Если строка начинается с символов 0x, то его содержимое интерпретируется как шестнадцатеричное число. При использовании без параметров вызов функции аналогичен вызову oct $_ .
ord ord ВЫРАЖЕНИЕ Возвращает числовой ASCII код первого символа строки, являющегося значением параметра ВЫРАЖЕНИЕ. При использовании без параметров вызов функции аналогичен вызову ord $_ .
pack pack ШАБЛОН, СПИСОК Упаковывает массив или список значений в двоичную структуру в соответствии с заданным шаблоном, представляющим собой последовательность символов, которые задают порядок и тип значений. Возвращает строку, содержащую полученную структуру.
reverse reverse СПИСОК В списковом контексте возвращает список значений, состоящий из элементов, заданным параметром СПИСОК списка, но в обратном порядке, начиная с последнего символа. В скалярном контексте соединяет все элементы списка в одну строку, состоящую из символов полученной строки, но в обратном порядке.
rindex rindex СТРОКА, ПОДСТРОКА[, ПОЗИЦИЯ] Возвращает позицию последнего вхождения указанной подстроки в заданную параметром СТРОКА строку или "-1", если подстрока не найдена. Если задан параметр ПОЗИЦИЯ, то поиск начинается до заданной позиции в строке (включая символ в этой позиции).
sprintf sprintf ФОРМАТ, СПИСОК Возвращает строку, представляющую собой форматный вывод списка значений, определенного параметром СПИСОК, в соответствии с заданной параметром ФОРМАТ строкой формата. Символы форматирования соответствуют функции форматирования языка Си printf.
substr substr СТРОКА, СМЕЩЕНИЕ[, ДЛИНА[, ЗАМЕЩЕНИЕ]] Находит и возвращает из параметра СТРОКА, подстроку длиной, равной значению параметра ДЛИНА, начиная с символа, заданного параметром СМЕЩЕНИЕ. Если значение СМЕЩЕНИЕ отрицательно, то извлечение начинается с последнего символа строки. Если значение ДЛИНА отрицательно, то от конца строки отсекаются количество символов, равное абсолютному значению этого параметра. Если задан строковый параметр ЗАМЕЩЕНИЕ, то найденная подстрока замещается ею в параметре СТРОКА, который в этом случае должен быть l-Значением.
uc uc ВЫРАЖЕНИЕ, Функция преобразует все строчные буквы строкового параметра ВЫРАЖЕНИЕ в прописные буквы и возвращает полученную строку. В случае применения use local при преобразовании используются текущие локальные установки. При использовании без параметров вызов функции аналогичен вызову uc $_ .
ucfirst ucfirst ВЫРАЖЕНИЕ Преобразует первый символ строкового параметра ВЫРАЖЕНИЕ в верхний регистр и возвращает полученную строку. В случае применения use local при преобразовании используются текущие локальные установки. При использовании без параметров вызов функции аналогичен вызову ucfirst $_ .
Лексикографический порядок (lexicographic ordering) совпадает с с упорядочением по алфавиту, когда строки набраны либо прописными, либо строчными буквами. Если вызываемая строка опережает документ, метод возвращает отрицательное значение, Если две сравниваемые строки равны, метод возвращает нулевое значение. Если аргумент опережает вызывающую строку, метод возвращает положительное значение.
Perl Функции для работы со скалярами (поиск и замена фрагментов)
pos pos СТРОКА pos Возвращает значение указателя позиции в строке после последней выполненной для нее операции поиска по образцу: m//g. Если используется в левой части операции присвоения, то изменяет значение указателя, влияя на \G в регулярном выражении. При использовании без параметров данный вызов эквивалентен вызову: pos $_.
quotemeta quotemeta ВЫРАЖЕНИЕ quotemeta Возвращает строку, в которой перед каждым неалфавитно-цифровым символом поставлена обратная черта. Значение параметра: ВЫРАЖЕНИЕ - интерпретируется как строка. (Внутренняя функция реализации управляющего символа \0 в строках в двойных кавычках). При использовании функции без параметров эквивалентно вызову quotemeta $_.
split split /ОБРАЗЕЦ/[.ВЫРАЖЕНИЕ[.ПРЕДЕЛ]] split Разбивает строку, являющуюся значением параметра: ВЫРАЖЕНИЕ, на массив строк, с использованием разделителя, определяемым регулярным выражением в параметре: ОБРАЗЕЦ. В списковом контексте возвращает полученный массив, в скалярном контексте - количество найденных строк разбиения. Если задан параметр: ПРЕДЕЛ, разбивает на не более чем заданное этим параметром число строк. Если параметр: ВЫРАЖЕНИЕ - не задан, то используется внутренняя специальная переменная интерпретатора Perl $_, Если не задан образец, то разбивает по пробельным символам. При использовании без параметра эквивалентна split /\s+/. $_. Операция split - антагонист операции: join.
study study ВЫРАЖЕНИЕ study Оптимизирует строковые данные параметра: ВЫРАЖЕНИЕ - для дальнейшего использования в повторных операциях поиска по образцу. В цикле с несколькими операциями поиска может сэкономить время выполнения. При использовании без параметров функция эквивалентна: study $_.
Perl Функции для работы с массивами скаляров
delete delete ВЫРАЖЕНИЕ Удаляет из массива скаляров его элемент или фрагмент, заданный параметром: ВЫРАЖЕНИЕ. Если удаляется последний элемент массива, то автоматически изменяется длина массива, если удаляются элементы из его середины, то оставшиеся элементы не сдвигаются (для сдвига используйте функцию splice()), а соответствующий "удаленный" элемент принимает неопределенное значение. В списковом контексте возвращает список удаленных элементов, а в скалярном - их количество. Если удаляемых символов в массиве нет, то возвращает неопределенное значение. Функция delete работает с массивами скаляров только в Perl версий 5.6.0 и выше.
exists exists ВЫРАЖЕНИЕ Проверяет, был ли когда-либо инициализирован в массиве скаляров элемент, заданный параметром: ВЫРАЖЕНИЕ, например, $array[3], даже если сейчас его значение не определено. Если да, то возвращает значение "истина", иначе - "ложь". Функция exist работает с массивами скаляров только в Perl версий 5.6.0 и выше.
pop pop МАССИВ pop Удаляет из массива скаляров последний элемент и возвращает его значение. Если массив пустой, то возвращает неопределенное значение undef. Если функция вызывается без параметров, то главной программе вызов эквивалентен pop @ARGV, а в подпрограмме pop @_.
push push МАССИВ, СПИСОК Рассматривает массив скаляров, заданный параметром: МАССИВ, как стек и добавляет после его последнего элемента элементы списка, заданные параметром: СПИСОК. Возвращает количество элементов полученного массива.
shift shift МАССИВ shift Удаляет из массива скаляров первый элемент и возвращает его значение. После удаления элементы оставшиеся элементы сдвигаются влево: второй элемент становится первым, третий - вторым и т.д. Если массив пустой, то возвращает неопределенное значение undef. Если функция вызывается без параметров, то главной программе вызов эквивалентен shift @ARGV, а в подпрограмме shift @_.
splice splice МАССИВ, НОМЕР[, КОЛИЧЕСТВО[, СПИСОК]] Удаляет из массива количество элементов, заданное значением параметра: КОЛИЧЕСТВО, начиная с элемента, заданное значением параметра: НОМЕР. В случае задания параметра СПИСОК заменяет указанные в нем элементы списка. В списковом контексте возвращает удаленные элементы; в скалярном контексте - последний удаленный элемент. Если параметр:КОЛИЧЕСТВО не задан, то удаляются все элементы после элемента с номером, определенным значением параметра: НОМЕР.
unshift unshift МАССИВ, СПИСОК Добавляет элементы списка, определенного параметром: СПИСОК, в начало массива, заданного параметром МАССИВ. Выполняет действия, противоположные действиям функции shift.
grep grep БЛОК СПИСОК grep ВЫРАЖЕНИЕ, СПИСОК
join join ВЫРАЖЕНИЕ, СПИСОК Рассматривает все элементы списка, определенного параметром: СПИСОК, как строковые значения, соединяет их в одну строку, вставляя между ними разделитель, равный значению параметра: ВЫРАЖЕНИЕ, и возвращает полученную строку.
map map БЛОК СПИСОК map ВЫРАЖЕНИЕ, СПИСОК
pack pack ВЫРАЖЕНИЕ, СПИСОК
reverse reverse СПИСОК В списковом контексте возвращает список значений элементов, заданный параметром: СПИСОК, в обратном порядке, начиная с последнего элемента. В скалярном контексте соединяет все элементы в одну строку и возвращает строку, в которой символы расположены в обратном порядке, начиная с последнего символа.
sort sort [ПОДПРОГРАММА] СПИСОК sort [БЛОК] СПИСОК Сортирует список значений, заданный в параметре: СПИСОК. Если параметры БЛОК и ПОДПРОГРАММА не заданы, то используется стандартная процедура сравнения строковых данных. Если они заданы, то операторы блока или подпрограммы используются в качестве процедуры сравнения при сортировке элементов списка. В этом случае в теле блока или подпрограммы в последнем операторе следует использовать операцию <=> или cmp в зависимости от сортировки соответственно числовых и строковых данных. Возвращает список, элементами которого являются отсортированные элементы исходного списка.
unpack unpack ШАБЛОН, ВЫРАЖЕНИЕ

[Пример 01]

Примеры выражений

Пусть нам надо вставить во фразу: "Привет, <имярек>! С добрым утром." - вместо <имярек> человеческое имя, например, Света. Приводятся примеры фрагментов программ, написанных на языках Си, Perl и Quick Basic:

Си:

/* Определение констант и переменных */
const unsigned short maxstringlength = 255;
char strSveta[] = "Света";
char strResult[maxstringlength];
/* Заполнение результирующей переменной нулями*/
memset( strResult, '\0', (size_t) maxstringlength);
/* Символьные вычисления */
strncpy( strResult, "Привет ", maxstringlength );
strncat( strResult, (const char *)strSveta, maxstringlength );
strncat( strResult, "! С добрым утром.", maxstringlength );

Perl:

# Определение переменной: <имярек>.
$ImyaRek = 'Света';

# Определение результирующей строки.
$strResult = "Привет, $ImyaRek! С добрым утром.";

Quick Basic:

REM Определение переменной: <имярек>.
ImyaRek$ = "Света"
REM Символьные вычисления.
strResult$ = "Привет " + ImyaRek$ + "! С добрым утром."

6.3. Резюме

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

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

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

6.4. Глоссарий

Термин Английский термин Разъяснение
кодовая таблица code table 1. См. кодировка.
таблица символов code table 1. См. кодировка.
кодировка codepage Порядок соответствия литер символов целым числам.
длина кодировки codepage length Разрядность целого числа, используемого для представления литер. Используются однобайтные, двухбайтные кодировки и кодировки переменной длины.
EBCDIC-код EBCDIC Кодировка латинских символов, десятичных цифр, знаков препинания, пробельных и специальных символов на основе 7-ми битного кода. Не имеет сплошной кодировки символов. Данная кодировка применялась в мэйнфреймах IBM-360/370 и советских ЭВМ серии ЕС. В настоящее время безнадежно устарела.
десятичные цифры decimal digits Цифры, применяемые в десятичной системе счисления. Содержат в себе литеры от 0 до 9.
латинский алфавит Latin alphabet Прописные и строчные буквы от A до Z (всего 52 символа). Латинский алфавит используется в латинском, английском, французском и других "западных" языках.
знаки препинания punctuation marks Знаки, используемые в пунктуации, для разделения предложений и их частей. Кроме "обычных" знаков ",", ".", и других к ним относятся кавычки, апострофы, английские сокращения "&" и "@", а также знак подчеркивания и некоторые другие символы.
пробельные символы spacing symbols (characters) Символы, используемые для разделения слов в предложениях. К ним относят, кроме пробела, знаки горизонтальной и вертикальной табуляции, "возврат каретки", "перенос строки", "прогон страницы", а также нулевой символ.
специальные символы special characters Символы, не относящиеся к другим категориям и используемые для управления устройствами. См. метасимволы.
сплошная нумерация continuous numeration Кодировка имеет сплошную нумерацию литер алфавита, если последовательность литер пронумерована "подряд", соседними числами без разрывов. Сплошную нумерацию символов латиницы имеют все кодировки, кроме EBCDIC. Сплошная нумерация кириллических символов реализована в кодировках ANSI cp 1251, USSR GOST, Unicode и некоторых других.
алгоритм сравнения строк compare string algorithm Алгоритм, в котором строки сравниваются в лексикографическом порядке, и результат сравнения (больше, меньше, совпадают) передается оператору условия. Алгоритм сравнения строк используется для сортировки строк.
сортировка строк sorting of the screen Расположение строк по возрастанию или по убыванию в лексикографическом порядке. В алгоритме сортировке используется алгоритмы сравнения строк.
лексикографический порядок dictionary order Порядок слов по алфавиту, в том виде, в котором он представлен в ЭВМ. При этом среди слов, имеющих одинаковое начало, большим будет считаться то, которое содержит больше символов.
семи битные кодировки seven bit codepages Кодировки, для представления символов в которых используется семь младших бит байта (из восьми). При этом старший бит используется для проверки правильности передачи символов.
кириллические символы Cyrillic character Литеры русского алфавита и алфавитов некоторых других славянских народов, созданные просветителями Кириллом и Мефодием при переводе библии с греческого на славянские языки. Кириллические символы входят в алфавиты всех народов России. В компьютере эти символы кодируются восьми битными кодировками и разновидностями Unicode.
ASCII ("аски") код ASCII 7-ми битный код для представления основных знаков препинания, цифр и букв латинского алфавита. Имеет "сплошную" нумерацию букв латинского алфавита. В настоящее время является основой для других кодировок.
UNIX ("ЮНИКС") UNIX Операционная система персональных компьютеров и мощных ЭВМ, разработанная в корпорации AT&T в 1972 г. Первоначально весь Интернет был доступен только для машин, работающих под операционной системой UNIX. В СССР эта операционная систем была известна под именем: "Демос".
VAX ("вакс") VAX Знаменитый компьютер корпорации Digital Equipment, породивший в 70-х - 80-х годах XX века множество своих "клонов" в виде СМ ЭВМ в СССР и странах СЭВ. Имел собственную операционную систему. В настоящее время его производство и техническая поддержка прекратились.
MS-DOS (ДОС) MS-DOS Операционная система персональных компьютеров 80-х - 90-х годов XX века, основанных на процессорах Intel.
Linux ("Линукс") Linux Одна из реализаций операционной системы UNIX, использующей открытый код и открытое программное обеспечение. Ее "ядро" разработано в начале 90-х годов XX века Линусом Торвальдсом (Финляндия).
кириллическая кодировка Cyrillic codepage Кодировка, содержащая кириллические символы. К кириллическим кодировкам относят: OEM 866, ANSI cp 1251, USSR GOST, KOI8-R, Unicode, UTF-8 и др.
OEM 866 OEM 866 Кириллическая кодировка MS-DOS. По-другому называется: "альтернативная русская кодировка".
ANSI cp 1251 ANSI cp 1251 Кириллическая кодировка MS Windows, основанная на кодировке ASCII и имеющая длину 8 бит. Имеют сплошную нумерацию для латинских литер и частично сплошную - для литер русского алфавита.
кодировка ГОСТ СССР USSR GOST 8-ми битная кодировка со сплошной нумерацией кириллических символов. Большого распространения не получила.
транскрипция 1. transcription 1. Запись кириллических символов вместо латинских букв или наоборот, учитывая их произношение. Например, латинской "P" соответствует буква "П", "C" - "Ц", "S" - "С", "V" - "В" и т.д. Транскрипция использовалась при создании кодировок KOI8-R (KOI8-U), и при составлении раскладки английских литер на "русской" клавиатуре.
КОИ-8 KOI8-R 8-ми битная кириллическая кодировка, используемая в UNIX и ее клонах. В настоящее время является устаревшей. В этой кодировке латинские символы с номерами 128 - 255 были заменены на кириллические символы в той же транскрипции. При этом кириллические символы упорядочены не по алфавиту: вот первые из семи последовательных кириллических символов в этой кодировке: "Ю, А, Б, Ц, Д, Е, Ф, …".
юникод Unicode Кодировка длиной 2 байта для представления всех символов всех национальных алфавитов. Имеет в два раза больший объем, чем основанные на ASCII кодировках. В настоящее время является стандартом для кодирования символов национальных алфавитов.
UTF-8 UTF-8 Кодировка переменной длины, хранящая символы латиницы в кодировке ASCII, а все символы национальных алфавитов - в юникоде. Часто позволяет более "компактно" представлять текст. В настоящее время является стандартом для кодирования символов в операционных системах.
символы псевдографики pseudo graphics character Символы в восьми битных кодировках OEM, предназначенные для рисования линий таблиц, "заполнений" и стрелок. Эти символы находятся в кодовой таблице под номерами с 176 по 223, и используются только в MS-DOS и совместимых с нею операционных системах.
знакогенератор characters' decoder Интегральная схема в мониторе, способная в текстовом режиме его работы преобразовывать символы из кодовых страниц OEM (MS-DOS) в видимые литеры на экране дисплея. В графическом режиме работы дисплея знакогенератор не задействован.
многоразрядные кодировки multidigit codepages К многоразрядным кодировкам относят кодировки UTF-8, Unicode и другие, имеющие переменное число разрядов или число разрядов, большее восьми. Многоразрядные кодировки помогают кодировать символы всех существующих национальных алфавитов.
символьный тип данных symbol (character) data type Целый тип данных, используемый для хранения в нем символов в одной из кодировок. Различают примитивные символьные данные и специальные символьные типы данных. Они отличаются в "машинной" реализацией типов в языках программирования.
примитивный символьный тип данных primitive character data type Символьный тип данных, реализованный в виде целочисленной ячейки памяти для хранения одного символа. Для хранения строки символов будет использован массив этих данных. Обычно этот тип данных обозначается как 'char'.
строка string Последовательность символов в одной из кодировок, оканчивающаяся терминальным символом. Обычно строка представляется в виде массива примитивных типов данных. Ориентировочно максимальная длина строки лежит в пределах: ~ 255 - 2047 символов.
терминальный символ строки terminal character of a string Символ, указывающий на окончание строки символов. Все символы, расположенные после терминального символа, игнорируются. В Си-подобных языках терминальный символ - ноль ('\0', или '0x00').
максимальный индекс строки maximal string index Заданные программистом или компьютерными системами ограничения на количество символов в строке для примитивных символьных данных. Изменяется от 255 (Бейсик) до 64K (Си), но на практике не советуется устанавливать его большим 2000 символов.
максимальная длина массива ultimate array length Общее количество элементов в массиве. Это значение является максимально возможным значением индекса массива. Длина массива может быть постоянной (фиксированной для статичного массива), а может увеличиваться и уменьшаться (для так называемых динамических массивов, не рассматривающихся в данных лекциях).
фиксирование 1. fixation Явное указание числа элементов у статичного массива при его объявлении, которое также задает максимальное значение его индекса. Это число указывается либо целой константой, либо именованной макроподстановкой (на языке Си).
статичный массив static array Массив с постоянным числом его элементов, который объявляется вначале блока операторов и под которое в программе выделяется место в оперативной памяти в виде "сплошной" последовательности ячеек. В отличие от динамических массивов максимальное число его элементов не изменяется.
нулевая константа zero constant Символ с кодом ASCII 0 (0x00), имеющий в Си-подобных языках обозначение '\0'. Именно этим символом заканчивается любая строка примитивных символьных данных.
создание (массива) allocating (of an array) Выделение места в оперативной памяти для размещения элементов массива, и присвоение указателю на этот массив адреса этой ячейки памяти на время выполнения программы (run-time). После завершения работы с массивом выделенную под него область памяти необходимо освободить перед завершением работы программы.
объявление (массива) declaration (of an array) Выделение места в оперативной памяти для размещения элементов массива и, возможно, его инициализации в процессе компиляции программы. "Объявленную" память освобождать не нужно.
инициализация (массива) initialization (of an array) Присвоение конкретных значений элементам массива при его объявлении или сразу после его создания. Обычно символьный массив инициализируется нулевыми символами специальными функциями.
нулевой символ zero character См. нулевая константа.
освобождение памяти release of a memory Отмена выделения места в оперативной памяти места для элементов массива и присвоение связанному с ним указателю значения "NULL". После освобождения памяти при попытке обратиться к элементу массива возникает ошибка "отказ в доступе" (access denied).
копия изменяемой строки copy of changed string Точная копия элементов изменяемого массива, сделанная с него для манипуляции данными. Ее делают для реализации "джентльменского соглашения", согласно которому исходные символьные данные не меняются при манипуляциях со строками.
< Лекция 5 || Лекция 6: 12 || Лекция 7 >
Юрий Фролов
Юрий Фролов
Украина
Ольга Галанина
Ольга Галанина
Россия