Анимация
JavaScript
|
Главная Библионтека В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 |