Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 [ 42 ] 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122

В1деление части строки с помощью функции substr

О функции substr часто забывают, не придавая ей особого значения, хотя она предоставляет универсальный метод выборки информации из скаляров и их редактирования. Синтаксис этой функции выглядит следующим образом:

substr строка, смещение substr строка, смещение, длвшй

Функция substr берет строку, начиная с позиции, указанной во втором параметре, и возвращает оставшуюся часть строки (т.е. начиная с позиции смещение и до конца). Если параметр длина задан, то берется подстрока соответствующей длин:. Если же в результате происходит выход за пределы строки, то просто берется подстрока до конца строки. Это продемонстрировано в следующем примере.

символов в строке $а

# 0 10 20 30 40 50 $а="0 сколько нам ожрьний чуцных готовит проовещенья век"; print substr($a, 50);I Возвращается "век"

print substr($a, 10, 12);# Возвращается "нам открытий"

ЕСЛИ задано отрицательное значение параметра смещение, то функция substr начинает отсчет справа. Например, substr($a, -5) возвращает пять последних символов строки $а. Если задано отрицательное значение параметра длина, то функция substr возвращает подстроку от начальной позиции и до конца строки, за исключением последних символов, количество которых определяется параметром длина. Например:

print 30, Возвращается "готовит

В предыдущем фрагменте функция substr начала работу с 30-й позиции и вернула

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

Функцию substr можно использовать также в левой части оператора присваивания. Такая конструкция позволяет указать, какие символы в скаляре должны быть заменены. В качестве первого аргумента функции substr следует задать скалярную переменную, а не строку символов, которой будет присваиваться значение. Ниже приведен пример редактирования строки с помощью функции substr,

выше и выше, и выше"; f Закенвн первое слово "выше" ш "-вше" substr($a, 4, 4)=-ннже";

♦ Вставим в начало строки слово "Песня:" substr{$a, 0, 0)="Песня:";

f Заменим >следние 4 сита substr{$a, -4, 4)="ник";

Транслитерация а не подстановка

Прежде чем рассмотреть оператор транслитерации (который иногда называют, оператором давайте немного вспомним, как работает оператор, подстановки, о котором шла речь на 6-м занятии, "Поиск по шаблону". Оператор подстановки



имеет вид замена/ и, если не задан оператор привязки =", выполняет поиск по шаблону и замену строки, находящейся в служебной переменной $ . Оператор транслитерации чем-то напоминает оператор подстановки, однако работает он немного иначе, поскольку в нем не используются регулярные выражения. Синтаксис этого операторы выглядит так:

trffoifcxa ок замены/

Оператор транслитерации tr / выполняет поиск в строке элементов, указанных в первом списке, и заменяет их на соответствующие элементы из второго списка. По умолчанию поиск и замена выполняются в строке, находящейся в переменной $ . Чтобы изменить это правило, необходимо воспользоваться оператором привязки =", как в случае использования регулярных выражений, например:

tr/JffiC/XXZ/; t В тщ&вязж $ вое буках "А" заьЕЕзякзтся на X",

♦ "В" та "Т" и т.д. $rtr/JSBC/XXZ/; f Та яе схщхптщ аигпнжтся щц тагазЕСЙ $г

Для логической группировки символов используется дефис. Например, конструкция A-Z представляет список прописных букв от А до Z включительно. Логическая группировка позволяет избежать перечисления символов в списке, например:

tr/A~z/a-z/; f Иеняет ретвстр кв с веркЕЕто на нкигкй tr/A-Za-z/a-zA-Z/; t Иэеият ретилр букв та сврешвй

Если в операторе транслитерации второй список идентичен первому или вовсе отсутствует, то оператор tr / выполняет только подсчет найденных символов и возвращает данное значение. При этом исходная строка не изменяется, например:

$eyes=SpotatO="tr/i ; i Выполняется подсчет количества символов "i

i в переменной $potato н найденное значение

f исваивается переменной $eyes Saums=tr/0-9 ; 1 Выполется подсчет колеса цифр

I в переменной $ и найденное значение

I грисваивается переменней $nums

И в заключение отметим, что у оператора tr / есть синоним - оператор у /.

Исторически так сложилось, что префиксы tr и у обозначают одну и ту же операцию.

В операторе tr / (а значит, и в у /) можно заменить символ разделитель списков.

Обычно программисты выбирают пару круглых или квадратных скобок или любой другой подходящий символ, например:

tr(a-zHn-za-m); t :л1х 1икгир:ксго сдта вво 13

♦ скмвств схуижмзго щра&юж $ . у[,. -][;:=] t Заьив iH03KjbK ситств гипвщи


У оператора tr / есть ряд дополнительных функциональных возможностей, которые используются сравнительно редко. Чтобы ознакомиться с ними, обратитесь к разделу prelop справочного руководства.

Улучшение качества печати

Выходные данные, которые мы до сих пор выводили на печать с помощью функции print, имели незатейливый вид. Дело в том, что функция print предназначена для выполнения отладочной печати, поэтому в ней не предусмотрено практически никаких средств



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

ширины и др. Функция printf б1ла почти полностью заимствована из языка программирования С, однако стоит отметить, что в других языках программирования имеется аналогичная по своим функциональным возможностям функция (например, print using в BASIC). Синтаксис функции printf выглядит следующим образом:

printf мтировавйя, список printf лов форматирования, список

Параметр тировавия предназначен для описания формата выводимгх данных в сокращенном виде. Вместо списка следует указать значения, выводимые функцией printf на печать (так же, как и В операторе print). По умолчанию вывод осуществляется в стандартный выходной поток (дескриптор STDOUT), однако, как и в

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

Шаблон форматирования обычно задается в виде литерала (реже в виде скалярной переменной) и определяет внешний вид выводим1х данных. Любые символы, указанные в шаблоне, кроме тех, что начинаются с помещаются в неизменном виде в выходной поток. Символ процента обозначает начало спецификатора поля, который задается в вид .dx (рис. 9.1). Параметр мдает ширину поля в символах; параметр d определяет количество цифр после десятичной точки (для числовых данных) или общую допустимую ширину поля для строк; параметр х обозначает тип выводимгх данных. Дефис перед параметром w означает, что данные в поле шириной w символов выравниваются по его левому краю. По умолчанию данные будут выровнены по правому краю поля. Обязательными в спецификаторе поля являются только символ процента и поле х.

Список некоторых часто используемых спецификаторов типа поля указан в табл. 9.1.

" Маркер начала спецификатора поля

Необязательный знак "минус" -Общая ширина поля (обязательный)

-v.dx-

-Тип поля (обязательный)

Необязательное количество цифр после десятичной точки

-• Необязательный знак "десятичнойточки"

Рис. 9.1. Формат спецификатора поля

Таблица 9.1. Некоторые спецификаторы типа поля

Спецификатор типа

СимвЬл

Строка

Десятичное целое; дробная часть числа отбрасывается Число с плавающей точкой



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 [ 42 ] 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122